news 2026/9/23 16:06:47

基于PLC的直流电机调速实验:原理、接线与PID闭环实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于PLC的直流电机调速实验:原理、接线与PID闭环实现

简介:一份面向电气自动化与电力系统专业学生、PLC初学者的直流电机调速实验实训文档。内容以西门子S7-224XPcn型可编程控制器为核心,系统讲解采用PID算法实现电机启动、运行、停止控制,启动电流限制,电枢电流与转速监测,超速过流保护,以及开环与闭环调速等完整环节,并给出了目标转速每分钟一千五百转时的调节思路与保护阈值设定方法。文档还配有调速系统原理图、流程图,以及数模转换、整流模块等核心部件的工作原理说明,有助于读者将可编程控制器编程与电力电子控制相结合,直接用于课程设计或实训报告撰写。整个资料仅包含一个文档文件,压缩包仅733KB,结构清晰,便于快速查阅与对照实验。目前已有四十五人学习下载,内容覆盖实训目的、设计步骤、保护机制与总结建议,对希望掌握可编程控制器模拟量控制及PID工程应用的读者尤其有价值。

1. 基于PLC的直流电机调速实验到底在做什么

把一台直流电机调速实验台从“拧电位器”改成“在触摸屏上敲一个转速”,多数人的第一反应是加一块PWM调速板,让PLC输出模拟量,转速大小由给定电压决定。真正接线调试之后才会发现,问题不在“能不能转”,而在“负载一变转速就掉”。直流电机有个基本特性:电磁转矩必须等于负载转矩,转速才稳定;而电枢电阻上的压降会随电流变化,开环给定在这个环节是补偿不了的。所以这个实验的本质不是做一个简单的电压调节器,而是做一个带转速反馈的闭环系统:PLC作控制器,直流电机驱动电路作执行器,编码器或测速发电机作反馈元件,再用梯形图或结构化文本把PWM调速、PID调速串到一起。下面按原理、接线、程序、验证四条线展开,既能应付课程设计也能用于小型设备改造。

2. 直流电机调速实验的原理与方案选型:为什么优先做单闭环

2.1 从转速公式理解可控量:电枢电压是调速主变量

直流他励电机在稳态下的电动势平衡方程为:

U = E + Iₐ·Rₐ

其中 E = Cₑ·Φ·n,代入后得到转速表达式:

n = (U − Iₐ·Rₐ) / (Cₑ·Φ)

这个公式里藏着两个关键信息。第一,电枢电流 Iₐ 由负载决定,负载变大时 Iₐ·Rₐ 这一项变大,转速会往下掉;第二,端电压 U 和磁通 Φ 是外部可控制的量。工程上把调速方式分成三种,对比如下表。

调速方式控制量机械特性变化典型应用
电枢串电阻串入电阻分压特性变软,转速随负载波动大有级调速,能耗大,基本淘汰
调节电枢电压端电压U特性曲线平行移动,硬度不变基速以下恒转矩无级调速
弱磁调速励磁磁通Φ转速上移,转矩能力下降基速以上恒功率调速

实验台上常见的直流电机额定电压多为 24V、48V 或 110V,工作点在基速以下,所以首选调电枢电压。注意不要为了“做出效果”去动励磁回路,弱磁调速需要配合电流限幅和超速保护,课程设计里做不好容易出现飞车。

2.2 三种落地方案的取舍:晶闸管调压、IGBT斩波与H桥

确定了调压调速,下一步是选执行器。实验室里主要有三类直流电机驱动电路:

晶闸管相控整流适合 5kW 以上的大功率场合,通过控制导通角改变平均电压,但会产生较大的电网谐波,触发电路也复杂。中小功率实验台更常见的是 IGBT 或 MOSFET 斩波电路,开关频率固定,靠改变占空比调节平均电压。带正反转和回馈制动需求时用 H 桥,四个开关管交叉导通,还能做再生制动,但要注意死区时间,上下桥臂直通会烧管子。

