1. 电机控制基础回顾:直流电机数学模型、交流电机数学模型、坐标变换原理(Clark/Park变换)
各位同学,咱们这门课叫《电机模型失配与鲁棒控制》,但一上来就讲鲁棒,我怕你直接懵了。所以第一章,咱们先把老本行——电机模型和坐标变换——彻底捋一遍。这些东西你肯定都见过,但说实话,很多工程师用了好几年,细节上还是模棱两可。
我个人习惯是:不管多复杂的控制算法,先把被控对象的数学模型写清楚。模型不准,后面调参就是瞎忙活。咱们今天就从直流电机开始,一步步推到交流电机和坐标变换。
1.1 直流电机数学模型
直流电机虽然现在用得少了,但它是理解所有电机控制的基础。你想想看,交流电机的矢量控制,本质上就是模仿直流电机的控制方式。
直流电机的核心方程就两个:
- 电压平衡方程:
Ua = Ra * Ia + La * dIa/dt + E - 反电动势方程:
E = Ke * ω - 转矩方程:
Te = Kt * Ia - 机械运动方程:
Te - TL = J * dω/dt + B * ω
这里我特别想强调一点:La(电枢电感)这个参数,很多人在做低速控制时直接忽略它。我在项目中遇到过一台直流伺服,低速抖动特别厉害,查了半天发现就是La没建模进去,导致电流环带宽估算偏差了30%。
把上面两个方程拉普拉斯变换一下,就能得到直流电机的传递函数:
G(s) = ω(s) / Ua(s) = Kt / [(Ra + La*s) * (J*s + B) + Kt * Ke]
这个模型看着简单,但它是后面所有复杂模型的基础。说白了,电机控制就是控制这个传递函数的输入输出关系。
1.2 交流电机数学模型
交流电机比直流电机麻烦多了。为什么?因为它的磁场和电流是耦合的,而且转子位置还在变。咱们以永磁同步电机(PMSM)为例,它的数学模型在三相静止坐标系(ABC)下长这样:
电压方程:
[Ua] [Rs 0 0 ] [Ia] [Laa Lab Lac] [Ia] [ψf * cos(θe)]
[Ub] = [0 Rs 0 ] [Ib] + d/dt [Lba Lbb Lbc] [Ib] + d/dt [ψf * cos(θe - 2π/3)]
[Uc] [0 0 Rs] [Ic] [Lca Lcb Lcc] [Ic] [ψf * cos(θe + 2π/3)]
看着就头疼对吧?而且电感矩阵Laa、Lab这些参数都是随转子位置变化的。你想想看,如果直接用这个模型做控制,每个控制周期都要重新计算电感矩阵,计算量太大了。
1.3 坐标变换原理
坐标变换的目的就一个:把时变的、耦合的交流电机模型,变成时不变的、解耦的直流电机模型。说白了,就是换个角度看问题。
1.3.1 Clark变换(3相 → 2相静止)
Clark变换把ABC三相电流投影到αβ两相静止坐标系上。公式很简单:
[Iα] [1 -1/2 -1/2 ] [Ia]
[Iβ] = [0 √3/2 -√3/2] [Ib]
[I0] [1/2 1/2 1/2 ] [Ic]
这里I0是零序分量,对于星形连接且无中线的电机,Ia + Ib + Ic = 0,所以I0 = 0。
Clark变换之后,模型从三相变成了两相,但依然是交流量(正弦波)。
1.3.2 Park变换(2相静止 → 2相旋转)
Park变换才是真正的灵魂。它把αβ坐标系旋转到与转子磁场同步的dq坐标系上:
[Id] [cos(θe) sin(θe)] [Iα]
[Iq] = [-sin(θe) cos(θe)] [Iβ]
θe是转子电角度。经过Park变换后,Id和Iq变成了直流量。这时候,交流电机的模型就变成了:
Ud = Rs * Id + Ld * dId/dt - ωe * Lq * Iq
Uq = Rs * Iq + Lq * dIq/dt + ωe * (Ld * Id + ψf)
Te = 1.5 * p * [ψf * Iq + (Ld - Lq) * Id * Iq]
你看,是不是跟直流电机的形式很像了?Ud控制Id(励磁),Uq控制Iq(转矩),两者解耦了。
下面这张图展示了从三相交流到两相旋转坐标系的完整变换流程:
1.4 坐标变换在数字控制中的实现
在实际的DSP或MCU代码里,坐标变换就是几个乘加运算。我贴一段我常用的C代码片段,注意看角度处理:
// Clark变换:三相电流 → αβ轴
void clark_transform(float ia, float ib, float ic, float *i_alpha, float *i_beta) {
*i_alpha = ia;
*i_beta = (ia + 2.0f * ib) / 1.7320508f; // 1/√3 的近似
// 注意:这里利用了 ia+ib+ic=0 简化了计算
}
// Park变换:αβ轴 → dq轴
void park_transform(float i_alpha, float i_beta, float theta, float *i_d, float *i_q) {
float sin_t = sinf(theta);
float cos_t = cosf(theta);
*i_d = i_alpha * cos_t + i_beta * sin_t;
*i_q = -i_alpha * sin_t + i_beta * cos_t;
}
// 反Park变换:dq轴 → αβ轴
void inv_park_transform(float v_d, float v_q, float theta, float *v_alpha, float *v_beta) {
float sin_t = sinf(theta);
float cos_t = cosf(theta);
*v_alpha = v_d * cos_t - v_q * sin_t;
*v_beta = v_d * sin_t + v_q * cos_t;
}
1.5 本章小结
咱们这一章把电机控制最基础的东西过了一遍:
- 直流电机:模型简单,Id和Iq天然解耦,是交流电机控制的理想目标
- 交流电机:三相模型复杂,时变耦合,没法直接用
- Clark变换:把三相变两相,减少变量
- Park变换:把交流变直流,实现解耦
这些内容看起来基础,但后面讲模型失配的时候,你会发现——坐标变换中的角度误差、参数偏差,正是模型失配的主要来源之一。所以,别小看这些公式,它们是你理解鲁棒控制的基石。