3. 直流电机数学模型:从物理方程到状态空间
直流电机,说白了就是电能转机械能的核心部件。很多初学者一上来就盯着PID调参,结果电机嗡嗡响就是不转——其实根子往往在模型没搞透。我个人习惯是先搭好数学模型,再动手写代码。这一章我们就来把直流电机的数学模型掰开揉碎。
本章核心脉络:电枢回路方程 → 机械运动方程 → 传递函数 → 状态空间表达式。每一步都对应着实际工程中的物理量,不是纯数学游戏。
3.1 电枢回路方程
先看电枢回路。直流电机通电后,电枢绕组里流过电流,产生电磁转矩。但绕组本身有电阻和电感,还会切割磁感线产生反电动势。这些物理量必须用一个方程统一描述。
电枢回路的电压平衡方程长这样:
U = E + iR + L * (di/dt)
其中:
- U — 电枢两端施加的电压(V)
- E — 反电动势(V),E = Ke · ω
- i — 电枢电流(A)
- R — 电枢回路总电阻(Ω)
- L — 电枢回路总电感(H)
我的经验:实际项目中R和L不是固定值。温度升高时绕组电阻会增大,我遇到过因为没考虑温升导致电流环发散的情况。建议在模型里预留R的温度补偿系数。
反电动势E是电机转速ω的函数。Ke是反电动势常数,单位V·s/rad。这个参数在电机铭牌上通常不直接给,但可以通过空载实验测出来——我习惯用额定转速和额定电压反推。
3.2 机械运动方程
电机轴上的转矩平衡,说白了就是「谁推谁」的问题。电磁转矩驱动转子旋转,负载转矩和摩擦转矩是阻力,再加上惯性的影响。
机械运动方程:
Te - TL = J * (dω/dt) + B * ω
参数含义:
| 符号 | 含义 | 单位 | 典型值范围 |
|---|---|---|---|
| Te | 电磁转矩 | N·m | 0.01 ~ 1000+ |
| TL | 负载转矩 | N·m | 由工况决定 |
| J | 转动惯量(转子+负载折算) | kg·m² | 10⁻⁵ ~ 10 |
| B | 粘性摩擦系数 | N·m·s/rad | 10⁻⁴ ~ 10⁻² |
| ω | 转子角速度 | rad/s | 0 ~ 额定转速 |
电磁转矩Te = Kt · i,Kt是转矩常数。在SI单位制下,Kt = Ke,这个关系在模型里可以直接用。
注意:J是折算到电机轴上的总惯量。如果负载通过减速器连接,Jtotal = Jmotor + Jload / n²,n是减速比。我曾经因为忘记折算,仿真结果和实测差了3倍。
3.3 传递函数推导
有了时域方程,接下来拉普拉斯变换走一波。把电枢回路和机械运动方程联立,消去中间变量电流i,就能得到从电压U(s)到转速ω(s)的传递函数。
拉氏变换后的方程组:
U(s) = Ke·ω(s) + I(s)·(R + Ls)
Kt·I(s) - TL(s) = (Js + B)·ω(s)
令负载TL = 0(空载情况),消去I(s)得到:
G(s) = ω(s) / U(s) = Kt / [ (R + Ls)(Js + B) + KeKt ]
展开分母,整理成标准二阶系统形式:
G(s) = Kt / (LJs² + (LB + RJ)s + (RB + KeKt))
这个传递函数有两个极点,对应电气时间常数τe = L/R和机械时间常数τm = J/B。实际电机中τe远小于τm,所以简化模型时常忽略电感L。
简化技巧:当L很小时(比如永磁直流电机),令L=0,传递函数降为一阶:
G(s) = Kt / (RJs + (RB + KeKt))
这个一阶模型在电流环设计时非常实用,我经常用它做快速原型验证。
3.4 状态空间表达式
传递函数适合频域分析,但现代控制算法(比如LQR、MPC)需要状态空间模型。我们把转速ω和电流i选为状态变量,电压U为输入,转速ω为输出。
状态变量:x = [i, ω]T
输入:u = U
输出:y = ω
从时域方程出发:
di/dt = -(R/L)·i - (Ke/L)·ω + (1/L)·U
dω/dt = (Kt/J)·i - (B/J)·ω - (1/J)·TL
写成矩阵形式:
ẋ = Ax + Bu
y = Cx + Du
其中:
| 矩阵 | 表达式 | 维度 |
|---|---|---|
| A | [[-R/L, -Ke/L], [Kt/J, -B/J]] | 2×2 |
| B | [[1/L], [0]] | 2×1 |
| C | [0, 1] | 1×2 |
| D | [0] | 1×1 |
实用建议:在Simulink里搭建状态空间模型时,直接用State-Space模块填入A、B、C、D矩阵。我习惯先用MATLAB的ss()函数验证特征值是否与传递函数极点一致——这是一个很好的自检手段。
如果考虑负载转矩TL作为扰动输入,B矩阵可以扩展为2×2:
B = [[1/L, 0], [0, -1/J]]
这样模型就能同时响应电压控制和负载变化,更贴近实际工况。
3.5 模型参数获取与验证
模型搭好了,参数从哪来?我一般按这个优先级获取:
- 电机数据手册 — 直接查R、L、Kt、J
- 空载实验 — 测反电动势常数Ke
- 堵转实验 — 测电阻R和转矩常数Kt
- 阶跃响应拟合 — 用实测转速曲线反推J和B
避坑指南:我曾经用数据手册的J值直接仿真,结果响应速度比实测快了一倍。后来发现手册给的是转子惯量,没算负载和联轴器。记住:仿真用的J必须是折算到电机轴上的总惯量。
验证模型最简单的方法:给一个阶跃电压,看转速响应是否与实际电机一致。重点关注稳态转速和上升时间,这两个指标对上了,模型基本可用。