做电机控制有些年头了,回头再看直流电动机的建模,我最大的感受是:教材里讲得清清楚楚的“他励、串励、并励”三种励磁方式,真要自己在Simulink里搭模型、跑仿真时,很多人会卡在同一个地方——不知道模型结构差异到底在哪。明明都是直流电机,电压方程、转矩方程看着差不多,为什么串励电机的模型就是跑不稳?为什么并励和他励在仿真结果上几乎分不出来?
这篇把三种励磁方式的直流电动机建模仿真完整做一遍,从物理方程到Simulink模型到典型工况仿真结果,一步步拆开讲清楚。如果你正在做电机调速、电力拖动系统设计,或者刚接触电机仿真还没来得及踩坑,这篇可以让你少走不少弯路。
1. 三种励磁方式的本质差异与建模思路
1.1 先看电气结构:励磁绕组和电枢绕组的接线关系
直流电动机的励磁方式,本质差别就是励磁绕组怎么获得电流。他励电动机的励磁绕组和电枢绕组各用一套独立电源,互不影响;并励电动机的励磁绕组和电枢绕组并联在同一个电源上;串励电动机的励磁绕组和电枢绕组串联,流过同一个电流。
这个结构差别直接决定了磁通的变化规律。磁通是直流电机建模的核心变量,因为反电动势、电磁转矩都跟磁通乘在一起。磁通怎么变,模型就是什么结构。我以前带新人时经常说一句话:先别急着开Simulink,把“磁通是恒定还是跟随电枢电流变化”这个问题想清楚,模型基本就出来一半了。
| 励磁方式 | 励磁绕组与电枢绕组关系 | 磁通大小特点 | 典型应用场景 |
|---|---|---|---|
| 他励 | 各自独立电源 | 基本恒定(可独立调磁) | 机床主轴、轧机等需要宽范围调速场合 |
| 并励 | 并联同一电源 | 近似恒定(受电源电压影响) | 恒速负载、中小型拖动系统 |
| 串励 | 串联同一电源 | 随电枢电流强烈变化 | 起重机、电力机车等大启动转矩场合 |
1.2 磁通与电枢电流的关系决定模型结构
对于他励和并励电动机,在忽略电枢反应的前提下,磁通基本不随电枢电流变化。这样反电动势E就和转速ω成正比,电磁转矩T和电枢电流i_a成正比,模型是一个线性一阶系统,搭起来非常顺手。
但串励电动机不一样。励磁绕组和电枢串联,磁通直接由电枢电流决定。在小电流段,可以近似认为磁通与电流成正比;电流大了以后磁路饱和,磁通增长变缓。这意味着串励电机的反电动势里同时含有电流和转速两个变量,电磁转矩里含有电流的平方项,模型天然就是非线性的。
这一条是整篇建模的核心分水岭。他励和并励共用一套线性模型,串励必须单独处理。当初第一次搭串励模型时我忽视了磁化曲线的饱和段,结果轻载仿真时转速直接飞到天上去了,后面会专门讲这个问题。
1.3 从机械特性看三种电机的“性格”
机械特性是转速n和电磁转矩T的关系曲线。他励电动机的机械特性是一条略微向下倾斜的直线,负载转矩变化时转速变化很小,工程上叫“硬特性”。并励电动机的特性和他励很像,差别只在电源电压波动时磁通会跟着变。
串励电动机则完全不同。因为磁通随电枢电流增大而增大,负载加重时转速下降很快,呈现“软特性”。但正是这种软特性让串励电机在低速时能输出非常大的转矩,特别适合重载启动的场合。
建模之前把这三条特性曲线在脑子里过一遍,后面仿真结果对不对就有了参照。特性曲线和理论对不上,排查方向就清楚了。
2. 数学模型推导与参数准备
2.1 四条基本方程,所有直流电机都一样
直流电机建模逃不过这四条方程:
- 电枢回路电压平衡方程:u = e + i_a R_a + L_a di_a/dt
- 反电动势方程:e = k_e Φ ω
- 电磁转矩方程:T_e = k_t Φ i_a
- 运动方程:T_e - T_L = J dω/dt
其中R_a是电枢电阻,L_a是电枢电感,J是转动惯量,T_L是负载转矩,k_e和k_t是电机结构常数。在SI单位制下,k_e和k_t数值相同,这也是后面参数计算的依据之一。
这四条方程是建模的骨架。无论哪种励磁方式,电压平衡方程管电枢电流怎么建立,反电动势方程管电和机械量怎么耦合,运动方程管转速怎么变化。不同的只是Φ和i_a的关系。
2.2 他励和并励的线性状态方程
他励电动机在励磁电压恒定时,Φ是常数。把上面的方程整理成状态方程的形式:
di_a/dt = (u - R_a i_a - k_e Φ ω) / L_a dω/dt = (k_t Φ i_a - T_L) / J
注意这里k_eΦ和k_tΦ可以直接合并成两个常数,建模时用Gain模块就能搞定。并励电动机在电源电压稳定的前提下,励磁电压基本不变,Φ也近似恒定,所以模型结构和他励完全一样。区别只在励磁回路和电枢回路共用电源,如果模拟电源电压波动,并励的磁通会随之波动,这就超出恒磁通假设的范围了。做基础建模仿真时,两者的模型文件其实可以共用。
2.3 串励电动机的非线性方程
串励电动机的励磁电流就是电枢电流。在磁化曲线的线性段,可以写Φ = k_f i_a。代入基本方程:
e = k_e k_f i_a ω = K i_a ω T_e = k_t k_f i_a² = K i_a²
K = k_e k_f = k_t k_f 是串励电动机的等效常数。于是状态方程变成:
di_a/dt = (u - R_a i_a - K i_a ω) / L_a dω/dt = (K i_a² - T_L) / J
注意反电动势项里出现了i_a和ω相乘,转矩项里出现了i_a的平方,这就必须用乘法器来搭建。如果考虑磁路饱和,则Φ是i_a的非线性函数,一般用实测磁化曲线查表或用一个饱和函数来逼近。基础仿真先用线性段即可,但要在心里清楚这个假设的适用范围。
2.4 参数怎么来:一台200V电机的例子
仿真的可信度全靠参数。这里用一个具体的例子说明怎么确定参数。假设有一台他励直流电动机,额定电压200V,额定电流10A,额定转速1500rpm,电枢电阻0.5Ω,电枢电感10mH,转动惯量0.05 kg·m²。
先算额定工况下的反电动势:
e = u - i_a R_a = 200 - 10 × 0.5 = 195V
额定转速换成弧度每秒:
ω = 1500 × 2π / 60 = 157.08 rad/s
于是机电常数k_eΦ = e / ω = 195 / 157.08 ≈ 1.241 V·s/rad。由于SI制下k_tΦ = k_eΦ,所以转矩常数也是1.241 N·m/A。
把这个参数代回转矩公式验证一下:额定电磁转矩T_e = 1.241 × 10 = 12.41 N·m。额定电磁功率P = e × i_a = 195 × 10 = 1950W,T = P / ω = 1950 / 157.08 ≈ 12.41 N·m,完全吻合。参数没算错。
串励电动机的等效常数K,可以用额定点来标定。假设这台串励电机在额定电流10A时能达到和他励一样的额定磁通,那么K = k_eΦ(额定) / i_a(额定) = 1.241 / 10 = 0.1241。注意这个数值在仿真里直接用在乘法器上,单位比较隐蔽,但SI制下结果是自洽的。
3. Simulink建模仿真的完整步骤
3.1 搭建前的模块规划
在Simulink里搭电机模型,我不太建议一上来就找Simscape里现成的电机模块,虽然那个拖出来就能用,但内部参数不透明,改起来也别扭,更关键的是不利于理解物理过程。还是用基础模块从方程出发一层层搭,这才是能真正学到东西的做法。
需要准备的模块很简单:Sum做加减法,Gain做比例运算,Integrator做积分,Product做乘法,Scope看波形,Step做电压或负载阶跃,Mux把多路信号组合到一起,再配一个Clock和To Workspace方便把数据导出来画图。
基本思路是把4.1节的状态方程原封不动翻译成模块图。电流是电压差积分出来的,转速是转矩差积分出来的,积分器的输出就是状态变量。把状态变量反馈到输入端形成闭环,一个电机模型就活了。
3.2 他励电动机模型:从电压方程到转速输出
他励模型最直接。打开一个新的Simulink模型,按下面这几步操作:
第一步搭电枢回路。用一个Step模块作为电枢电压源u,单位阶跃在t=0时刻从0跳到200。u送到一个Sum模块,同时进入这个Sum的还有反电动势反馈量(加负号)和电枢电阻压降i_a R_a(加负号)。Sum的输出就是电感两端的电压,乘以1/L_a再经过Integrator,就得到电枢电流i_a。
第二步搭机械部分。电流i_a乘以转矩常数k_tΦ得到电磁转矩T_e,T_e和负载转矩T_L在另一个Sum里做差,差值乘以1/J再积分,得到转速ω。
第三步搭反电动势反馈。转速ω乘以反电动势常数k_eΦ得到e,送回第一步的Sum。到这里模型就闭环了。
有一点要特别提醒:转速的单位全部用rad/s,图上看到的转速要看得习惯还是转换成rpm,需要在输出后加一个Gain模块,系数是60/(2π)。这个转换要单独做,否则中间计算时会把单位搞混。
参数设置直接写在Gain模块里:1/L_a是100,k_eΦ是1.241,1/J是20,k_tΦ是1.241。如果仿真的目的是看他励电机的启动过程,负载转矩T_L可以设成常量0,在启动完成后再加阶跃负载。整个模型总共也就十来个模块,非常清爽。
3.3 并励电动机模型:一套模型改一改就能用
并励电动机把它励模型的电枢电压源和励磁电压源合并成一个电压源即可。之前那套他励模型里,反电动势常数k_eΦ是写死的,对并励来说,如果电源电压稳定,这个思路没问题;如果要做电源电压波动的工况,就要把k_eΦ体现为励磁电压的函数。
实操上可以先复制一份他励模型,然后给磁通常数增加一个关系式。简化处理时,假设磁通和励磁电压成正比,励磁电压又是电枢电压本身,那么k_eΦ就不是常数,而是u的函数。这样模型里会多一个乘法和一个Gain,其他部分不变。搭建时建议把励磁部分用注释框标出来,方便和纯他励模型对比。
对于第一阶段的仿真,我一般建议先跑恒定电压工况,确认并励和他励结果一致,再做电压波动对比。这样既验证了模型,又能直观看出电压波动对并励电机的影响。
3.4 串励电动机模型:两个乘法器搞定关键差别
串励模型建立在2.3节的非线性方程上。电枢回路的Sum逻辑和他励一样,但反电动势反馈不再是单纯的ω乘以常数,而是K × i_a × ω,也就是电流和转速的乘积。电磁转矩变成K × i_a × i_a。
在Simulink里的实现很直接:从i_a信号处引一根线出来,和转速信号一起进第一个Product,乘积再乘以K(Gain模块),就得到了反电动势反馈量。第二个Product让i_a和自己相乘,再乘以同样的K,就得到了电磁转矩。其他地方完全照搬他励模型的搭法。
串励模型我建议这样做:把K这个常数单独用一个Gain模块,方便后面改成查表或饱和函数。搭好之后,先把负载转矩设成额定值(12.41 N·m)启动,确认能稳定在额定转速附近,再逐步减小负载观察特性变化。直接空载启动十有八九会出幺蛾子,原因后面在常见问题里细说。
3.5 仿真参数设置与求解器选择
模型搭完,仿真参数的设置也很重要。选用变步长的ode45求解器就够用了,相对误差保持默认的1e-3即可,最大步长建议限制在1e-4秒量级,否则启动瞬间电流快速变化时曲线容易失真。
启动过程的观测时长可以设3秒,足够看到电流冲击和转速上升到稳态的全过程。如果你只关心稳态特性,可以把仿真时间拉长到5到10秒,确保转速完全稳定后再读数据。凡是发现波形异常抖动或者出现N多警告,先不要怀疑模型公式,优先检查求解器步长和代数环问题。
4. 仿真结果对比与工程启示
4.1 启动特性:冲击电流谁也躲不掉
用上面搭好的三套模型,在t=0时刻直接加额定电压启动,三个模型的电枢电流曲线都会有一个很大的冲击峰。
他励和并励的启动电流峰值理论上是u/R_a = 200/0.5 = 400A,是额定电流的40倍。实际仿真里因为电感的存在,电流不会瞬间跳到峰值,而是按时间常数L_a/R_a = 0.02s的指数规律上升,但峰值仍然远高于额定值。这就是为什么实际直流电机不能直接全压启动,一定要串联启动电阻或采用降压启动。
串励电机的启动电流冲击更值得注意。由于转矩正比于电流平方,启动瞬间电流很大时,转矩会特别大,这是串励电机适合重载启动的根本原因。但同时也说明串励电机对启动电流的限制要求更严格,一旦限流措施没做好,机械冲击会非常剧烈。仿真中观察串励电机的启动电流,会把这种非线性放大效应看得非常清楚。
4.2 负载突变:转速降多少才是关键
启动到稳态后,在t=2秒时突加一个额定负载转矩,观察三种电机的转速动态响应。
他励和并励的转速下降量很小。他励电机的转速降为Δn = R_a T/(k_eΦ × k_tΦ),代入数据Δn = 0.5 × 12.41/(1.241 × 1.241) = 4.03 rad/s,约38.5rpm,相对于1500rpm来说不到3%。这个特性正是恒速驱动场合需要的。
串励电机突加负载后转速下降非常明显。以线性磁化模型为例,转速降公式是R_a/K,代入数据0.5/0.1241 ≈ 4.03 rad/s?等一下,这里要仔细推导,串励的转速表达式是n = u/(K i_a) - R_a/K,在额定负载时i_a=10A,第一项200/(0.1241×10)=161.2 rad/s,减去R_a/K=4.03,得到157.2 rad/s,和额定转速吻合。如果负载加倍到20A,转速变成200/(0.1241×20) - 4.03 = 76.5 rad/s,几乎降了一半。
这个结果的物理意义很深:串励电机的功率近似恒定。负载转矩大了,转速自动降下来,但功率不会像他励那样大幅变化。起重机起吊重物的场景正是利用了这个特性——低速时能输出超大转矩,而且不会让电动机过载太严重。
4.3 调速特性:调压与弱磁的思路
直流电动机最常用的调速方式有两种:调压调速和弱磁调速。
调压调速对三种电机都适用。他励电机降低电枢电压时,机械特性曲线平行下移,同一负载下转速降低,特性硬度不变。并励电机在调电压时要小心,因为励磁电压也跟着变了,磁通会下降,转速不一定按线性关系降下来,这在早期的并励电机调速应用里是个很讨厌的问题。串励电机调压调速就非常自然,电压降低,特性曲线整体下移,电机转速也降下来,适用于电力机车这类需要频繁调速的场合。
弱磁调速主要用于他励和并励电机。减小励磁电流,磁通下降,转速升高。从公式n = u/(k_eΦ) - R_aT/(k_e k_t Φ²)可以看出,弱磁后不仅空载转速升高,特性也变软了。弱磁调速只能向额定转速以上调,而且受到机械强度和换向条件的限制,调速范围一般不超过1.5到2倍额定转速。这些现象在仿真里都能完美复现。
4.4 工程启示:什么场合选什么电机
跑完仿真,三种电机的性格就非常立体了。他励电机控制灵活,电枢电压和励磁电流各自独立,适合高性能调速系统,但需要两套电源,系统成本最高。并励电机结构简单,恒速性能也可以,虽然完成了负载突变时的转速稳定,但对电源电压波动敏感。串励电机的启动转矩大、过载能力强、软特性适合牵引负载,但严禁空载运行,这在选型时是硬约束。
| 特性 | 他励 | 并励 | 串励 |
|---|---|---|---|
| 启动转矩 | 较大 | 较大 | 极大 |
| 转速特性 | 硬 | 硬 | 软 |
| 空载运行 | 允许 | 允许 | 禁止 |
| 弱磁调速 | 方便 | 可以 | 不适用 |
| 典型应用 | 高性能调速 | 恒速负载 | 牵引、起重 |
5. 常见问题与排查技巧实录
5.1 串励模型的代数环问题
串励模型最典型的Simulink报错就是代数环。原因是反电动势e = K i_a ω,而电流i_a本身又取决于反电动势e,信号在同一个仿真步长内形成了隐式依赖关系。
解决方法我试过几种,最实用的有两个。一个是给反电动势反馈回路的乘法器输出端加一个Unit Delay模块,延迟一个步长,打破代数环。代价是会带来一个步长的相位滞后,但对总体动态特性影响很小。另一个是使用S-Function模块,在状态更新函数里按顺序计算,从根本上避免反馈信号直接穿通。初学者用前一种方案足够,代码少、见效快,改一行就能跑通。
5.2 启动瞬间仿真发散
全压启动时电流上升速率很快,如果最大步长设置太大,很容易出现数值发散。具体表现是电流波形突然变成锯齿状,甚至直接跳到几十万安培。多数情况下把求解器最大步长改小到1e-4就能解决。如果还发散,就检查一下积分器初始状态是否为零,尤其是转速初始值,万一被设成了某个不合理的大数,整个响应就乱了。这个问题的排查思路和通用数值仿真差不多,优先怀疑步长,再怀疑初值。
5.3 单位混用的坑
单位错误是电机仿真里最高频的翻车点。最隐蔽也最常见的就是rad/s和rpm混用。积分器出来的转速是按rad/s算的,而额定数据常常是rpm,如果在常数计算时用了rpm,出来的结果就会差大约9.55倍。我的习惯是全部统一用SI单位,只在最终输出显示时再转换。转矩单位亦然,N·m和kgf·m的换算关系是1kgf·m=9.81N·m,一旦混用转矩常数就对不上。
建议在建模型之前用纸笔把所有常数都算好列成一张表,比如上面2.4节那样的参数表,再往Simulink里填。做仿真最忌讳想到哪填到哪,填到后面自己都忘了哪个数是从哪个公式来的。
5.4 串励电动机空载超速
串励电机的空载超速不是仿真bug,而是真实物理现象。空载时电枢电流很小,磁通也很小,反电动势e = K i_a ω要保持和电源电压相抵消,唯一的办法就是转速ω升到极高,理论上如果完全没有负载和摩擦,转速会趋向无穷大。所以真正的串励电机严禁空载运行,皮带传动一旦断带就飞车。
仿真里要模拟这种行为可以,但一定要限制转速范围。我通常在转速积分器输出后加一个Saturation模块,限制在额定转速的两倍以内,或者给负载加一个很小的常数摩擦转矩,确保电机不会在仿真里飞上天。做串励模型时把这个细节处理好,后期做特性分析会省心很多。
从我个人做实际项目的角度看,这三套模型的搭建难度其实都不高,核心价值在于对比。把三种电机的仿真结果放在一起,哪些特性来自磁通变化,哪些特性来自电枢回路参数,一眼就能看出来。后续如果继续做直流电机仿真,可以考虑加上双闭环调速控制、四象限运行、或者把磁化曲线的饱和段做成查表模块,这些都是在今天这三套基本模型上的自然延伸。仿真永远只是工具,真正值钱的是对物理过程的那层理解。