2. 永磁同步电机(PMSM)基础:数学模型、坐标变换(Clark/Park)
好,咱们正式开始啃硬骨头了。这一章是后面所有无感启动算法的基础,说白了,你如果不懂PMSM的数学模型和坐标变换,后面那些观测器、估算器根本玩不转。我自己带新人时,发现很多人卡就卡在这里——公式看得懂,但不知道为什么这么干。
咱们换个思路,先搞清楚一个问题:为什么非要做坐标变换?
你想想看,电机里面三相电流是交流的,互相差120度,还在不停旋转。你让一个单片机去控制这种时变系统,难度很大。但如果我能把这三相交流量,变成两个直流量,一个控制磁通,一个控制转矩,那控制起来就跟调直流电机一样简单了。这就是坐标变换的终极目的。
2.1 PMSM的物理模型与基本假设
先看电机长什么样。永磁同步电机,转子是永磁体,定子有三相绕组。我给个简化模型:
做数学建模前,得先做点简化。不然模型太复杂,没法用。我一般跟团队说:先抓住主要矛盾,次要因素后面再补偿。
建模基本假设:
- 忽略铁芯饱和(磁路是线性的)
- 忽略涡流和磁滞损耗
- 定子绕组三相对称,空间互差120°
- 转子永磁体产生的气隙磁场为正弦分布
- 忽略温度对参数的影响(这个后面再补偿)
2.2 三相静止坐标系下的数学模型
有了假设,咱们就能列方程了。PMSM在三相静止坐标系(ABC坐标系)下的电压方程长这样:
u_a = R_s * i_a + d(ψ_a)/dt
u_b = R_s * i_b + d(ψ_b)/dt
u_c = R_s * i_c + d(ψ_c)/dt
其中磁链方程更复杂一些,因为包含了自感和互感,还有转子永磁体产生的反电动势:
ψ_a = L_aa * i_a + M_ab * i_b + M_ac * i_c + ψ_f * cos(θ_e)
ψ_b = M_ba * i_a + L_bb * i_b + M_bc * i_c + ψ_f * cos(θ_e - 120°)
ψ_c = M_ca * i_a + M_cb * i_b + L_cc * i_c + ψ_f * cos(θ_e + 120°)
看着就头疼,对吧?这里面L和M都是随转子位置变化的,是个时变系统。你让单片机实时算这玩意儿,算力根本扛不住。所以必须做坐标变换,把这些时变量变成常量。
我的经验:在实际项目中,我从来不会在代码里直接用ABC坐标系下的方程做控制。它只用来做仿真验证,或者推导变换矩阵。真正跑在MCU上的,都是DQ轴下的模型。
2.3 Clark变换:从ABC到αβ
Clark变换是第一步。它的目标是把三相(A、B、C)变成两相(α、β)。说白了,就是降维。
为什么能降?因为三相电流满足 i_a + i_b + i_c = 0(星形接法,中线不引出)。所以三个变量里只有两个是独立的。
变换公式如下(等幅值变换):
i_α = i_a
i_β = (i_a + 2*i_b) / √3
写成矩阵形式更清楚:
[ i_α ] [ 1 -1/2 -1/2 ] [ i_a ]
[ i_β ] = [ 0 √3/2 -√3/2 ] [ i_b ]
[ i_0 ] [ 1/√2 1/√2 1/√2 ] [ i_c ]
注意第三行是零序分量,在三相对称系统中 i_0 = 0,可以忽略。
避坑指南:我曾经在一个项目里吃过亏——Clark变换有两种常用形式:等幅值变换和等功率变换。两者的系数不同。如果你后面要做功率计算(比如效率分析),必须用等功率变换,否则算出来是错的。我那次就是仿真和实测对不上,查了两天才发现是变换系数没统一。
两种变换的系数对比如下:
| 变换类型 | α轴系数 | β轴系数 | 适用场景 |
|---|---|---|---|
| 等幅值变换 | 1 | 1/√3 | 电流环控制(最常用) |
| 等功率变换 | √(2/3) | √(2/3) | 功率计算、效率分析 |
2.4 Park变换:从αβ到DQ
Clark变换做完,我们得到了αβ坐标系下的两相交流量。但问题来了——它还是交流的,频率跟着电机转速变。PID控制器对交流信号的跟踪效果很差,会有稳态误差。
Park变换就是来解决这个问题的。它把静止的αβ坐标系,旋转到跟转子同步的DQ坐标系上。这样一来,基波分量就变成了直流量。
变换公式:
i_d = i_α * cos(θ_e) + i_β * sin(θ_e)
i_q = -i_α * sin(θ_e) + i_β * cos(θ_e)
其中 θ_e 是转子电角度。这里有个关键点:θ_e 必须准确。如果角度有误差,DQ轴之间会耦合,控制性能直接拉胯。
物理意义:
- d轴(直轴): 与转子磁极方向对齐,控制 i_d 就是控制励磁分量。对于表贴式PMSM,通常让 i_d = 0。
- q轴(交轴): 与转子磁极方向垂直,控制 i_q 就是控制转矩。你踩油门,本质上就是在调 i_q。
2.5 DQ坐标系下的数学模型
经过Clark+Park变换,PMSM的数学模型终于变得清爽了:
u_d = R_s * i_d + L_d * di_d/dt - ω_e * L_q * i_q
u_q = R_s * i_q + L_q * di_q/dt + ω_e * (L_d * i_d + ψ_f)
电磁转矩方程:
T_e = 1.5 * p * [ψ_f * i_q + (L_d - L_q) * i_d * i_q]
看到没?所有时变系数都消失了。L_d和L_q变成了常数(对于凸极率低的电机,L_d ≈ L_q)。控制 i_d 和 i_q 就像控制两个独立的直流电机一样。
这里面有个细节值得注意:
- 第一项 ψ_f * i_q:永磁转矩,是主要的转矩来源。
- 第二项 (L_d - L_q) * i_d * i_q:磁阻转矩,只有凸极电机(L_d ≠ L_q)才有。内嵌式PMSM可以利用这个做弱磁控制,提升高速性能。
2.6 完整的坐标变换流程
我把整个流程串起来,画了张图,你一看就明白:
你看,整个流程是双向的:
- 正向(采样→控制): 采集三相电流 → Clark变换 → Park变换 → 得到i_d、i_q → 送入PI控制器
- 反向(控制→输出): PI输出u_d、u_q → 逆Park变换 → 逆Clark变换 → 得到三相占空比 → SVPWM输出
实现建议:我习惯在代码里把Clark和Park合并成一个函数,减少中间变量的存储。对于Cortex-M4以上的MCU,用浮点运算直接算,一个变换也就几十个周期。如果是M0这种低端芯片,可以用查表法做sin/cos,速度更快。
2.7 常见问题与避坑
做坐标变换时,有几个坑我踩过,分享给你:
| 问题 | 现象 | 原因 | 解决办法 |
|---|---|---|---|
| 电流采样时序不对 | 变换后i_d、i_q有高频噪声 | 采样点没在PWM中心对齐 | 用PWM中心触发ADC,保证采样时刻电流稳定 |
| 角度滞后 | 转矩波动,效率下降 | 角度更新频率低于电流环频率 | 角度插值,或提高角度采样率 |
| 变换系数不一致 | 仿真和实测对不上 | Clark用了等幅值,逆变换用了等功率 | 正逆变换必须用同一套系数 |
| 零漂未校准 | i_d有直流偏置 | 电流传感器零漂未消除 | 上电时做零漂校准,减去偏置值 |
特别提醒:无感启动时,初始位置角是未知的。如果你直接用错误的θ_e做Park变换,i_d和i_q会完全乱掉。这就是为什么无感启动需要专门的预定位或高频注入策略——先确定转子位置,再做坐标变换。这部分后面章节会详细讲。
嗯,这一章的内容就到这儿。数学公式不少,但核心思想其实很简单:把交流变直流,把时变变时不变。你把这个逻辑刻在脑子里,后面学观测器、学无感算法,就会觉得顺理成章。