3. 电机数学模型:直流电机、PMSM与坐标变换

做电机控制,说白了就是跟数学模型打交道。你想想看,电机本身是个复杂的电磁系统,我们得把它简化成数学方程,才能在Simulink里搭模型、写算法。

我个人习惯,先把直流电机讲清楚。为什么?因为它简单、直观,是理解所有电机的基础。搞懂了直流电机,PMSM那些绕来绕去的坐标变换,你上手会快很多。

3.1 直流电机数学模型

直流电机,我刚开始做项目时觉得它太老了,没什么好学的。后来发现,很多伺服系统的底层逻辑,其实都源自直流电机的控制思想。

直流电机的核心方程,就两个:电压方程转矩方程

电枢回路电压方程:

Ua = Ra * Ia + La * dIa/dt + E

其中,E是反电动势,E = Ke * ω(Ke是反电动势常数,ω是转速)。

转矩方程:

Te = Kt * Ia

Kt是转矩常数,对于理想直流电机,Kt = Ke(数值上相等,单位不同而已)。

机械运动方程:

Te - TL = J * dω/dt + B * ω

J是转动惯量,B是阻尼系数,TL是负载转矩。

关键点:直流电机的转矩与电枢电流成正比。这意味着,你控制电流,就能直接控制转矩。这是所有电机控制的底层逻辑。

我在项目中遇到过一个问题:用Simulink搭直流电机模型时,如果忽略了电枢电感La,仿真结果在高频响应时会严重失真。嗯,这里要注意,La虽然小,但在电流环设计时不能省。

3.2 永磁同步电机(PMSM)数学模型

PMSM现在用得最多,电动车、机器人、伺服驱动,到处都是。它的数学模型比直流电机复杂,因为转子是永磁体,定子需要通三相交流电。

PMSM的电压方程,在三相静止坐标系(ABC坐标系)下是这样的:

Ua = Rs * Ia + dψa/dt
Ub = Rs * Ib + dψb/dt
Uc = Rs * Ic + dψc/dt

其中,ψa、ψb、ψc是三相磁链,它们互相耦合。你想想看,三个方程互相牵扯,直接控制非常麻烦。

转矩方程:

Te = p * [ψf * Iq + (Ld - Lq) * Id * Iq]

p是极对数,ψf是永磁体磁链,Ld、Lq是d、q轴电感,Id、Iq是d、q轴电流。

我的经验:对于表贴式PMSM(SPMSM),Ld ≈ Lq,转矩只与Iq有关,控制起来跟直流电机很像。但对于内置式PMSM(IPMSM),Ld ≠ Lq,会产生磁阻转矩,这时候要用MTPA(最大转矩电流比)控制,才能发挥电机性能。

我曾经在调试一个IPMSM驱动时,发现电机效率一直上不去。后来仔细一查,原来是Id电流给错了,没有利用磁阻转矩。嗯,这个坑我踩过,大家要注意。

3.3 坐标变换:Clark变换与Park变换

为什么要做坐标变换?说白了,就是把三相交流电机的复杂耦合问题,变成直流电机那样简单的解耦控制。

你想想看,三相交流电机的电压、电流都是随时间变化的正弦波,控制起来很麻烦。但如果把它们变换到一个旋转的坐标系(d-q坐标系)下,这些量就变成了直流量。控制直流量,那就简单多了。

3.3.1 Clark变换(3相→2相静止)

Clark变换把ABC三相坐标系,变换到αβ两相静止坐标系。公式如下:

Iα = Ia
Iβ = (Ia + 2*Ib) / √3

(这里用了等幅值变换,等功率变换系数不同,但原理一样)

Clark变换的物理意义:把三个互相差120°的线圈,等效成两个互相垂直的线圈。这样,问题就从三维降到了二维。

3.3.2 Park变换(2相静止→2相旋转)

Park变换把αβ静止坐标系,变换到dq旋转坐标系。公式如下:

