4、数学预备知识(下):空间向量、向量点积与叉积、旋转矩阵、坐标系概念
好,咱们接着聊数学。上一节我们把三角函数和复数撸了一遍,这一节要啃的骨头更硬——空间向量、点积叉积、旋转矩阵,还有坐标系。这些东西看着抽象,但说白了,FOC 的整个灵魂就建立在这些数学工具上。你想想看,电机转子在转,电流在变,怎么描述这个旋转?怎么把三相电流映射到旋转的坐标系里?答案全在这了。
4.1 空间向量:从二维到三维的飞跃
咱们先从空间向量说起。二维向量大家熟,一个 (x, y) 就搞定。但到了 FOC 里,我们面对的是三相系统,天然就是三维的。不过别慌,我们通常把它投影到二维平面来处理,这就是 Clark 变换的由来。
空间向量,说白了就是一个带方向的箭头。在三维空间里,我们用三个分量表示:v = (vx, vy, vz)。长度(模)就是 sqrt(vx² + vy² + vz²)。
核心概念:在 FOC 中,我们把三相电流 ia、ib、ic 看作一个三维空间向量,然后通过变换把它压缩到二维 α-β 平面。这个向量就叫「电流空间矢量」。
我记得刚入行那会儿,看别人代码里写 Clarke 变换,一堆矩阵乘法,完全不知道在干嘛。后来才明白,其实就是把三维向量投影到二维平面。嗯,数学这东西,一旦理解了物理意义,就简单多了。
4.2 向量点积:投影的度量
点积,也叫内积。两个向量点积的结果是一个标量:a · b = |a| |b| cosθ。θ 是两向量夹角。
点积的物理意义是什么?说白了,就是一个向量在另一个向量方向上的投影长度,再乘以另一个向量的长度。在 FOC 里,点积用来计算「有多少电流贡献到了某个方向上」。
我的经验:在调试电流环时,我经常用点积来检查电流矢量是否与反电动势矢量对齐。如果点积为负,说明电流在「帮倒忙」,产生的是制动转矩而不是驱动转矩。这个检查在无传感器 FOC 里特别有用。
点积还有一个重要性质:如果两个向量垂直,点积为 0。这个性质在坐标变换中经常用到——我们构造的变换矩阵,行与行之间是正交的,就是为了保证变换前后能量守恒。
4.3 向量叉积:转矩的数学本质
叉积就更有意思了。两个向量叉积的结果是一个向量,方向垂直于这两个向量所在的平面,大小等于 |a||b|sinθ。
你想想看,电机转矩的公式 T = kt × i,本质上就是电流矢量与磁链矢量的叉积。叉积越大,转矩越大。当电流矢量与磁链矢量垂直时,sinθ = 1,转矩最大。这就是为什么 FOC 要追求「id = 0」控制——让电流矢量始终与转子磁链垂直,获得最大转矩。
注意:叉积不满足交换律!a × b = - (b × a)。方向搞反了,转矩方向就反了。我曾经在调试一个电机驱动板时,把电流采样顺序搞反了,结果电机反转还发热。查了两天才发现是叉积方向的问题。嗯,血的教训。
4.4 旋转矩阵:让向量转起来
旋转矩阵是 FOC 里最核心的数学工具之一。一个二维旋转矩阵长这样:
R(θ) = [cosθ -sinθ]
[sinθ cosθ ]
这个矩阵的作用是什么?把一个向量绕原点逆时针旋转 θ 角度。在 FOC 里,我们用旋转矩阵来实现 Park 变换——把静止的 α-β 坐标系下的电流,变换到旋转的 d-q 坐标系下。
为什么需要这个变换?因为电机转子在转,定子电流产生的磁场也要跟着转。如果我们在旋转坐标系下看,电流就变成了直流量,用 PI 控制器就很好调了。这就是 FOC 的精髓——把交流量变成直流量来控制。
关键点:旋转矩阵是正交矩阵,它的逆矩阵等于它的转置。这意味着从 d-q 反变换回 α-β 时,只需要把矩阵转置一下就行,不需要求逆。这个性质在嵌入式实现中非常方便,省了不少计算量。
4.5 坐标系概念:静止与旋转
FOC 里涉及三个坐标系,我画个表格帮你理清楚:
| 坐标系 | 轴名称 | 特点 | 变换 |
|---|---|---|---|
| 三相静止坐标系 | a-b-c | 相差 120°,物理上就是电机三相 | Clarke 变换 → α-β |
| 两相静止坐标系 | α-β | α 与 a 轴重合,β 超前 90° | Park 变换 → d-q |
| 两相旋转坐标系 | d-q | d 轴与转子磁链对齐,q 轴超前 90° | 反 Park 变换 → α-β |
我个人习惯把这三个坐标系想象成「观察视角」:
- a-b-c 坐标系:站在电机外面看,看到的是三相交流电,正弦波在跳。
- α-β 坐标系:把三相简化成两相,但还是静止的,看到的还是交流量。
- d-q 坐标系:坐在转子上看,电流变成了直流量,好控制多了。
你想想看,如果让你设计一个控制器,你是控制一个随时间变化的正弦波容易,还是控制一个恒定值容易?答案不言而喻。FOC 就是通过坐标变换,把难搞的交流问题变成了简单的直流问题。
4.6 实战:坐标变换的数学实现
说了这么多理论,咱们来点实际的。下面是一个简化的 Clarke 和 Park 变换的 C 代码实现:
// Clarke 变换:三相 → 两相静止
void clarke_transform(float ia, float ib, float ic,
float *ialpha, float *ibeta) {
*ialpha = ia;
*ibeta = (ia + 2.0f * ib) / 1.732f; // 1.732 ≈ √3
}
// Park 变换:两相静止 → 两相旋转
void park_transform(float ialpha, float ibeta, float theta,
float *id, float *iq) {
float cos_t = cosf(theta);
float sin_t = sinf(theta);
*id = ialpha * cos_t + ibeta * sin_t;
*iq = -ialpha * sin_t + ibeta * cos_t;
}
避坑指南:我曾经在实现 Park 变换时,把 sin 和 cos 的符号搞反了。结果电机转起来电流波形乱七八糟,id 和 iq 完全不对。后来用示波器抓了 α-β 电流和角度信号,对照公式一行行查才找到问题。所以建议你写代码时,先把公式在纸上推一遍,再动手写。
4.7 小结:数学是 FOC 的骨架
这一节的内容确实有点干,但它们是 FOC 的骨架。空间向量让你理解电流的本质,点积和叉积告诉你转矩怎么来的,旋转矩阵让你能自由地在不同坐标系间切换,坐标系概念则帮你建立物理直觉。
下一节我们就要进入真正的 FOC 核心了——电流环、速度环、位置环的数学建模。到时候你会发现,今天学的这些数学工具,全都会派上用场。嗯,打好基础,后面就顺了。
公众号:蓝海资料掘金营,微信deep3321