📖 第 27 章:FOC(Field-Oriented Control)

5次阅读
没有评论
这一章在干嘛?

全书压轴。磁场定向控制(FOC)通过 Clarke/Park 坐标变换把三相交流量变成两个直流量 $i_d, i_q$ 分别控制励磁与转矩,再经 SVPWM 调制成连续旋转的电压矢量——转矩平稳、效率高、噪声小。最后用 ST MCSDK 跑通一个真实工程。

27.1 FOC 全景框图

27.2 Clarke 与 Park 变换

27.3 SVPWM:用 8 个开关状态拼出任意矢量

27.4 转子位置与硬件平台

27.5 MCSDK 实战与例程解析

27.1 FOC 全景框图

FOC(field-oriented control,磁场定向控制/矢量控制)是 BLDC 与 PMSM 高效控制的最佳选择:转矩平稳、效率高、噪声小、动态响应快,代价是硬件成本高、对 MCU 要求高、算法难。

📖 第 27 章:FOC(Field-Oriented Control)
原书图 27.1.1.1:电流闭环控制 FOC 框图:八步循环

电流环每个 PWM 周期执行八步:

步 操作 产物
① 采样三相电流 $i_a, i_b, i_c$
② Clarke 变换(三相静止 → 两相静止) $i_alpha, i_beta$
③ Park 变换(静止 → 随转子旋转) $i_q, i_d$(直流量!)
④ 与给定 $i_{q_ref}, i_{d_ref}$ 求误差 两个误差量
⑤ 两个 PI 控制器 $V_q, V_d$
⑥ 反 Park 变换(回静止系) $V_alpha, V_beta$
⑦ SVPWM 调制 三半桥开关状态
⑧ 循环 ——

📖 第 27 章:FOC(Field-Oriented Control)
原书图 27.1.3.1:Iq、Id 的含义:Iq 对应转矩,Id 对应励磁

📖 第 27 章:FOC(Field-Oriented Control)
原书图 27.1.3.2:FOC 的目的:Iq 按需控制、Id 控制为 0

FOC 的目的:

$I_q$(交轴)按需控制转矩、$I_d$(直轴)控制为 0——id=0 是表贴式电机最常用策略(d 轴电流不产生转矩只发热)。其他策略还有 MTPA(最大转矩电流比)与弱磁控制(超额定转速时减小 id 削弱反电动势以继续提速)。

27.2 Clarke 与 Park 变换

Clarke 变换:三相静止系(3 个互差 120° 的正弦量)→ 两相静止系,磁场等效、恒幅值不变(系数 2/3):

📖 第 27 章:FOC(Field-Oriented Control)
原书图 27.1.2.1.2:Clarke 变换:三相坐标系到两相静止坐标系

📖 第 27 章:FOC(Field-Oriented Control)
原书图 27.1.2.1.3:Clarke 变换前后的波形:仍是正弦

$$begin{bmatrix} i_alpha i_beta end{bmatrix} = frac{2}{3}begin{bmatrix} 1 & -tfrac{1}{2} & -tfrac{1}{2} 0 & tfrac{sqrt{3}}{2} & -tfrac{sqrt{3}}{2} end{bmatrix}begin{bmatrix} i_A i_B i_C end{bmatrix} xrightarrow{ i_A+i_B+i_C=0 } i_alpha = i_A, i_beta = frac{i_A + 2 i_B}{sqrt{3}}$$

变换后仍是正弦(非线性),没法用 PID 直接控——于是Park 变换把坐标系旋到随转子转动(θ 为转子电角度,d 轴与转子磁场重合叫直轴,q 轴垂直叫交轴):

📖 第 27 章:FOC(Field-Oriented Control)
原书图 27.1.2.2.1:Park 变换与 d-q 轴示意图

📖 第 27 章:FOC(Field-Oriented Control)
原书图 27.1.2.2.3:Park 变换前后波形:正弦变成直流量

$$begin{bmatrix} i_d i_q end{bmatrix} = begin{bmatrix} costheta & sintheta -sintheta & costheta end{bmatrix}begin{bmatrix} i_alpha i_beta end{bmatrix}$$

匀速旋转向量在 d-q 系下变成直流量——两个控制量被线性化,PI 闪亮登场。而 SVPWM 只接受静止 α-β 系输入,所以 PI 输出 $V_d, V_q$ 还要经反 Park 变换变回去:

