直流电机转速电流双闭环调速,可能是运动控制里最经典的一套控制结构,也是Matlab/Simulink仿真里被问得最多、最容易“看着简单、一做就崩”的项目。很多人从网上下个模型改改参数,拖两个PID模块就以为完事了,结果一跑仿真发现启动电流冲上天、转速在给定值附近来回荡、反馈波形乱到怀疑人生。这篇博文我就把整个项目从控制结构、电机建模、参数整定到Simulink调试的完整链路讲一遍,最后再聊聊配套文档应该怎么组织,给正在做课程设计、毕业设计或者刚开始接触电力拖动自动控制的初学者作参考。
1. 为什么转速和电流非要“套两层”——双闭环结构的底层逻辑
1.1 单环调速的硬伤:速度没调好,电流先失控
先回顾一个最简单的逻辑:直流电机的电磁转矩和电枢电流基本成正比,所以想控制转速,本质上就是控制电枢电流产生的转矩与负载转矩的平衡关系。如果只用一个转速环,也就是转速给定和转速反馈做差,经过一个PID直接去控制变换器的输出电压,想法很直接,但实际运行会出两个问题。
第一个问题是启动瞬间的电流冲击。转速误差大,调节器输出就会迅速顶到上限,变换器输出电压直接加在电枢两端。由于电枢电阻很小,电流可能瞬间冲到额定电流的十几倍。这个电流不仅对电机换向器和功率器件是毁灭性打击,还会造成很大的转矩冲击,机械传动部分“咣”一下,这也是很多人做纯单环仿真时看到启动电流像尖刺一样的原因。
第二个问题是电流没有独立的限制手段。运行中如果负载突然变大、堵转或者出现短时过载,电流不受控地增长,只能靠转速环的误差信号间接反馈,响应速度太慢。单环系统里电流更像是“被动的结果”,而不是“被控制的量”,这对需要频繁起制动、负载波动大的场合非常不友好。
1.2 双闭环的分工:转速环管“准”,电流环管“快”
双闭环调速的基本结构,是在原有转速环的基础上,把电流信号抽出来再做一个内环。转速调节器(ASR)的输出不再是直接给变换器,而是作为电流调节器(ACR)的给定值。ACR再去驱动变换器,真正控制输出电压。
这里的分工很清晰:转速环是外环,负责让实际转速跟随给定,保证稳态精度;电流环是内环,负责快速调节电枢电流,把电流限制在安全范围内。启动时转速给定突然加上,转速误差很大,ASR迅速饱和,输出一个最大允许电流给定值。ACR收到这个限幅后的给定值,就把电流控制在最大允许值附近,电机以近似恒定的最大电流加速。转速升高后,误差减小,ASR退出饱和,系统进入线性调节区,最终转速稳定在给定值。
这种“外环定目标、内环管执行”的结构,本质上是把被控对象做了动态解耦。转速环看到的是一个被电流环整形之后的快速电流响应,不用直接处理电枢回路的大惯性;电流环则对外界扰动做出第一道快速反应。两个环各司其职,带宽拉开,系统动态性能比单环好得多。
1.3 这种结构能解决的问题与适用边界
双闭环结构能解决的核心问题有三个:启动和堵转时限制最大电流、负载突变时收缩动态速降、让系统在大范围指令变化下仍然线性可控。但也要说清楚边界:它解决的是“电流和转速的协调控制”,并不解决电机本身参数漂移、弱磁控制、或者高精度位置控制的问题。如果你的场景是恒转矩调速,负载变化不大,且没有剧烈的起制动要求,单环加软启动器确实够用。但只要是正经的直流调速系统设计,双闭环几乎是标准配置。做仿真项目时,选双闭环也更容易展示动态性能、抗扰能力和限流机制,写报告时素材也更丰富。
2. 动手建模仿真前,先把这组参数算清楚
2.1 直流电机本体的两个方程与模型参数
Simulink里拖模块之前,我习惯先把电机的关键参数写在纸上。直流电机他励式模型的电压方程和运动方程是建模的根:
电枢回路方程:U_d0 = E + R_a * I_a + L_a * dI_a/dt
运动方程:T_e - T_L = J * dω/dt
反电动势:E = C_e * n
电磁转矩:T_e = C_m * I_a
其中 C_e 是电动势常数,这里用“V/rpm”作单位;C_m 是转矩常数,单位“N·m/A”,两者满足 C_m = 9.55 * C_e。转速 n 和角速度 ω 的关系是 n = ω * 60/(2π)。
下面这组参数是我常用的参考值,仿真里好算也不失真,后面整定都基于它:
| 参数 | 含义 | 取值 |
|---|---|---|
| U_N | 额定电压 | 220 V |
| I_N | 额定电枢电流 | 10 A |
| n_N | 额定转速 | 1500 rpm |
| R_a | 电枢电阻 | 1 Ω |
| L_a | 电枢电感 | 20 mH |
| J | 转动惯量 | 0.05 kg·m² |
根据这组参数可以推出一堆电磁/机电常数:
电磁时间常数 T_l = L_a / R_a = 0.02 s
电动势常数 C_e = (220 - 10*1) / 1500 = 0.14 V/rpm
转矩常数 C_m = 9.55 * 0.14 = 1.337 N·m/A
机电时间常数 T_m = J * R_a / (9.55² * C_e²) ≈ 0.028 s
这些数算出来以后别丢,后面PI整定全要用。
2.2 变换器、反馈滤波的时间常数怎么取
双闭环仿真里,变换器不能当成理想比例环节,它总有一点滞后。晶闸管三相桥式全控整流电路的平均失控时间一般取 T_s = 0.0017 s,放大系数 K_s = 40。如果你的模型用的是PWM斩波,T_s可以取到PWM开关周期的1/2左右,通常更小,比如1e-4量级。这个时间常数对电流环的带宽影响很大,不是随便填的。
电流反馈和转速反馈也都需要滤波。电流滤波时间常数 T_oi 一般取 0.002 s 左右,主要滤掉整流纹波;转速滤波时间常数 T_on 取 0.005 s 左右,因为测速发电机或编码器信号往往含有齿槽纹波。滤波时间常数在小惯性环节里会和变换器的滞后时间叠加,直接决定电流环能调多快。太小滤不干净,太大限制响应速度,后面调试时经常要回来改。
2.3 反馈系数与限幅值:最常见单位错乱区
Simulink仿真里最容易翻车的就是反馈系数和单位。转速环里,给定信号是电压量,转速反馈电压也要是电压量。比如转速反馈系数取 α = 8 V / 1500 rpm ≈ 0.00533 V·min/r,电流反馈系数取 β = 8 V / 10 A = 0.8 V/A。那么控制器里的比较点,减的就是“α * n”,而不是直接用 n 的数值。
如果你把 Step 给定直接设成 1500,反馈接的也是转速信号 n,那本质上就是无量纲比较,PI参数会完全不一样。这没有绝对的对错,但必须保持一致。我见过很多模型换了一下反馈系数,参数就全崩了,原因就在这里。
电流限幅值也要根据反馈系数折算。比如启动时允许最大电流取 1.5 倍额定电流,即 15 A,那么ASR输出限幅应设为 15 * β = 12 V。ACR输出限幅对应变换器的控制电压范围,一般取 ±10 V。限幅值和PI参数一样重要,因为它才是系统非线性饱和的边界。
3. Simulink里搭双闭环:两种建模路径与完整连线步骤
3.1 传递函数框图法:先把控制环路走通
我强烈建议第一次做的人先用传递函数框图,别一上来就上电力电子器件。传递函数模型计算快、调试直观、PI参数整定容易对得上理论,适合先把原理验证清楚。
建模的大体步骤是:
- 新建模型,拖一个 Step 作为转速给定。如果转速反馈系数是 α,Step 的终值就设成 α * 1500 = 8 V,这样和反馈电压同一量纲。
- 放两个 Sum 比较点。第一个比较转速给定与转速反馈,输出进ASR;第二个比较ASR输出与电流反馈,输出进ACR。
- 放两个 PID Controller 模块。ASR设P=转速环比例、I=转速环积分,输出限幅 ±12 V,开抗积分饱和;ACR设P=电流环比例、I=电流环积分,输出限幅 ±10 V。
- 变换器用 Gain(40) 和传递函数 1/(0.0017s+1) 串联。控制电压经过这一环节变成变流器输出电压 U_d0。
- 电枢回路用传递函数 1/(L_a*s + R_a),也就是 1/(0.02s+1),输入端是 U_d0 减去反电动势 E,输出是电枢电流 I_a。
- 机械环节:I_a 乘以转矩常数 C_m 得到电磁转矩,减去负载转矩 T_L,乘以 1/(J*s),得到角速度 ω(rad/s)。为了给转速反馈和反电动势,再用 Gain(60/(2π)) 把 ω 转成转速 n。
- 反电动势回线:转速 n 乘以 C_e,得到 E,再回到电枢回路前面的 Sum 负端。这一步很多人漏掉,会导致电流环动态响应完全失真。
- 反馈回线:电流 I_a 经过 Gain(β=0.8) 得到电流反馈电压,进第二个 Sum 负端;转速 n 经过 Gain(α=0.00533) 得到转速反馈电压,进第一个 Sum 负端。
- 放几个 Scope 观察:转速给定与反馈、电流给定与反馈、ASR输出、ACR输出、电枢电流和转速波形。
这里多说一句,PID Controller 模块有一个 Anti-windup method 参数,默认是 None,要改成 clamping 或 back-calculation。否则PI在限幅后积分项继续累积,退出饱和时会有一个巨大滞后,启动波形会非常难看。back-calculation 的反馈系数一般取 1~2 就够。
3.2 Simscape电气模型法:贴近真实物理回路
原理验证完后,很多人会想换成更接近物理系统的电气模型,也就是用 Simscape Electrical 里的 DC Machine、电力电子变换器、电流/电压传感器来搭。这种模型的优点是能真实反映整流纹波、换相过程、电流尖峰,缺点是仿真慢,而且控制环和电气环之间的信号转换很容易接错,不适合新手一上来就尝试。
关键操作上,DC Machine 模块的端口 m 是测量端口,用 Bus Selector 从里面提取电枢电流 i_a 和转速 w。注意这里 w 的单位是 rad/s,接到转速反馈前必须乘以 60/(2π) 成 rpm,很多群里问“为什么转速飞上天”的案例,十有八九是这里单位没有转换。
电流测量用 Current Measurement 模块,再通过 PS-Simulink Converter 变成信号域,才能进入控制环。如果用的是 PWM 斩波,ACR输出要映射到 PWM Generator 的占空比输入范围,通常是0~1;如果直接用晶闸管整流,则要配合pulse generator,控制角需根据控制电压转换,这一步比较绕,我建议非必要不上Simscape。
除非你要研究电流纹波、器件导通压降或者换向过程,否则传递函数框图已经能回答绝大多数控制性能问题。Simscape模型更适合做“验证控制算法在真实电气条件下还能不能撑住”的收尾工作。
3.3 求解器与仿真步长设置
传递函数框图属于连续系统,直接用 ode45 就够。但要注意 Max Step Size 别用默认的 auto,最好限制在 1e-4 以内,不然反电动势闭环和比较尖锐的饱和切换会产生虚假振荡。仿真时间我一般设 4 s:0~2 s看启动和稳态,2 s 时给一个负载突变,用来展示双闭环的抗扰性能。
如果用 Simscape 带 PWM 和IGBT,就要考虑离散定步长求解器,步长至少要小于PWM周期一个数量级,比如10kHz开关频率,步长建议 1e-6 s。仿真时间不要贪长,先跑0.5 s看段波形,确认没炸再跑完整过程。
4. PI参数整定:典型I型加典型II型,从公式到仿真微调
4.1 电流环按典型I型系统整定
电流环的设计思路是把它校正成典型I型系统,追求快速跟随和较小的超调。电流环被控对象由变换器惯性环节和电枢回路构成。取PI调节器的零点去对消电枢回路的惯性,也就是把电流环PI的时间常数 τ_i 设成电磁时间常数 T_l = 0.02 s。
电流环小时间常数按 T_Σi = T_s + T_oi = 0.0017 + 0.002 = 0.0037 s 计算。典型I型系统工程整定里常用 K * T_Σi = 0.5,得到电流环比例系数:
K_pi = 0.5 * T_l * R_a / (K_s * T_Σi)
= 0.5 * 0.02 * 1 / (40 * 0.0037) ≈ 0.0676
K_ii = K_pi / T_l = 3.38
也就是说ACR的PID参数可以设 P=0.0676,I=3.38。这是很多教材里典型I型整定的标准思路,但请注意,如果你的模型里反馈系数、变换器增益、滤波时间常数和我不一样,数值必须重新算。
4.2 转速环按典型II型系统整定
电流环整定好之后,闭环带宽很高,可以把它等效成一个小惯性环节,工程上近似为时间常数 T_I = 2 * T_Σi = 0.0074 s。转速环的小时间常数再把转速滤波时间合并进来:
T_Σn = T_I + T_on = 0.0074 + 0.005 = 0.0124 s
转速环一般按典型II型系统设计,强调抗扰动能力。典型做法选“中频宽” h=5,于是转速调节器的积分时间常数:
τ_n = h * T_Σn = 0.062 s
再根据被控对象从电流给定到转速反馈的折算系数算比例。电流内环闭环后,电流给定和实际电流近似相等,折算到转速反馈路径上的增益为:
K_obj = α * 9.55 * C_m / (β * J)
代入 α=0.00533、β=0.8、C_m=1.337、J=0.05,得到 K_obj ≈ 1.703。于是转速环比例系数:
K_pn = (h+1) / (2 * h * T_Σn * K_obj)
≈ 6 / (10 * 0.0124 * 1.703) ≈ 28.4
K_in = K_pn / τ_n ≈ 458
ASR 的PID参数就设 P≈28.4、I≈458、输出限幅 ±12 V。这里I值的量级较大,其实是因为反馈系数 α、β 较小,比例折算后被放大了。如果换一套反馈系数,这个数字会完全不一样,所以不要直接套用,要按你的模型链路重算。
为了方便复算,我把计算脚本整理如下:
% 直流电机双闭环PI初值计算 Ra=1; La=0.02; J=0.05; Ce=0.14; Ks=40; Ts=0.0017; Toi=0.002; Ton=0.005; Cm=9.55*Ce; Tl=La/Ra; tsi=Ts+Toi; % 电流环:典型I型,KT=0.5 tau_i=Tl; Kp_i=0.5*Ra*tau_i/(Ks*tsi); Ki_i=Kp_i/tau_i; % 转速环:典型II型,h=5 alpha=8/1500; beta=8/10; T_I=2*tsi; tsn=T_I+Ton; Kobj=alpha*9.55*Cm/(beta*J); h=5; tau_n=h*tsn; Kp_n=(h+1)/(2*h*tsn*Kobj); Ki_n=Kp_n/tau_n; fprintf('电流环: P=%.4f, I=%.2f\n',Kp_i,Ki_i); fprintf('转速环: P=%.2f, I=%.1f\n',Kp_n,Ki_n);4.3 理论初值进Simulink后的实测调参手法
理论值一定是能跑起来的,但跑得好不好另说。我的习惯是先只调电流环:把转速环断开,给ACR一个固定的阶跃电流给定,比如3 V(对应约3.75 A),看电流反馈能不能快速稳住、有没有超调和振荡。电流环OK了,再接上转速环。
接上转速环后,先给一个较小的转速给定,比如400 rpm(对应给定电压约2.13 V),观察启动过程。此时ASR应该快速饱和,电枢电流打到限幅值,转速线性上升。如果转速到达给定值后超调明显,优先降低 K_pn,不要动K_in,先让比例贡献变小;如果稳态转速一直有缓慢振荡,再把 K_in 减小。反过来,如果转速响应太肉、加速慢且恢复慢,说明比例或积分偏小,但前提是限幅值已经给够。
调参时有个经验:双闭环启动过程主要由限幅值决定,稳态动态主要由转速环决定;电流环一旦整定好,尽量不要为了转速环表现再去反复动它。内环和外环的带宽必须拉开,相差5倍以上才不会有互动振荡。
5. 仿真调试中最容易卡住的五个局面与排查思路
5.1 启动电流冲上天、转速却不动
遇到这个现象,先别急着怀疑PI参数。第一步看ACR输出有没有顶到限幅,如果ACR早就饱和,但变换器输出电压还是给很高,那就是限幅没生效或变换器增益不对。第二步检查电流反馈极性,电流反馈如果误接到加法端而不是减法端,电流环会变成正反馈,一启动就会崩掉;用Simscape模型时尤其常见,因为电流传感器方向接反。第三步再看ASR限幅,如果转速环输出限幅设得比负载需要的电流还小,电机根本加速不起来,但这不会引发电流狂飙,反而电流会很低,注意区分。
5.2 转速超调压不住,总在给定附近飘
这通常是ASR参数过强。典型II型整定出来的K_pn只是理论值,一旦模型里有反电动势、滤波和饱和非线性,理论值会让系统偏“兴奋”。我的做法是把K_pn直接砍到理论值的60%~70%,再观察;如果超调还是大于5%,继续砍。与此同时把抗积分饱和策略打开,ASR退出饱和时的回落速度会显著改善。注意观察ASR输出波形,如果它恢复出饱和前有一段时间还死死贴在限幅值上,那基本就是积分饱和在作怪,不是单纯增益问题。
5.3 积分饱和导致负载突变后恢复奇慢
双闭环中,ASR在启动阶段长时间饱和,如果积分器不做任何处理,退出饱和时积分项还保留很大值,输出迟迟降不下来,转速会产生一个很大的反向跳动。最直观的现象就是:负载突加后转速掉下去,然后花很长时间才爬回来,甚至过冲。
处理手段有几种:一是PID Controller里把Anti-windup method改成clamping,简单有效;二是用back-calculation,让饱和时误差反向积分;三是在模型外面自己搭条件限幅积分器。日常调试优先用模块自带功能,最省事。另外,把ASR积分初值设成0,也能避免启动瞬间积分器顶着限幅值。
5.4 数字纹波和毛刺让人分不清真假
用Simscape和高频PWM时,电流波形上全是开关纹波,这是真实物理现象,不是模型错误。但如果你观察到的是整个波形都在大幅抖动,就可能是步长太大或者反馈滤波参数太小。先看仿真求解器步长,离散系统必须保证步长小于PWM周期的1/10;连续系统要把Max Step Size压到1e-4往下。再看反馈滤波,电流反馈和转速反馈的时间常数不是摆设,它们本来就是为了抑制这些高频分量。另外,Scope显示时用decimation抽样,别让几千个波形点在屏幕上糊成一团,干扰观察。
5.5 双环都调好了,启动阶段却不对
有一种很隐蔽的问题:双环线性段调得很好,但启动阶段转速非线性上升,电流波形却出现断断续续的掉落。这多半是负载转矩在启动时被设成常数,或者初始转矩阶跃太大,导致电机在低转速阶段电磁转矩和负载转矩已经很接近,电流无法稳定在限幅值。排摸方法很简单,把负载转矩改成0跑一遍启动,如果电流恒流段恢复了,那就不是控制问题,而是机械负载模型设置的问题。
6. 配套文档这么组织,答辩汇报才能省力
6.1 文档章节框架与每种图表的用途
仿真配套文档不要写得像操作手册,要写成“设计报告”。我建议的结构是这样:
第一章,设计任务与技术指标。明确额定电压、电流、转速、允许最大电流倍数、空载启动时间、稳态精度等要求。第二章,系统结构与工作原理。重点讲清为什么用转速电流双闭环,画清楚结构图,把内外环的动态分工用文字描述出来。第三章,系统建模与参数计算。这是核心,写出电机方程、变换器模型、反馈系数折算方法,以及本章前面的PI整定全过程。第四章,Simulink仿真模型说明。对模型里每个环节做标注,解释传递函数如何对应物理环节,给出模型中PID参数、限幅值、反馈系数。第五章,仿真结果与分析。贴出启动波形、稳态波形、负载突变波形,并逐一和理论预期对照。第六章,结论。
配套的图,至少要覆盖四组:启动阶段转速和电流的波形、稳态运行波形、负载突变时转速与电流的动态响应、ASR/ACR输出饱和与退出过程。每组图都要标好横纵轴、单位、曲线区别,答辩的时候图讲不清会非常吃亏。
6.2 结果分析部分怎么写才不空
很多文档只会写“仿真表明系统响应快、超调小”,这是最空的一句话。正确做法是拿具体数字说话:比如“启动时电流环在t=0.03s达到限幅值,转速在t=0.8s进入稳态,超调量约为3.2%,小于设计要求5%”。再比如“在t=2s突加3N·m负载后,转速动态速降约35rpm,恢复时间约0.4s,与典型II型系统抗扰性分析一致”。
另外,要把理论和仿真计算结果放在同一张表里对比。例如计算出的最大启动电流是15A,仿真波形上到14.8A,这就是一个漂亮的对照;计算出的转速超调约5%,仿真是3.2%,可以说明限制因素和模型简化带来的差异。这样写出来的分析才经得起追问。
6.3 给答辩/汇报的几条实用建议
答辩或汇报时,不建议把整个模型讲解一遍,而是围绕几个决定性问题去讲:为什么电流环在内部、为什么启动阶段是恒流升速、为什么ASR会饱和、饱和退出时的积分饱和怎么处理。这些点能讲清楚,评委一般就不会揪着细节不放。
模型文件本身也要干净。每个环节加标注框,PID参数写进注释,Scope命名规范。很多人做项目时模型最后乱成一团,等答辩前自己都找不到对应模块。命名习惯从第一天建模就养成,后面省下的时间远超过刚拖模块时多花的那几秒。
最后分享一个我自己的习惯:模型一定要分版本保存。V1是纯传递函数框图,V2加反馈滤波,V3换Simscape电气模型。每次改版只动一样东西,出了问题能立刻对比回退。双闭环项目看似简单,真正跑起来后变量非常多,参数、限幅、单位、滤波器、求解器任何一处出错都可能让波形彻底变形。一个能稳定复现、记录完整的建模过程,比一个碰巧跑出来的漂亮波形值钱得多。