1. PMSM基础回顾:永磁同步电机工作原理、数学模型、坐标变换理论
各位同学,欢迎来到《基于DSP的PMSM控制算法移植实战》的第一章。我是老张,干了十几年电机控制,踩过的坑比你们走过的路还多(笑)。今天咱们先不急着上代码,把基础夯扎实了,后面移植算法时才不会翻车。
永磁同步电机,简称PMSM。说白了,它就是转子自带磁铁的同步电机。你给它通三相交流电,定子产生旋转磁场,转子跟着转,速度完全同步。为什么现在电动车、伺服系统都爱用它?效率高、功率密度大、控制精度好。我当年第一个项目就是做电动工具的无刷电机驱动,那时候还是方波控制,换相噪声大得吓人。后来换成PMSM矢量控制,效果天差地别。
核心要点:PMSM的转子是永磁体,没有励磁损耗;定子绕组通入正弦电流,产生圆形旋转磁场。控制的关键就是让定子磁场始终超前转子磁场90度电角度,这样才能输出最大转矩。
1.1 永磁同步电机的工作原理
先看结构。PMSM的定子和普通异步电机差不多,都是三相对称绕组。转子呢,是永磁体。根据永磁体安装位置,分为表贴式和内置式。表贴式结构简单,交直轴电感相等,适合高速;内置式有磁阻转矩,适合弱磁扩速。
工作原理其实不复杂。你给三相绕组通入对称的正弦电流:
i_a = I_m * cos(θ_e)
i_b = I_m * cos(θ_e - 120°)
i_c = I_m * cos(θ_e + 120°)
这三相电流在空间上合成一个旋转的磁动势。转子永磁体产生的磁场和这个旋转磁场相互作用,产生电磁转矩,推动转子跟着转。为什么会这样?因为磁力线总想走最短路径,定子磁场拉着转子磁场跑。
个人经验:我在调试一个高速主轴项目时,发现电机在3000rpm以上突然剧烈抖动。查了半天,原来是电流采样相位有延迟,导致磁场定向不准。记住,PMSM控制的核心就是磁场定向,定向偏了1度,转矩就掉3%。
1.2 PMSM的数学模型
要控制好PMSM,必须建立数学模型。这里我直接给出三相静止坐标系下的电压方程:
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°)
看着是不是很头疼?电感矩阵里全是耦合项,而且随着转子位置变化。你想想看,如果直接用这个模型做控制,计算量巨大,实时性根本没法保证。所以我们需要坐标变换,把问题简化。
电磁转矩方程:
T_e = p_n * [ψ_f * i_q + (L_d - L_q) * i_d * i_q]
这里p_n是极对数,ψ_f是永磁体磁链,L_d和L_q是交直轴电感。对于表贴式PMSM,L_d = L_q,转矩只和i_q有关。内置式则多了一项磁阻转矩。
注意:我曾经在项目里吃过亏,以为表贴式电机L_d和L_q完全相等。实际上由于饱和效应,两者会有微小差异。在深度弱磁区,这个差异会导致转矩估算误差。所以做高精度控制时,最好用查表法补偿电感变化。
1.3 坐标变换理论
坐标变换是矢量控制的灵魂。说白了,就是把三相交流量变成两相直流量,这样就能像控制直流电机一样控制PMSM了。
1.3.1 Clark变换(3s/2s)
Clark变换把三相静止坐标系(a,b,c)变换到两相静止坐标系(α,β)。等幅值变换公式如下:
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_c]
Clark变换后,两个正交的交流量仍然随时间变化。要变成直流量,还需要Park变换。
1.3.2 Park变换(2s/2r)
Park变换把两相静止坐标系(α,β)变换到两相旋转坐标系(d,q)。旋转坐标系以转子电角速度ω_e旋转,d轴与转子永磁体磁场方向对齐。
i_d = i_α * cos(θ_e) + i_β * sin(θ_e)
i_q = -i_α * sin(θ_e) + i_β * cos(θ_e)
反过来,逆Park变换:
i_α = i_d * cos(θ_e) - i_q * sin(θ_e)
i_β = i_d * sin(θ_e) + i_q * cos(θ_e)
经过Park变换后,i_d和i_q就是直流量了。i_d控制励磁分量,i_q控制转矩分量。对于表贴式PMSM,通常让i_d=0,只控制i_q。内置式则需要根据最大转矩电流比(MTPA)来分配i_d和i_q。
关键理解:坐标变换的本质是数学上的基变换。你把三相绕组产生的磁动势,用两个正交绕组等效。旋转坐标系下,d轴和转子磁场对齐,q轴超前90度。控制i_q就是控制转矩,控制i_d就是控制励磁(或弱磁)。
1.3.3 坐标变换的DSP实现
在DSP上实现时,我建议用查表法计算sin/cos,避免调用数学库函数,那样太慢了。TI的C2000系列有IQmath库,用定点数做三角函数,效率很高。
// Clark变换(等幅值)
void clark_transform(float i_a, float i_b, float i_c, float *i_alpha, float *i_beta) {
*i_alpha = i_a;
*i_beta = (i_a + 2.0f * i_b) * 0.577350269f; // 1/√3
}
// Park变换
void park_transform(float i_alpha, float i_beta, float theta, float *i_d, float *i_q) {
float sin_theta = sin(theta);
float cos_theta = cos(theta);
*i_d = i_alpha * cos_theta + i_beta * sin_theta;
*i_q = -i_alpha * sin_theta + i_beta * cos_theta;
}
避坑指南:我曾经在DSP上直接用float算三角函数,结果一个PWM周期内计算时间超标。后来改用IQmath的_sin和_cos函数,速度提升了3倍。另外,角度θ要归一化到[0, 2π),否则累积误差会让你崩溃。
1.4 知识体系总览
为了让大家更直观地理解本章的知识结构,我画了一张流程图。它展示了从三相交流输入到dq轴直流控制的完整链路。
这张图把整个流程串起来了。从三相电流采样开始,经过Clark变换得到αβ轴分量,再经过Park变换得到dq轴直流量。然后你在dq轴下设计PI控制器,输出dq轴电压,再经过逆Park变换和SVPWM,生成六路PWM波驱动逆变器。嗯,这就是矢量控制的完整链路。
1.5 本章小结
这一章我们回顾了PMSM的基础知识。工作原理上,记住转子永磁体跟着定子旋转磁场跑。数学模型虽然复杂,但通过坐标变换可以大大简化。Clark变换把三相变两相,Park变换把交流变直流。有了dq轴下的直流量,我们就可以用经典的PI控制来调节电流和转矩了。
我个人习惯,在开始写代码之前,一定先把坐标变换的数学推导手算一遍。别嫌麻烦,这一步能帮你发现很多隐藏问题。比如角度符号搞反了,或者变换系数用错了,都会导致电机飞车。
下一章,我们会深入DSP的硬件架构,看看怎么用C2000的PWM模块和ADC模块来实现这些算法。到时候我会分享一些寄存器配置的实战技巧,保证让你少走弯路。