方案功率范围控制信号能否再生制动实验难度
晶闸管相控5kW以上移相触发脉冲可,需有源逆变
IGBT半桥斩波百瓦到数千瓦PWM占空比
H桥PWM百瓦到数千瓦两路互补PWM

对大多数 PLC 直流电机调速实验,H桥或半桥斩波最合适,因为 PLC 本身可以输出高速脉冲,占空比计算交给程序,驱动板只做功率放大。

2.2.1 PWM 直流电机驱动电路里的频率与死区边界

PWM 频率不能随手填。频率太低,电枢电流断续,电机会出现明显的顿挫感和噪声;频率太高,MOSFET 开关损耗上升,驱动板发热。我一般按电机时间常数来定:小功率永磁直流电机取 8kHz 到 20kHz,既能避开人耳敏感区,又不会让开关损耗失控。至于死区时间,通常取 1μs 到 3μs,具体看驱动芯片的传播延迟,半桥电路用互补 PWM 时务必加死区,否则上下管重叠导通瞬间相当于短路。

2.3 单闭环直流调速系统仿真先行:确定时间常数再上电

参数整定之前,先用一阶惯性模型估算机电时间常数,能少走很多弯路。直流电机转速环的简化传递函数一般写成 G(s) = K/(Ts+1),K 是稳态增益,T 是机电时间常数。拿到电机铭牌后可以用下面这段 Python 脚本离线仿一下阶跃响应。

# 直流电机一阶模型 K/(Ts+1),0.8s 处给 800rpm 阶跃 K = 1.2 # 稳态增益,近似为转速/电压比例 T = 0.6 # 机电时间常数,单位秒 dt, total = 0.005, 5.0 t, v = 0.0, 0.0 points = [] while t < total: target = 800.0 if t >= 0.8 else 0.0 dv = (K * target - v) / T # 一阶惯性差分方程 v += dv * dt points.append((t, v)) t += dt print(f"稳态值: {points[-1][1]:.1f} rpm, 到达95%时间: " f"{next(t for t, v in points if t > 0.8 and v >= 760):.2f} s")

这段代码把电机近似成一个惯性环节,输出是转速轨迹。算出的到达 95% 稳态时间,能直接指导后面 PID 调速的采样周期选多大。如果仿真显示开环从给定到稳态要两三秒,说明电机和负载的转动惯量偏大,PID 里的积分时间常数就不能取得太小。

3. PLC 端硬件接线与 I/O 映射:把编码器、驱动器和急停接到 PLC

3.1 实验平台的最小部件清单

一个能完成闭环调速的实验台,至少需要六样东西:PLC 本体、直流电机、直流电机驱动电路板、测速反馈元件、开关电源、操作按钮。选型时要注意反馈元件和 PLC 高速计数器的匹配,这是很多实验做不下去的根源。

部件建议规格作用
直流电机24V/48V,几百瓦以内被控对象
H桥驱动板带死区和过流保护PWM功率放大
编码器200~1000线增量式转速反馈
或测速发电机输出电压与转速成正比替代编码器方案
PLC带高速计数器和高频脉冲输出控制核心
开关电源电压比电机额定高20%以上供电

PLC 选型上,西门子 S7-200 SMART 和三菱 FX 系列都带 100kHz 高速脉冲输出,做这个实验富余。如果手里只有不具备高速输出的经济型 PLC,可以退而求其次,用模拟量输出接一个电压控制的 PWM 功率板,但这样做不到精确闭环,实验效果会打折扣。

3.2 I/O 分配与接线要点

以下是一套比较稳妥的 I/O 分配方案,以 S7-200 SMART SR20 为例,高速计数器和高速脉冲输出都用本体自带的点。

PLC地址信号接法说明
I0.0编码器A相接HSC0,模式12(正交计数)
I0.3正转启动按钮常开触点,上升沿有效
I0.4停止按钮常闭触点
I0.5急停常闭触点,串入硬件回路
Q0.0PWM输出接H桥PWM输入端
Q0.2正转方向接H桥方向控制
Q0.3反转方向接H桥方向控制

