2026/8/12 17:28:24

第 3 章 FOC 前置数学基石:Clark 变换

第 3 章 FOC 前置数学基石:Clark 变换 前言在上一章我们已经完整实现了六步方波换相电机可以稳定转起来了。但同时也能明显感受到低速抖动、力矩脉动大高速噪音明显电流波形是方波谐波大、效率低想要解决这些问题就必须进入FOC 磁场定向控制。而 FOC 最核心、最基础、最绕不开的第一步就是坐标变换。FOC 本质上就做一件事把复杂的三相交流电机通过数学变换变成简单的直流电机来控制。整个变换链路是三相电流两相静止电流两相旋转电流本章我们只专注讲第一个变换Clark 变换Clarke Transform1. 为什么要做 Clark 变换1.1 原始问题三相系统不好控制电机三相绕组 U、V、W 在空间上互差 120°电流满足Iu​Iv​Iw​0这是一个三维耦合系统三个变量不独立直接控制非常困难无法单独控制 “力矩”无法单独控制 “磁场”调节器设计复杂无直观物理意义1.2 目标降维 解耦Clark 变换的作用只有一句话把三相静止坐标系abc等效变换为两相静止坐标系αβ用两个正交分量完整表达原来三个量的全部信息好处三维 → 二维计算量大幅下降α、β 轴正交互不干扰为下一步 Park 变换做准备最终实现 d/q 解耦控制简单理解Clark 变换就是 “三相交流电的正交降维投影”。2. 三相电流约束关系三相无刷电机为星形接法Y 型中线不引出所以Iu​Iv​Iw​0这意味着三个电流不是独立变量只需要两个电流就能完全确定第三个。这也是 Clark 变换能够成立的数学前提。实际工程中三电阻采样直接采 Iu、Iv、Iw双电阻采样采 Iu、IvIw -Iu-Iv单电阻采样通过 PWM 时序重构三相电流3. Clark 变换标准公式推导3.1 坐标定义a 轴 ≡ U 相b 轴滞后 a 轴 120°c 轴滞后 b 轴 120°α 轴与 aU轴重合β 轴超前 α 轴 90°。3.2 等幅变换3.3 为什么系数是 2/3为了保证变换前后电流幅值不变即 “等幅值变换”这样电流环 PID 参数更直观和实际物理量一致。如果用 1/√3 系数是等功率变换一般用于电力分析电机控制极少用。4. 简化形式利用 IuIvIw0因为Iw​−Iu​−Iv​代入可以把公式进一步简化只需要 Iu、Iv 两个量。代入后Iα​Iu​工程上非常常用因为很多硬件只采两相电流。5. 反 Clark 变换αβ → abc在 FOC 最后一步需要把控制电压从 αβ 变回三相所以反变换也必须掌握。6. Clark 变换代码实STM32 浮点版6.1 完整三相输入版本标准形式#include math.h /** * brief Clark 变换 (三相电流 → αβ 坐标系) * param Iu, Iv, Iw: 采样得到的三相电流 * param Ialpha, Ibeta: 输出两相静止电流 */ void Clark_Transform(float Iu, float Iv, float Iw, float *Ialpha, float *Ibeta) { // 等幅值 Clark 变换 *Ialpha (2.0f / 3.0f) * (Iu - 0.5f*Iv - 0.5f*Iw); *Ibeta (2.0f / 3.0f) * ((sqrtf(3)/2.0f)*Iv - (sqrtf(3)/2.0f)*Iw); }6.2 简化版只采两相电流实际项目 90% 都是双电阻 / 单电阻采样只给 Iu、Ivvoid Clark_Transform_Simplify(float Iu, float Iv, float *Ialpha, float *Ibeta) { // 由 Iw -Iu - Iv 推导 *Ialpha Iu; *Ibeta (Iu 2.0f * Iv) / sqrtf(3.0f); }6.3 反 Clark 变换代码void Inv_Clark(float Valpha, float Vbeta, float *Vu, float *Vv, float *Vw) { *Vu Valpha; *Vv -0.5f * Valpha (sqrtf(3)/2.0f) * Vbeta; *Vw -0.5f * Valpha - (sqrtf(3)/2.0f) * Vbeta; }7. 定点优化版本适合无 FPU 单片机如果你的芯片是 STM32F103 之类浮点运算慢可以用定点 Q 格式提前把系数存为常数// 系数放大 2^15 定点化 #define SQRT3_2 28377 // sqrt(3)/2 * 32768 #define _2_SQRT3 37837 // 2/sqrt(3) * 32768 #define _1_2 16384 // 1/2 * 32768 void Clark_Fixed(int16_t Iu, int16_t Iv, int16_t Iw, int16_t *Ialpha, int16_t *Ibeta) { *Ialpha (2*(Iu - ((Iv*_1_2)15) - ((Iw*_1_2)15))) / 3; *Ibeta ((Iv*SQRT3_2)15) - ((Iw*SQRT3_2)15); }实际工程一般都用浮点版代码清晰、调试方便F1 以上都跑得动。8. 物理意义直观理解非常重要很多人会背公式但不知道 α、β 到底代表什么Iα与 U 相同向的磁场分量Iβ垂直于 U 相的磁场分量两者合成一个在空间静止不动、但大小随时间正弦变化的磁场矢量。而 FOC 要做的就是把这个静止的矢量通过 Park 变换变成随转子一起旋转的矢量从而得到Id励磁电流磁场强弱Iq转矩电流力气大小9. 常见工程陷阱避坑指南9.1 电流采样相位反了如果采样运放是反向输出Iu、Iv、Iw 会出现负号直接导致FOC 失控电机抖动、啸叫解决在 Clark 前加一句Iu -Iu; Iv -Iv;9.2 忘记电流偏置ADC 采样一般是单极性会叠加 1.65V/2.5V 偏置必须先减去直流偏置再进入 Clark。Iu ADC_GetValue(ADC_U) - CURRENT_OFFSET; Iv ADC_GetValue(ADC_V) - CURRENT_OFFSET;9.3 坐标系定义不统一有的电机 α 轴对齐 U 相有的对齐 V 相有的电角度定义相反表现电机能转但力矩小高速抖动电流环不稳定解决整套 FOC 从 Clark → Park → SVPWM 必须使用同一套坐标系不能混用。9.4 sqrtf 与 sinf 精度问题尽量用sqrtf()、sinf()单精度浮点不要用 double速度差几倍。10. 本章总结Clark 变换是 FOC 的第一道数学大门核心要点就 4 条作用三相 abc → 两相 αβ降维、解耦公式记住等幅值变换 2/3 系数简化版只采两相电流IαIuIβ(Iu2Iv)/√3代码浮点清晰易调试定点适合低配 MCU学完 Clark你已经完成了 FOC 三分之一的工作。但 αβ 仍然是静止坐标系还做不到像直流电机一样简单控制。