做直流电机双闭环调速仿真,最常见的翻车方式不是模型搭不出来,而是参数全靠猜。我见过不少人在Simulink里把电流环和转速环的PI参数随手填成1和0.1,波形一振荡就说系统不稳定,实际上连电流反馈系数是多少都没算过。合理的流程应该是先把电机本体参数、整流装置放大系数、反馈系数、时间常数全部算清楚,再按典型Ⅰ型系统整定电流环、典型Ⅱ型系统整定转速环,最后才轮到仿真模型去验证。这套流程走下来,仿真模型的角色就从“调参游戏”变成了“设计验证工具”。这篇文章就沿着这条链路完整过一遍:双闭环的结构分工、参数计算、Simulink建模取舍、PI整定公式推导,最后分享几个我实际调试时踩过的坑。
1. 双闭环结构到底在闭环什么:电流环与转速环的分工逻辑
1.1 为什么内环必须是电流环
直流调速最原始的方案是单闭环转速负反馈:测速发电机把转速变成电压,和给定值比较后直接去控制整流器。这个结构能稳压速,但有一个致命问题——启动时转速偏差很大,调节器输出瞬间打到限幅,整流电压直接拉满,电枢回路只有电阻限流,启动电流可能冲到额定值的十几倍,晶体管模块一次就烧了。
要限制电流,最直接的办法是把电流也拉进控制系统。但电流不能和转速一样只加一个外环,因为电流的响应速度远快于转速:电枢回路的电磁时间常数是毫秒级,而机械时间常数是百毫秒级。如果在同一个环里同时控制两个速度差异极大的量,慢的转速还没起来,快的电流已经振荡好几轮了。
所以标准做法是嵌套控制:内环是电流环,直接控制电枢电流;外环是转速环,它的输出不是直接控制整流器,而是作为电流环的给定值。这样一来,启动阶段转速环输出饱和,形成一个固定的最大电流给定,电流环就把电枢电流死死压在允许的过载范围内,电机以恒定最大加速度升速,既不烧器件,又能最快到达目标转速。
这个内环还有一层隐藏价值:它能快速抑制电枢反电动势的扰动。电机转速变化时反电动势会跟着变,如果没有电流环,反电动势扰动要等到转速反馈检测到变化才会被校正;有了电流环,扰动刚进入电流回路的输入端就被PI调节器压下去了,动态性能完全不一样。
1.2 系统的整体信号流与传递函数骨架
整个系统的信号链路是这样的:转速给定先送入转速调节器ASR,ASR的输出限幅后就作为电流给定,进入电流调节器ACR;ACR的输出经过限幅和电压/角度变换,控制三相全控整流桥的输出电压;整流电压加到电枢回路上产生电枢电流,电流互感器加滤波处理后形成电流反馈,回到ACR输入端;电枢电流产生电磁转矩,驱动电机升速,测速发电机测出转速反馈,回到ASR输入端。
搭模型之前要把每个环节的传递函数列清楚:
- 三相全控整流桥可以近似为一个一阶惯性环节,放大系数K_s,失控时间T_s约0.0017秒;
- 电枢回路是电阻R和电感L串联,传函是1/R除以电磁时间常数T_l相乘的一阶惯性;
- 电流反馈通道有一个小滤波环节,滤波时间T_oi用于滤掉整流纹波;
- 转速反馈通道也有滤波,T_on一般取0.005到0.01秒;
- 从电流到转速本质上是一个积分环节,由飞轮力矩和转矩系数决定。
为什么一定要先把传函骨架列出来?因为PI参数不是拍脑袋来的,而是根据这个骨架反推的。不知道整流桥有滞后、不知道反馈滤波会引入额外惯性,后面算出来的PI参数在仿真里多半是发散的。
2. 开工之前先把数字算明白:从电机参数到反馈系数的完整推导
2.1 一组用于演示的模型参数
我以自己常用来做仿真验证的一套他励直流电动机参数为例,这个参数设计成中等容量电机,调节器的计算数值比较有代表性。你在实际项目里拿到什么电机就替换成什么数字,计算路径一致。
| 参数 | 数值 | 说明 |
|---|---|---|
| 额定电压 U_N | 220 V | 电枢额定电压 |
| 额定电流 I_N | 136 A | 电枢额定电流 |
| 额定转速 n_N | 1460 r/min | 额定转速 |
| 允许过载倍数 λ | 1.5 | 用于确定最大电流 |
| 电枢回路总电阻 R | 0.5 Ω | 含电枢电阻与整流器等效内阻 |
| 电枢回路电感 L | 15 mH | 含平波电抗器电感 |
| 飞轮力矩 GD² | 22 N·m² | 电机与负载折算值 |
整流侧用三相全控桥,触发装置放大系数K_s取40,平均失控时间T_s取0.0017秒,电流反馈滤波T_oi取0.002秒,转速反馈滤波T_on取0.01秒。这些值都是这个容量级别系统的常见量级,后面整定都会用到。
2.2 反馈系数标定:α和β的取值逻辑
电流反馈系数β是把实际电流折算成电压的桥梁。电流调节器的给定电压最大值U_im对应系统允许的最大电流I_dm,所以β = U_im / I_dm。按允许过载1.5倍算,I_dm = 1.5 × 136 = 204 A。如果电流调节器输入端的设计饱和电压是8 V,那么β = 8 / 204 ≈ 0.0392 V/A。
转速反馈系数α同理,α = U_nm / n_max,取转速反馈最大电压10 V对应最大转速1500 r/min,α = 10 / 1500 ≈ 0.00667 V·min/r。
这里的要点是:反馈系数必须和限幅值配套设置。很多人把ASR的输出限幅随手填成10 V,结果10 V对应的电流给定按β一换算就是255 A,已经超过最大允许电流204 A,启动电流自然超限。正确的做法是先定β,再用β乘以I_dm算出来限幅电压,这个顺序不能颠倒。
2.3 两个关键时间常数:T_l与T_m的计算及其物理意义
电磁时间常数T_l反映电枢回路电流建立的快慢,公式是T_l = L / R = 0.015 / 0.5 = 0.03秒。这个数值决定了电流环PI调节器的零点位置:整定时用PI的零点去对消电枢回路这个大惯性极点,剩下的对象就变成容易处理的小惯性系统。
机电时间常数T_m反映转速建立的快慢,先要算电动势系数C_e和转矩系数C_m。C_e = (U_N - I_N × R) / n_N = (220 - 136 × 0.5) / 1460 = 0.1041 V·min/r。C_m和C_e满足C_m = 9.55 × C_e ≈ 0.994 N·m/A。然后T_m = GD² × R / (375 × C_e × C_m) = 22 × 0.5 / (375 × 0.1041 × 0.994) ≈ 0.284秒。
T_l和T_m差了一个数量级,这正是为什么电流环做内环、转速环做外环的根本原因。转速环设计时会把电流环等效成一个小惯性环节,而T_m作为积分环节的增益参数参与计算,数值错一个量级,PI参数就差出一大截。
3. 把算好的数字塞进Simulink:模型搭建的取舍与结构设计
3.1 整流器与触发器:用六脉冲还是平均值模型
Simulink里搭三相全控整流有两种路线。一种是详细模型:用Simscape的Universal Bridge搭三相全控桥,再用同步六脉冲触发器产生门极脉冲。这种模型能真实反映换相过程、电流纹波和触发角变化,仿真波形细节丰富,但代价是仿真速度非常慢,尤其在固定步长下,整个系统要同时处理微秒级的开关动作和秒级的机电过程,步长选得不合适很容易卡死。
另一种是平均值模型:把整流桥等效成一个受控电压源,输出电压等于K_s乘以控制电压,再叠加触发角限幅约束。平均值模型没有换相细节,但电流环、转速环的调节器动态完全不受影响,仿真速度快一个数量级。
我的建议是分阶段使用:调PI参数的阶段用平均值模型,因为你要快速反复迭代,波形细节不是重点;等参数整定完毕、要出汇报波形和验证谐波特性时,再换成详细整流桥。很多初学者一上来就搭六脉冲触发,一个周都耗在触发器同步问题上,PI参数还没碰过,这是典型的抓错重点。
3.2 电机本体:用DC Machine模块还是自建电枢回路
Simulink里有现成的DC Machine模块,输入电枢电压和负载转矩,输出转速、电枢电流等信号。它的优点是方便,缺点是中间物理量的折算关系不太透明,尤其是你想在电枢回路里加平波电抗器、观察反电动势波形的时候,会被模块封装挡住。
我更推荐自建电枢回路:用一个可控电压源作为整流器输出,串联R和L,再串联一个受转速控制的反电动势源。反电动势E = C_e × n,这既直观又能随时看到内部波形。机械部分用一个积分环节搭,输入电磁转矩减负载转矩,乘以375/GD²就是转速变化率,积分得到转速。这样搭出来的模型,每一个模块都对应前面计算的一个参数,出了问题能直接定位。
3.3 调节器的实现方式:积分限幅比输出限幅可靠
Simulink自带的PID Controller模块虽然方便,但默认的抗饱和能力有限。双闭环系统里调节器饱和是常态——启动阶段ASR长时间饱和,如果积分项还在继续累积,等到转速逼近给定值时ASR输出退不下来,就会出现严重的退饱和超调。
自己搭PI调节器其实很简单:比例项一路,积分项用带限幅的积分器一路,两路相加后再做一次输出限幅。积分限幅的上下限要和输出限幅保持一致,这样积分器饱和时就自动停止累积,退饱和响应快得多。后面讲坑的时候,这个细节会单独展开。
4. 电流环先吃饭:典型Ⅰ型系统的PI整定路径与波形验收
4.1 电流环等效被控对象与PI零点对消设计
整定电流环时,把转速环断开,让ASR的输出固定为一个常数。这样电流环的输入就是一个阶跃电流给定,输出是电枢电流。电流环的等效被控对象包含:整流桥一阶惯性、电枢回路一阶惯性、电流反馈滤波小惯性。
电流调节器用PI形式,传函写成K_pi × (τ_i × s + 1) / (τ_i × s)。整定的核心技巧是让PI的零点对消电枢回路的大惯性极点:取τ_i = T_l = 0.03秒。对消之后,电枢回路的大惯性从开环传函里消失,剩下一个小惯性环节,整个电流环就变成了典型Ⅰ型系统。
开环传函最终写成K_I / [s × (T_Σi × s + 1)],其中T_Σi = T_s + T_oi = 0.0017 + 0.002 = 0.0037秒。典型Ⅰ型系统按阻尼比0.707设计时,K_I × T_Σi = 0.5,因此K_I = 0.5 / 0.0037 ≈ 135.1。
再根据K_I的展开式反推PI比例系数:K_I = K_pi × β × K_s / (R × τ_i),所以K_pi = K_I × R × τ_i / (β × K_s) = 135.1 × 0.5 × 0.03 / (0.0392 × 40) ≈ 1.29。
换算成Simulink PID模块的参数:比例系数Kp = 1.29,积分系数Ki = Kp / τ_i = 1.29 / 0.03 ≈ 43.1。注意这里Ki是每秒积分倍数,不是积分时间常数,两者差一个倒数关系,填反了波形会完全失控。
4.2 电流环阶跃响应与波形验收标准
整定完参数不要急着接转速环,先把电流环单独加一个阶跃给定,比如给定电压从0跳到4 V,对应电流约102 A,看电流反馈的实际跟随情况。合格的电流波形有四个特征:
- 上升过程单调或只有极小的超调,超调量不超过5%;
- 调节时间在0.01秒量级,不能拖到机电时间常数级别;
- 稳态时电流无静差,反馈电压和给定电压完全重合;
- 调节器输出在动态过程中明显变化,但没有持续振荡。
如果波形响应太慢,先看是不是τ_i没有严格对消T_l,或者反馈滤波时间比预设值大;如果超调明显,多半是K_pi偏大,适当降一点;如果出现等幅振荡,优先怀疑积分限幅没做好或者采样步长太大。
一个实用的调参技巧:电流环调通之后,给一个从102 A突变到153 A的给定阶跃,模拟运行中负载变化。此时电流应该在几个毫秒内跟上新给定,同时不产生大超调。如果这一步过不了,别指望转速环能稳定。
5. 转速环站在电流环肩膀上:典型Ⅱ型系统的PI整定与启动波形解读
5.1 把电流环闭环等效成小惯性环节
转速环设计的起点是把已经调好的电流环当成一个整体模块。电流环闭环后,从电流给定U_i*到实际电流I_d的传函近似为:1/β × 1 / (2T_Σi × s + 1)。
为什么能这样近似?因为电流环整定成了典型Ⅰ型系统,闭环传函本身近似一阶惯性,时间常数是2T_Σi,直流增益是1/β。这个近似的物理含义是:既然电流环响应足够快,转速环眼中看到的电流环就是一个带增益的一阶低通,不再关心它内部细节。
从电流到转速的传递函数由机械方程决定:T_e - T_L = (GD² / 375) × dn/dt。忽略负载扰动后,从电枢电流到转速的传函是R / (C_e × T_m × s),一个纯积分环节加上一个由T_m决定的增益。这一步就是转速环被控对象为什么必须用Ⅱ型系统的原因:对象里有一个积分环节,PI调节器再提供一个积分环节,整个系统有两个积分器,必须按Ⅱ型系统整定才能兼顾稳定性和抗扰动。
5.2 中频宽h的选取与转速环PI参数计算
把电流环等效小惯性、转速反馈滤波这三个小时间常数合并:T_Σn = 2T_Σi + T_on = 2 × 0.0037 + 0.01 = 0.0174秒。
转速环PI传函写成K_n × (τ_n × s + 1) / (τ_n × s)。典型Ⅱ型系统的整定标准是选择中频宽h,工程上最常用h = 5,对应的公式是τ_n = h × T_Σn = 5 × 0.0174 = 0.087秒。
开环增益K_N按最小峰值的准则计算:K_N = (h + 1) / (2 × h² × T_Σn²) = 6 / (2 × 25 × 0.0174²) ≈ 396.4。
K_N展开后和转速环PI参数的关系是:K_N = K_n × α × R / (β × C_e × T_m × τ_n)。把前面算好的参数代进去:
- α = 0.00667 V·min/r
- β = 0.0392 V/A
- R = 0.5 Ω
- C_e = 0.1041 V·min/r
- T_m = 0.284 s
- τ_n = 0.087 s
解得K_n ≈ 12。换算成PID模块参数:Kp = 12,Ki = Kp / τ_n = 12 / 0.087 ≈ 137.9。
h的取值影响到动态和稳态的权衡:h越大,超调越小,但恢复时间变长;h越小,快速性越好,但超调增大。一般不要小于3,否则系统接近发散边界。对调速系统来说,转速超调允许值通常在10%以内,h取5在大多数场合都是安全的起点。
5.3 启动过程四个阶段的波形特征
把转速环接回去,给一个额定转速阶跃,空载启动。完整的启动波形可以清晰看到四个阶段:
第一个阶段,转速偏差很大,ASR输出迅速达到上限,相当于给电流环一个阶跃给定,电流从0快速上升到最大允许值204 A。这个阶段的特点是电流上升、转速基本没动。
第二个阶段,电流环把电流稳在最大允许值附近,ASR继续饱和,电机以恒加速转矩升速,转速沿一条直线上升。这个阶段能看到电流输出带着小幅纹波但均值保持恒定,这就是“恒流升速”阶段。
第三个阶段,转速到达给定值附近,ASR开始退饱和,电流给定下降,电流环转入线性调节状态,电流从最大值降下来,转速出现轻微超调后回落。退饱和超调是双闭环系统固有的现象,只要超调量在允许范围内就是正常的。
第四个阶段进入稳态,电流等于空载电流,转速稳定在给定值。如果负载突变,电流环会先动作抑制电流波动,随后转速环慢慢把转速拉回给定值。
看启动波形时最有效的判断标准是:第二阶段电流是否平整地压在设定的最大电流附近。如果电流明显超出,说明ASR限幅和β的配套有问题;如果电流在该阶段持续下降,说明ASR没有饱和,启动过程没有进入恒流升速状态,PI参数的增益偏低。
6. 我实际调模型时踩过的四个坑与排查过程
6.1 坑一:按公式算出的转速环参数放进去就振荡
按刚才的公式算完,我在平均值模型上先测电流环,波形很干净;接上转速环一启动,转速直接发散。第一反应是参数算错了,重新对了三遍公式,数字没问题。后来怀疑是不是反馈滤波在模型里填的数值和计算时不一致——回头一查,电流反馈滤波时间在模型里填的是5毫秒,而参数计算用的T_oi是2毫秒,这个差异虽然只有3毫秒,但T_Σn本来就是0.0174秒量级,滤波时间翻倍多直接改变了系统阻尼状态。
把模型里的反馈滤波时间改回0.002秒后,启动波形立刻正常。这个经历说明:PI计算值不是凭空生效的,它依赖你对系统所有时间常数的准确掌握。模型里的滤波时间、采样延迟、甚至示波器显示模块里的处理延迟,都要和计算时输入的数值一一对应,任何一个被忽略就会导致整定结果错位。
排查这类发散问题有个固定顺序:先把ASR输出固定,单独验证电流环;电流环稳定后,给ASR加一个斜坡输入看转速跟随;最后才恢复双闭环阶跃。每一步都验证通过再进入下一步,能快速锁定是哪一环的参数和模型不一致。
6.2 坑二:启动电流超过设定最大值
第一次观察到启动电流冲到了240 A左右,超过I_dm = 204 A。刚开始以为是电流环响应太快导致的动态超调,但波形显示电流并没有震荡回落,而是稳定在一个更高的水平。
量了一下ASR的输出,发现它在启动阶段被限幅在10 V。问题就出在这:电流给定电压的限幅上限应该是β × I_dm = 0.0392 × 204 ≈ 8 V,而我填的是10 V。V/A换算下来,给定上限对应255 A,电流环自然把电流“准确”执行到了255 A,没超也不可能超,是给定就错了。
修正方法很简单:把ASR输出限幅改成±8 V,同时把积分限幅也改成±8 V。这个坑提醒我,限幅值不是随手填的,必须先确定反馈系数,再反推限幅电压,而且输出限幅和积分限幅要统一,否则动态过程中会出现两个限幅值不一致导致的非线性振荡。
6.3 坑三:触发角在启动瞬间乱跳,模型直接发散
平均值模型阶段没遇到这个问题,换成详细六脉冲整流桥之后,启动瞬间控制电压一大,触发角直接跳到最大值,电流断续,系统彻底乱了。原因是我在给平均值模型换详细整流桥的时候,只保留了控制电压到输出电压的线性关系,漏掉了触发角本身的限制。
整流桥实际工作时,触发角不能无限小,否则电压上升太快;也不能到90度以上往逆变区跑,调速系统需要限制在允许的整流工作区。我是在控制电压通道上加了一个饱和限幅,把控制电压对应的触发角限制在30度到150度之间,同时把六脉冲触发器的同步信号接在正确的线电压过零点上,启动瞬间的乱跳才消失。
换详细模型时最容易漏的就是各种物理约束。平均值模型没有这些约束照样能算,但详细模型少一个限幅就少一个稳定机制,波形直接从“看着对”变成“完全不对”。
6.4 坑四:仿真速度慢到怀疑人生
第一次用详细整流桥跑完整启动过程,固定步长设成1e-6秒,跑了半小时还没出结果。卡点在于触发脉冲需要高频采样,而机械环节的时间常数又很大,整个系统是典型的多时间尺度微分方程,刚性很强。
解决办法有两个方向。一个是把求解器换成变步长的ode23tb或ode15s,专门处理刚性系统,仿真速度能提升一个数量级;另一个是把整流桥换回平均值模型做控制参数验证,只在最后汇报阶段用详细模型跑一次完整波形。实际工程里调到稳态阶段用平均值模型,出关键波形时换详细模型跑,这个组合基本能兼顾速度和可信度。
另外,反馈滤波时间常数本身会滤掉高频分量,把仿真步长设置为和最小时间常数匹配即可,不必无限缩小。平均值模型配1e-4秒步长,详细整流桥配1e-5秒步长,是我实测比较顺手的配置。
双闭环调速这套东西,模型本身并不复杂,难的是每个数字都能追到物理来源。我在实际调试中最大的体会是:波形不对先别动PI参数,回头检查反馈系数、滤波时间常数、限幅位置三个地方,大部分问题都出在这里。把这套参数计算和整定链路走顺了,换任何一台电机参数都能直接套用,这才是这个仿真项目真正值钱的部分。