接线里有个容易被忽略的点:停止和急停按钮用常闭触点接入 PLC,程序里读的是常开状态。这样一旦线路断裂,PLC 读到的是断开状态,程序能自动判为急停触发。如果按钮本身用常开触点,断线后系统反而认为按钮没按下,安全联锁形同虚设。

3.2.1 测速反馈接入方式:高速计数器还是模拟量

编码器反馈接高速计数器,转速由频率换算得到;测速发电机则是输出电压,接模拟量模块。两种方案各有适用场景。编码器方案精度高、响应快,但要求 PLC 至少有 20kHz 以上的高速计数能力;测速发电机接线简单,不需要高速输入,但输出电压有纹波,模拟量采样后要做滤波,响应会慢几十毫秒。

用编码器时,转速换算公式为 n = 60·f/P,其中 f 是 A 相脉冲频率,P 是编码器每转脉冲数。假设编码器 500 线,4 倍频后每转 2000 个计数,那么 100ms 内如果计到 3333 个脉冲,转速约为 1000rpm。PLC 程序里用定时中断配合高速计数器当前值做差值即可,这个差值就是反馈转速的原始值。

3.3 上电前的安全联锁逻辑

闭环调速程序里最先写的不是 PID,而是联锁。下面是 STL 写的一小段运行请求逻辑:

Network 1 // 运行请求:正转启动且停止和急停未动作 LD I0.3 // 正转启动按钮,常开 AN I0.4 // 停止按钮,常闭接线,程序读常开 AN I0.5 // 急停按钮,常闭接线,程序读常开 = M0.0 // 运行请求中间位 Network 2 // 方向互锁:正转和反转不能同时为ON LD M0.0 AN Q0.3 // 反转输出为OFF时才允许正转 = Q0.2

这段代码有两个细节。第一,Network 2 里用 Q0.3 做互锁,是程序级互锁,H桥驱动板本身的硬件互锁也要保留,程序万一跑飞至少还有硬件兜底;第二,M0.0 是运行请求,后续 PWM 输出和 PID 计算都要判断这个位,一旦急停后,积分器随之清零,防止恢复上电瞬间电机突然加速。

4. 用 PLC 编程实现 PWM 调速与 PID 闭环:核心代码与参数表

4.1 PLC 梯形图里的 PWM 不是唯一的做法

很多教材一上来就教 PWM 向导或 PLSY 指令,但实际工程里 PWM 生成有三种思路,选哪个要看具体场景。

第一种是用 PLC 本体高速脉冲输出指令,比如 S7-200 SMART 的 PLS 或三菱的 PLSY。优点是不占扫描周期,占空比由特殊寄存器设定,输出稳定;缺点是一块 CPU 的高速脉冲通道有限,通常只有两路。第二种是用 PWM 向导生成的子程序,适合不想自己写脉冲逻辑的场合。第三种是纯梯形图自写 PWM,用定时器翻转输出,适合频率低、精度要求不高的演示,缺点是定时器分辨率有限,占空比调节粗糙,转速波动会比较大。

做调速实验我会优先选第一种。PLC 梯形图上调用 PWM 子程序时,需要注意占空比寄存器是 16 位还是 32 位,以及周期和脉宽的单位是微秒还是毫秒,不同厂家的定义差很多。拿到一台不熟悉的 PLC,先翻一下高速脉冲输出部分的特殊寄存器表,比对着例程猜参数可靠得多。

4.2 一个可直接移植的 SCL 调速功能块

PID 部分不建议完全依赖向导生成的 PID 块。向导块调试简单,但内部的积分限幅和输出限幅策略是固定死的,实验里想观察抗积分饱和效果时不够灵活。下面是一个用 SCL 写的位置式 PID 功能块,接口做了通用化处理,博途和三菱 GX Works 3 里的结构化文本也能对应移植。

