直流电机数学模型与状态空间分析——详解版
直流电机数学模型:从第一性原理到现代控制状态空间
? 核心提要:核心提要与知识图谱
直流电机是电机控制世界的“透明模型”。它干净、线性、没有复杂的坐标变换,机电耦合规律写在脸上。本文旨在从最原初的牛顿力学与法拉第电磁感应定律出发,推导直流电机的完整物理模型,并将其抽象为现代控制理论中的状态空间矩阵(State-Space),最终落实为单片机(MCU)中的离散化 C 代码实现。
前置知识节点:[[牛顿经典力学]]、[[法拉第电磁感应定律]]、[[线性代数基础]]
后继进阶节点:[[坐标变换与FOC原理]]、[[滑模观测器 SMO 离散化实现]]
在现代工业中,虽然永磁同步电机(PMSM)和磁场定向控制(FOC)占据了主导地位,但所有高级电机算法的根基都深植于直流电机模型之中。把直流电机吃透,再看 PMSM 与 FOC,你会产生一种顿悟:所谓的 FOC,本质上就是通过极其巧妙的数学手段(Park 与 Clark 变换),把一台非线性、强耦合的三相交流电机,在算法的虚拟维度里“强行扭曲”成一台简单的直流电机。
一、 机械域:从直线运动到旋转物理世界
1.1 旋转世界的“牛顿第二定律”
电机控制的基础是力学。回顾初中物理的牛顿第二定律(直线运动):
当我们将视角从直线的“推箱子”切换到电机的“转圈圈”时,物理量的维度发生了完美的映射:
- 直线上的“合外力 \(F_{net}\)” \(\rightarrow\) 旋转世界里的“合力矩 \(T_{net}\)” (Torque)
- 直线上的“质量 \(m\)” \(\rightarrow\) 旋转世界里的“转动惯量 \(J\)” (Inertia,表示物体改变旋转状态的阻力)
- 直线上的“线速度 \(v\)” \(\rightarrow\) 旋转世界里的“角速度 \(\omega_m\)” (Angular velocity)
因此,旋转世界的牛顿第二定律表达为:
1.2 电机的机械运动方程
将电机的实际受力情况代入上述定律,我们得到电机学中最经典的机械运动方程:
为了更清晰地看清物理本质,我们将阻力项移到等式左边:
? 工程洞察:机械方程参数深度解析
- \(T_e\) (电磁转矩):电机定转子磁场相互作用产生的绝对主动力。
- \(T_L\) (外部负载转矩):电机轴上挂载的死负载(如提升重物、切削阻力)。
- \(B \omega_m\) (黏性摩擦转矩):随转速正比例增加的系统摩擦与风阻。\(B\) 为摩擦系数。
- \(J\) (系统总转动惯量):包含电机转子自身惯量 \(J_{motor}\) 与外部负载折算到轴上的惯量 \(J_{load}\)。
- \(\frac{d\omega_m}{dt}\) (角加速度):转速的变化率。只要合力矩不为 0,系统就必然处于加速或减速的动态过程中。
1.3 工程实战避坑:惯量 \(J\) 与速度环 PI 参数的致命羁绊
在实际的电机控制代码中,转动惯量 \(J\) 绝对不是一个简单的常量。它是 \(J_{\Sigma} = J_{motor} + J_{load}\)。
?? 警告:调试案例:洗衣机负载突变
- 空载状态:拔掉皮带,系统只有极小的 \(J_{motor}\)。算法输出微小的转矩指令,电机转速就能瞬间飙升至目标值。
- 满载状态:滚筒塞满吸水衣物,\(J_{load}\) 极其巨大。系统总惯量可能是空载的几十倍。
控制逻辑推演:如果用空载时调好的速度环比例增益 \(K_p\) 去推满载电机,由于推力不足,电机会反应极其迟钝;反之,如果用满载调好的大 \(K_p\) 去推空载电机,由于“药效过猛”,电机会出现疯狂的超调震荡甚至异响。
前沿算法(惯量辨识):高级伺服驱动器会在上电瞬间注入高频微小扰动信号,通过观测转速响应,利用递归最小二乘法(RLS)在线计算出当前的总惯量 \(J\),从而实现 PID 参数的自适应整定。
二、 电气域:水管模型与机电耦合方程
2.1 电枢电压平衡方程(水管模型)
将电池接在直流电机两端,电机内部的电枢绕组本质上是一个“具有动态反压的 RL 串联电路”。描述这个电路状态的方程为:
- \(u_a\):外加电枢端电压 (V)
- \(R_a i_a\):电枢电阻产生的纯热损耗压降 (V)
- \(L_a \frac{di_a}{dt}\):电枢电感抵抗电流突变产生的感生电动势 (V)
- \(e_b\):转子切割磁感线产生的反电动势 (V)
2.2 两大宏观机电耦合方程
电学和力学是通过以下两个核心方程跨界握手的:
- 电生力(转矩生成):\[T_e = K_t i_a \]电流 \(i_a\) 流过磁场产生安培力,宏观表现为转矩。\(K_t\) (转矩常数, N·m/A) 决定了 1A 电流能换取多少力气。
- 动生电(反电势生成):\[e_b = K_e \omega_m \]转子线圈在磁场中旋转切割磁感线,产生对抗外加电压的电动势。\(K_e\) (反电动势常数, V/(rad/s)) 决定了每单位转速能发出多少伏特的电压。
2.3 宇宙法则:证明 \(K_e = K_t\)
在标准的国际单位制(SI)下,这台电机“把电变成力”的能力,和“把力变成电”的能力绝对相等。这不是经验规律,而是基于能量守恒定律的物理强约束。
严密证明过程:
- 忽略内部热损耗与铁损,电机输入的纯电磁功率为:\(P_{em} = e_b i_a\)
- 电机输出的纯机械功率为:\(P_m = T_e \omega_m\)
- 根据能量守恒定理,\(P_{em} \equiv P_m\),即:\[e_b i_a = T_e \omega_m \]
- 将机电耦合方程代入上式:\[(K_e \omega_m) i_a = (K_t i_a) \omega_m \]
- 两边消去变量 \(\omega_m\) 与 \(i_a\),得到铁证:\[K_e = K_t \]
三、 微观溯源:反电动势与结构常数的推导
我们要知其然,更要知其所以然。\(K_e\) 究竟是怎么由电机的机械结构决定的?
3.1 从单根导线到法拉第定律
反电动势的物理本源是法拉第电磁感应定律:\(e = -\frac{d\psi}{dt}\)。
假设转子表面有一根有效导线,电机有 \(2p\) 个磁极(即极对数为 \(p\)),单极磁通量为 \(\Phi\) (Wb)。
- 导线转一整圈切割的总磁通变化量:\(\Delta \psi = 2p \cdot \Phi\)
- 导线转一圈花费的时间:\(\Delta t = \frac{2\pi}{\omega_m}\)
- 根据离散化的法拉第定律 \(e_{avg} = \frac{\Delta \psi}{\Delta t}\),单根导线的平均发电机电压为:\[e_{avg} = \frac{2p \Phi}{\frac{2\pi}{\omega_m}} = \frac{p \Phi}{\pi} \omega_m \]
3.2 宏观电机的“机械放大器”
实际转子上有 \(N\) 根有效导线,这些导线被电刷和换向器分成了 \(2a\) 条并联支路(并联支路对数为 \(a\))。
根据电路原理,并联不增加电压,只有串联才能叠加电压。因此,真正在电路上串联对外输出电压的导线数量为 \(\frac{N}{2a}\)。
将单根导线电压进行宏观放大:
重新排列组合,提取出与转速和磁通无关的结构常数 \(C\):
对比 \(e_b = K_e \omega_m\),得出微观结构与宏观常数的终极关系:
****Quote:工程师的直觉构建
结构常数 \(C\) 就是一个由绕线工人手工决定的“机械放大器”。\(K_e\) 就是这个放大器将磁铁的底层磁通 \(\Phi\) 放大了无数倍后,在端子上呈现的宏观等效磁链。如果在代码里做“弱磁控制(Flux Weakening)”,本质上就是人为通过定子电流去抵消 \(\Phi\),从而强行减小 \(K_e\),以换取更高的极限转速。
四、 稳态与动态:来自工程现场的拷问
4.1 扰动推演:突加重载的物理死锁
场景设定:电机外加稳压源 \(U=24V\) 不变,处于空载稳态。突然轴上挂载极重的铁块(\(T_L\) 阶跃增大)。不加任何单片机干预,电机会发生什么?
物理传导链(微秒级推演):
- 力学失衡:瞬间合力矩 \(T_e - T_L < 0\),系统获得负角加速度,惯量 \(J\) 开始被消耗,转速 \(\omega_m\) 被迫下降。
- 反电势跌落:由于 \(\omega_m\) 下降,根据 \(e_b = K_e \omega_m\),反电动势 \(e_b\) 同步跌落。
- 电流被动灌入:恒压源 \(U\) 发现反电势 \(e_b\) 变小了,根据 \(i_a = \frac{U - e_b}{R_a}\),巨大的压差瞬间将大电流 \(i_a\) 灌入绕组。
- 推力重建:电流增大导致电磁转矩 \(T_e = K_t i_a\) 攀升。
- 新稳态达成:当 \(T_e\) 攀升至与新负载 \(T_{L\_new}\) 相等时,合力矩归零。电机停止减速,停留在比原来更低的转速和更大的电流下运转。
直流电机的“软特性”结论:外加电压死死不变的情况下,“大推力”与“高转速”在物理上绝对不可兼得。要想维持原转速,唯有引入 PI 控制器,在转速跌落的瞬间,由单片机人为提升 PWM 占空比(提升等效外加电压 \(U\)),打破物理死锁。
4.2 示波器上的直觉映射(无感 FOC 剧透)
在算法工程师眼中,数字波形就是机械世界的投影:
- 看电流知转矩:因为 \(T_e = K_t i_a\),如果看到相电流波形瞬间刺出一个巨大尖峰,说明轴上遭遇了极其暴力的卡顿或起步。如果出现纯粹的直线飙升至 \(I = U/R_a\),说明电机机械堵转,必须在微秒级触发过流保护断电,否则炸管。
- 看反电势知转速:因为 \(e_b = K_e \omega_m\)。这也是无感 FOC (Sensorless FOC) 的全部核心理论基础。单片机中运行的滑模观测器(SMO),本质就是抛弃实体霍尔传感器,通过疯狂采样 \(u_a\) 和 \(i_a\),硬生生逆运算算出不可见的 \(e_b\),进而提取出转子角度 \(\theta\) 和速度 \(\omega_m\)。
五、 状态空间视角:现代控制理论的降维打击
当系统复杂度上升,传统的微分方程会陷入混乱。现代控制理论(LQR、状态观测器等)采用极度统一的矩阵形式描述万物:
5.1 状态变量的选择
状态变量代表了系统中具有“记忆效应”(不能发生物理跃变)的储能元件。
- 电感储能(磁场能 \(E = \frac{1}{2}L_a i_a^2\)):决定了电流不能突变。令 \(x_1 = i_a\)
- 惯量储能(动能 \(E = \frac{1}{2}J \omega_m^2\)):决定了转速不能突变。令 \(x_2 = \omega_m\)
定义状态列向量:\(x = \begin{bmatrix} i_a \\ \omega_m \end{bmatrix}\)
5.2 构建状态矩阵
将第一节的电压方程和机械方程,按照“导数留在左边,其余扔到右边”的原则重构:
整理电压方程 (求 \(\dot{x}_1\)):
整理机械方程 (求 \(\dot{x}_2\)):
将其合并为标准矩阵形式:
5.3 矩阵的工程学解读
- A 矩阵 (系统状态矩阵):电机的“数字 DNA”。它内部全由出厂定死的结构参数组成。它决定了在没有任何外加干预时,电机自身动态衰减的固有属性(特征根决定了系统极点)。
- B 矩阵 (控制输入矩阵):算法的“方向盘传动比”。注意 B 矩阵的第二行是
0!这说明算法输出的电压 \(u_a\) 绝对无法瞬间直接改变转速 \(\dot{x}_2\)。电压只能直接改变第一行对应的电流,再通过 A 矩阵内部的交叉项(耦合项)去间接改变转速。 - E 矩阵 (扰动矩阵):描述外部恶意负载 \(T_L\) 如何破坏系统的平衡。由于第一行为
0,说明外部扰动不会直接在电路上产生电流,而是作为负角加速度死死拽住转子的脖子。
六、 离散化方案与单片机 C 语言落地
物理世界的时间是连续的(存在导数),而单片机的世界只有一次次定时器中断的“节拍”(采样周期 \(T_s\))。将连续矩阵 \((A, B)\) 转化为单片机可运行的数字差分方程 \((A_d, B_d)\),是算法落地的最后也是最关键的一跃。
离散化目标:\(x_{k+1} = A_d x_k + B_d u_k\)
6.1 前向欧拉法 (Forward Euler):工程师的暴力快刀
直接用中断周期的割线斜率代替微积分的导数:
代入连续方程 \(\frac{x_{k+1} - x_k}{T_s} = A x_k + B u_k\),整理得到:
因此,欧拉离散矩阵为:
?? 警告:欧拉法的死穴
欧拉法极其节省算力,仅适用于中断频率极高的系统(如 \(T_s \le 100 \mu s\) 的 FOC 核心环)。如果采样频率稍低,或者系统极点偏高,这种一阶近似会导致 \(A_d\) 矩阵特征值跑出单位圆,引发代码算出的预测电流呈指数爆炸,最终导致单片机跑飞(发散)。
6.2 零阶保持器法 (Zero-Order Hold, ZOH):数学家的降维打击
考虑到 MCU 的 PWM 寄存器在整个 \(T_s\) 周期内会保持电压 \(u_k\) 不变(这就是 ZOH 的物理本质),通过求解连续微分方程的精确解析解并分段积分,我们得到绝对精确的离散矩阵:
注:这里的 \(e^{AT_s}\) 不是简单的自然底数求幂,而是矩阵指数(Matrix Exponential),可通过泰勒展开求解。你会发现,欧拉法仅仅是泰勒展开截断了所有高阶项后留下的一阶近似。
6.3 算法落地 C 代码框架
在实际的 C 语言开发中,我们绝不会让单片机去算什么积分或矩阵指数。算法工程师会在 MATLAB 中用 c2d(sys, Ts, 'zoh') 提前算好这些常数矩阵,并在头文件中写死:
// ==========================================
// 直流电机状态观测器 (离散化 C 代码示例)
// ==========================================
// 预编译的 ZOH 离散化系统矩阵常数 (由 MATLAB 生成)
#define AD_11 (0.9985f)
#define AD_12 (-0.0120f)
#define AD_21 (0.0450f)
#define AD_22 (0.9991f)
#define BD_1 (0.0035f)
#define BD_2 (0.0001f)
// 状态变量结构体
typedef struct {
float i_a; // x1: 观测电流
float omega; // x2: 观测转速
} MotorState_t;
MotorState_t x_hat = {0.0f, 0.0f};
/**
* @brief 在定时器/PWM 中断中调用的状态预测函数
* @param u_a 当前外加电压 (PWM 占空比换算值)
*/
void StateSpace_Predict(float u_a) {
float next_i_a, next_omega;
// 矩阵乘加运算:x(k+1) = Ad * x(k) + Bd * u(k)
// 这种形式彻底将具体的物理器件解耦为了纯数学运算
next_i_a = AD_11 * x_hat.i_a + AD_12 * x_hat.omega + BD_1 * u_a;
next_omega = AD_21 * x_hat.i_a + AD_22 * x_hat.omega + BD_2 * u_a;
// 更新状态记忆
x_hat.i_a = next_i_a;
x_hat.omega = next_omega;
}

浙公网安备 33010602011771号