Id = Iα * cosθ + Iβ * sinθ
Iq = -Iα * sinθ + Iβ * cosθ

θ是转子位置角(电角度)。

Park变换的核心:让坐标系跟着转子一起转。这样,原来旋转的电压、电流矢量,在新的坐标系下就静止了。

核心思想:Clark变换 + Park变换 = 矢量控制(FOC)的数学基础。没有坐标变换,就没有现代交流电机控制。

3.3.3 坐标变换的Simulink实现

在Simulink里搭坐标变换,我建议直接用Fcn模块或者MATLAB Function模块。下面是一个Park变换的代码示例:

function [Id, Iq] = park_transform(Ialpha, Ibeta, theta)
    Id = Ialpha * cos(theta) + Ibeta * sin(theta);
    Iq = -Ialpha * sin(theta) + Ibeta * cos(theta);
end

反过来,逆Park变换(dq→αβ)也很常用:

function [Ialpha, Ibeta] = inv_park_transform(Id, Iq, theta)
    Ialpha = Id * cos(theta) - Iq * sin(theta);
    Ibeta = Id * sin(theta) + Iq * cos(theta);
end

注意:Park变换中的角度θ,必须是电角度,不是机械角度。电角度 = 机械角度 × 极对数。这个搞错了,整个控制就全乱了。我见过有人在这里栽跟头,仿真跑出来电流波形乱七八糟,查了半天才发现是角度没换算。

3.4 知识体系总览

为了让你更直观地理解本章的知识结构,我画了一张图。它展示了从直流电机到PMSM,再到坐标变换的完整逻辑链条。

电机数学模型知识体系 直流电机模型 电压方程: U = RI + L dI/dt + E 转矩方程: Te = Kt * Ia 运动方程: Te - TL = J dω/dt 类比 PMSM模型 三相电压方程(耦合) 转矩: Te = p[ψf Iq + (Ld-Lq)Id Iq] 需要解耦控制 解耦 坐标变换 Clark变换 ABC → αβ Park变换 αβ → dq 交流量 → 直流量 Simulink建模应用 FOC矢量控制 | 电流环设计 | 仿真验证 从数学模型到实际控制算法 核心逻辑:直流电机 → PMSM(类比)→ 坐标变换(解耦)→ Simulink实现 💡 建议:先理解直流电机模型,再对比学习PMSM,最后掌握坐标变换,这是最有效的学习路径

3.5 避坑指南与个人经验

做电机控制建模,有几个地方特别容易出错。我把自己踩过的坑总结一下:

  • 角度对齐问题:Park变换用的角度,必须是转子磁极位置。如果编码器安装有偏差,或者初始角没找对,整个控制都会偏。我曾经在调试时,电机一启动就抖动,查了两天才发现是编码器零位偏了5度。
  • 变换系数选择:Clark变换有等幅值和等功率两种。等幅值变换下,变换前后的电流幅值不变;等功率变换下,变换前后的功率不变。Simulink自带的模块默认用等幅值,但有些教材用等功率。你建模时一定要统一,否则算出来的转矩会差一个系数。
  • 仿真步长设置:电机模型的电气时间常数很小(毫秒级甚至微秒级),仿真步长不能太大。我一般用1e-6秒(1微秒)作为固定步长,或者用ode45变步长求解器,但最大步长限制在1e-5秒以内。

实用技巧:在Simulink里验证坐标变换是否正确,有个简单方法:给电机通三相平衡正弦电流(Ia = Im*sin(ωt),Ib = Im*sin(ωt-120°),Ic = Im*sin(ωt+120°)),然后做Clark+Park变换。如果变换正确,Id和Iq应该是直流量(Id=0,Iq=Im)。如果Id或Iq有交流分量,说明变换角度或公式有问题。

好了,这一章的内容就到这里。直流电机模型是基础,PMSM模型是重点,坐标变换是工具。把这三块搞明白,你在Simulink里搭电机控制模型就有了底气。


公众号:蓝海资料掘金营,微信deep3321