FUNCTION_BLOCK FB_DCMotorSpeed VAR_INPUT bRun : BOOL; // 运行使能,来自联锁逻辑M0.0 rSetSpeed : REAL; // 转速给定,单位rpm rActSpeed : REAL; // 转速反馈,由高速计数器换算 rKp : REAL := 1.5; // 比例增益 rKi : REAL := 0.08; // 积分增益,含采样周期折算 rKd : REAL := 0.05; // 微分增益 rSampleTime : REAL := 0.05; // 采样周期,单位秒 END_VAR VAR_OUTPUT iPWM : INT; // PWM占空比,0~1000 bRegActive : BOOL; // 调节器激活指示 END_VAR VAR rError : REAL; rIntegral : REAL; rLastError : REAL; rOut : REAL; rDerivative : REAL; END_VAR IF NOT bRun THEN rIntegral := 0.0; rLastError := 0.0; iPWM := 0; bRegActive := FALSE; ELSE rError := rSetSpeed - rActSpeed; rIntegral := rIntegral + rError * rSampleTime; // 积分限幅,防止深度饱和 rIntegral := LIMIT(MIN := -100.0, MAX := 100.0, IN := rIntegral); rDerivative := (rError - rLastError) / rSampleTime; rOut := rKp * rError + rKi * rIntegral + rKd * rDerivative; rLastError := rError; // 输出限幅到0~1000,对应占空比0~100% rOut := LIMIT(MIN := 0.0, MAX := 1000.0, IN := rOut); iPWM := INT(rOut); bRegActive := TRUE; END_IF;

这段代码里有几个参数含义需要说清楚。rKi 是积分增益,前面的 rIntegral 累加项乘了采样周期,所以 rKi 的实际量纲是“每秒补偿多少占空比”,而不是单纯累加误差。微分项对测量噪声极其敏感,如果传感器反馈毛刺大,建议直接令 rKd 为 0,否则转速波动会被微分放大成占空比抖动。输出上下限设成 0 到 1000,是为了避免 PWM 占空比超出 100% 或变成负值,这个限幅在真实电机上就是堵转保护和失控保护的第一道闸。

4.3 PID 调速的参数整定:采样周期与三个系数

有了功能块,参数不能拍脑袋填。先定采样周期,再调比例,后加积分,最后考虑微分。采样周期的参考值可以按电机机电时间常数的十分之一到二十分之一来取,前面的 Python 仿真已经给出了时间常数量级。

电机类型机电时间常数建议采样周期初始Kp初始Ki
小功率永磁电机(几十瓦)0.1~0.3s10~20ms0.5~20.02~0.08
中功率他励电机(几百瓦)0.3~1s20~50ms1~30.05~0.15
带大惯量负载1s以上50~100ms2~50.05~0.1

整定步骤我习惯这样走:先把 rKi 和 rKd 设为 0,只留比例项,从小到大加 Kp,观察空载阶跃响应是否出现等幅振荡。出现振荡后把 Kp 退回到振荡值的 60% 左右,此时系统已经有约 4:1 衰减比,再加积分消除稳态误差。Ki 从小往大调,如果转速出现低频来回摆动,说明 Ki 偏大,要往回退。微分项在这个实验里不是必需品,除非负载波动频繁,否则不加反而稳定。

4.3.1 抗积分饱和的具体做法

位置式 PID 在给定突变或者电机堵转时,积分项会持续累加,占空比冲到限幅值,反馈转速却迟迟追不上给定。等误差反转,积分需要很长时间退回来,这期间电机一直全压运行,表现就是转速过冲严重甚至持续超调。上面的代码已经处理了这个问题:积分限幅比输出限幅更严格,限幅值取得越紧,退出饱和越快。实际实验里还可以加积分分离,当误差绝对值超过一定阈值时,暂停积分累加,只在误差收窄后才恢复,这种做法对频繁启停的实验台很有效。

5. 调试波形、验证指标和把实验 doc 写厚

5.1 用 PLC 数据监控验证阶跃响应