$$begin{bmatrix} U_alpha U_beta end{bmatrix} = begin{bmatrix} costheta & -sintheta sintheta & costheta end{bmatrix}begin{bmatrix} U_d U_q end{bmatrix}$$

27.3 SVPWM:用 8 个开关状态拼出任意矢量

逆变器只有 8 种开关状态:6 个非零矢量 U1(001)~U6(110)(幅值均为 $frac{2}{3}U_{dc}$)+ 2 个零矢量 U0(000)、U7(111)。它们把 360° 分成 6 个 60° 扇区,每个扇区内的目标矢量用相邻两个非零矢量 + 零矢量按伏秒平衡合成:

📖 第 27 章:FOC(Field-Oriented Control)
原书图 27.1.4.1.1:三相绕组示意图

📖 第 27 章:FOC(Field-Oriented Control)
原书图 27.1.4.1.2:U4(100) 导通情况

📖 第 27 章:FOC(Field-Oriented Control)
原书图 27.1.4.1.4:矢量扇区

$$U_{ref} T_s = U_x T_x + U_y T_y + U_0 T_0$$

第一扇区的作用时间:

$$T_4 = frac{sqrt{3} T_s}{U_{dc}}Big(frac{sqrt{3} U_alpha}{2} – frac{U_beta}{2}Big) ,qquad T_6 = frac{sqrt{3} U_beta T_s}{U_{dc}} ,qquad T_7 = T_0 = frac{T_s – T_4 – T_6}{2}$$

7 段式分配:每次切换只改变一相开关状态、零矢量对半分配、PWM 对称——扇区 1 的顺序为 U0→U4→U6→U7→U6→U4→U0。

📖 第 27 章:FOC(Field-Oriented Control)
原书图 27.1.4.1.5:第一扇区

📖 第 27 章:FOC(Field-Oriented Control)
原书图 27.1.4.1.6:扇区 1 通电顺序(7 段式)

扇区判断用三个量的符号组合:$U_1 = U_beta$、$U_2 = frac{sqrt{3}}{2}U_alpha – frac{U_beta}{2}$、$U_3 = -frac{sqrt{3}}{2}U_alpha – frac{U_beta}{2}$。最大不失真矢量是六边形的内切圆,幅值 $frac{sqrt{3}}{3}U_{dc}$——比 SPWM 的 $frac{1}{2}U_{dc}$ 高出 15.47%,且谐波更小、开关损耗更低。

📖 第 27 章:FOC(Field-Oriented Control)
原书图 27.1.4.1.8:矢量边界:最大不失真范围为六边形内切圆

27.4 转子位置与硬件平台

转子位置(电角度 θ)从哪来?① 霍尔(60° 一格,粗糙);② 编码器(精确,但每次上电需校准对齐——通小电流把转子吸到对齐点并置零);③ 都没有时用观测器估算(滑模观测器、龙伯格观测器、高频注入法)。

硬件仍用 ATK-PD6010B 驱动板(含电流检测、过零检测、传感器反馈、反电动势检测、刹车单元);PMSM 传感器为 DB15 接口需转接板。电机参数对比:

参数 BLDC PMSM
磁极 4 极(2 对极) 8 极(4 对极)
额定 24V / 3000RPM / 6.6A 24V / 3000RPM / 4A
反电势 6.6V/kRPM 4.3V/kRPM
线电阻 / 电感 0.4Ω / 0.8mH 1.02Ω / 0.59mH
传感器 霍尔 120° 1000 线编码器 + 霍尔

27.5 MCSDK 实战与例程解析

开发工具 X-CUBE-MCSDK 5.4.4(FUL 完整源码版)+ MotorControlWorkbench + Motor Profiler,依赖 Java 与 STM32CubeMX 5.5.0,安装路径不能含中文。Workbench 配置要点:应用类型选「通用」;MCU 改 STM32F407IG;按手册填电机参数;传感器选霍尔或编码器;MOS 高电平有效;电流传感器按 0.02Ω 采样电阻、差分放大 6 倍设置;速度模式、PWM 16kHz;数字 IO:PWM=定时器 1、霍尔=定时器 5、调试串口=串口 1。

📖 第 27 章:FOC(Field-Oriented Control)
原书图 27.3.1:X-CUBE-MCSDK 组件