闭环调通后,验证环节通常用示波器抓波形,但在 PLC 实验台上更直接的办法是将给定值和反馈值按固定周期写入数据块,用通信读取后离线分析。S7-200 SMART 可以用数据块导出 CSV,三菱 FX 可以用串口助手抓 D 寄存器。下面这段 Python 脚本专门用来从 CSV 里计算阶跃响应的三个指标。

# 用法: python step_analysis.py trace.csv # CSV列名: time_s, setpoint_rpm, feedback_rpm import csv, sys t, sp, fb = [], [], [] with open(sys.argv[1]) as f: for row in csv.DictReader(f): t.append(float(row["time_s"])) sp.append(float(row["setpoint_rpm"])) fb.append(float(row["feedback_rpm"])) target = sp[-1] # 阶跃目标值 start_idx = next(i for i, v in enumerate(sp) if v > target * 0.9) step = sp[start_idx] # 阶跃发生时刻的给定 peak = max(fb[start_idx:]) # 反馈峰值 settle = next(i for i in range(start_idx, len(fb)) if abs(fb[i] - target) < target * 0.05) # 进入5%误差带 overshoot = (peak - target) / target * 100 settle_time = t[settle] - t[start_idx] print(f"超调量: {overshoot:.1f}% 调节时间: {settle_time:.2f}s " f"稳态误差: {fb[-1] - target:.1f}rpm")

如果脚本输出的超调量超过 20%,优先检查是不是积分限幅太松;调节时间过长,检查采样周期是不是比电机时间常数大太多。这类分析和示波器波形互相印证,比单独看一条趋势线更能定位问题。

5.2 实验 doc 里必须留下的数据和结论

写实验报告时,别把注意力全放在梯形图上。一份合格的直流电机调速实验 doc 至少要包含三块内容:一是电机铭牌和实测参数的对照表,包括额定电压、额定电流、实测电枢电阻、编码器线数;二是阶跃响应曲线和特征指标,即上一节脚本算出的超调量、调节时间、稳态误差;三是至少一组 PID 参数的整定记录,写明哪组参数对应什么现象。这样写出来的文档,别人拿着能复现实验,而不是只看到一张完美的响应曲线。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/23 16:02:46

OpenGL三维图形编程:渲染管线、矩阵变换与实战排错

简介&#xff1a;一份面向Visual C 6.0环境下学习OpenGL三维图形绘制的完整工程包&#xff0c;围绕三维场景的搭建与渲染&#xff0c;演示了窗口创建、OpenGL上下文初始化、投影与模型视图矩阵设置、几何体绘制、光照材质配置以及纹理映射等关键环节&#xff0c;并包含顶点着色…

作者头像 李华
网站建设 2026/9/23 16:02:46

大语言模型Python本地评测框架设计与实现

简介&#xff1a;本资源是一套面向AI算法工程师、大模型研究者及高校科研人员的大语言模型效果评测工具代码&#xff0c;聚焦主观题与客观题双维度性能评估&#xff0c;解决模型输出质量量化难、评测流程不统一等实际问题。压缩包共142个文件&#xff0c;含102个CSV用于记录多轮…

作者头像 李华
网站建设 2026/9/23 15:59:11

DeepSeek跨框架迁移实战:PyTorch到TensorFlow对齐指南

简介&#xff1a;本资源是一份面向深度学习工程师与大模型研发人员的实战型技术指南&#xff0c;系统解决DeepSeek开源模型在PyTorch与TensorFlow双框架间迁移训练的核心难题。全书197页、48章&#xff0c;覆盖环境配置、代码模块拆解、网络结构重构、算子映射对照、动态图转静…

作者头像 李华
网站建设 2026/9/23 15:59:03

PLM不是网盘:构建研发项目状态驱动型执行体系

简介&#xff1a;本资源是一份面向制造业研发管理者、PLM实施顾问及技术型项目经理的实战型管理课件&#xff0c;聚焦如何依托PLM平台构建结构化、协同化、市场驱动的研发项目管理体系&#xff0c;系统应对需求多变、周期缩短、跨学科协作与团队规模化等核心挑战。课件为单文件…

作者头像 李华