必做一步:

生成工程后必须在 CubeMX 中把
SHUTDOWN(PF10)配置为输出且默认拉高
——不然半桥使能无效、电机纹丝不动!然后 UPDATE 工程、MDK 编译下载。

例程结构(foc_pmsm_m1_encoder_os,FreeRTOS):两个任务——中频任务(每 500µs 调 MC_RunMotorControlTasks → 状态机 ICLWAIT/IDLE/ALIGN_OFFSET_CALIB…编码器对齐完成后自动启动)与安全任务(高优先级保护)。中断全在 stm32f4xx_mc_it.c:TIM1 更新中断触发 ADC 注入通道在 PWM 周期中点采样两相电流,ADC 中断里执行 FOC 主体:

/* FOC 电流环主体:Clarke -> Park -> 双 PI -> 限幅 -> 反Park -> SVPWM */
speedHandle = STC_GetSpeedSensor(pSTC[M1]);
hElAngle = SPD_GetElAngle(speedHandle);          /* 编码器获取转子电角度 */
PWMC_GetPhaseCurrents(pwmcHandle[M1], &Iab);     /* ADC 注入采样得 ia/ib */
Ialphabeta = MCM_Clarke(Iab);                    /* Clarke: abc -> αβ */
Iqd = MCM_Park(Ialphabeta, hElAngle);            /* Park: αβ -> dq */
Vqd.q = PI_Controller(pPIDIq[M1],                /* q 轴 PI: 转矩环 */
        (int32_t)(FOCVars[M1].Iqdref.q) - Iqd.q);
Vqd.d = PI_Controller(pPIDId[M1],                /* d 轴 PI: id_ref = 0 */
        (int32_t)(FOCVars[M1].Iqdref.d) - Iqd.d);
Vqd = Circle_Limitation(pCLM[M1], Vqd);          /* 电压圆限幅(89%) */
Valphabeta = MCM_Rev_Park(Vqd, hElAngle);        /* 反 Park: dq -> αβ */
hCodeError = PWMC_SetPhaseVoltage(pwmcHandle[M1], Valphabeta); /* SVPWM */
与方波的本质区别:

方波 60° 一步换相、只控占空比;FOC 每个 PWM 周期(16kHz)用 Clarke/Park 把交流量变成直流量做双 PI 闭环,再经反 Park 与 SVPWM 输出
连续可调的旋转电压矢量
——转矩无跳变。速度环输出作为 $I_{q_ref}$ 内嵌于电流环,形成「电流环(内)+ 速度环(外)」串级结构。验证:上位机监控界面点 Start Motor、拖动圆形旋钮调速,Advanced 页可在线改 PID。

1. Clarke 与 Park 变换各解决什么问题?为什么要反 Park?

Clarke 把三相静止正弦电流(3 变量)等效成两相静止 $i_alpha, i_beta$(恒幅值系数 2/3);Park 把静止系旋到随转子转动的 d-q 系,使正弦量变成直流量从而可用 PI 线性控制;SVPWM 只接受静止 α-β 坐标系输入,故 PI 输出的 $V_d, V_q$ 必须经反 Park 变回 $V_alpha, V_beta$。

2. SVPWM 如何合成任意电压矢量?最大输出受什么限制?

先由 $U_1 = U_beta$、$U_2 = tfrac{sqrt{3}}{2}U_alpha – tfrac{U_beta}{2}$、$U_3 = -tfrac{sqrt{3}}{2}U_alpha – tfrac{U_beta}{2}$ 的符号判断扇区,再用扇区相邻两个非零矢量与零矢量按伏秒平衡 $U_{ref}T_s = U_xT_x + U_yT_y + U_0T_0$ 求作用时间(7 段式零矢量对半分配);最大不失真矢量为正六边形内切圆 $tfrac{sqrt{3}}{3}U_{dc}$,比 SPWM 高约 15.47%。

3. FOC 例程中 Id 给定为何为 0?速度环在哪里实现?

表贴式 PMSM 的 d 轴电流不产生转矩只产生发热,id=0 控制效率最高;速度闭环由速度模式把目标速度经速度环 PI 转为 Iq 电流给定,电流环(d、q 两个 PI)在中断里逐周期执行,构成「速度环(外)+电流环(内)」串级结构。

正文完
 0