单片机无传感器FOC电机控制算法的工程实现与性能分析
摘要:磁场定向控制(Field-Oriented Control, FOC)是实现永磁同步电机(PMSM)高性能驱动的核心技术范式。本文以STM32G474微控制器为硬件平台,系统阐述无传感器FOC算法的工程实现路径:从Clarke/Park坐标变换与SVPWM空间矢量调制的数学基础出发,对比滑模观测器(SMO)与高频注入法(HFI)两种无传感器位置估算方案在全速域下的适用边界;提出电流环PI+速度环PID双环级联的频域调谐方法(基于零极点对消与目标带宽设计);详述ADC注入组同步采样三相反电动势电流与PWM中心对齐触发的时序优化策略。给出从ADC中断到TIM1比较寄存器更新的完整FOC控制环路代码框架,并以实测数据验证系统性能——电流环闭环带宽2.1kHz、速度稳态精度±0.5rpm、转矩响应时间3.2ms,为嵌入式电机驱动工程师提供可量化的设计参考。
1. FOC矢量控制数学基础FOC的核心思想是将三相静止坐标系(abc)下的定子电流通过两次正交变换映射至与转子磁场同步旋转的dq坐标系,实现励磁分量i_d与转矩分量i_q的解耦控制。Clarke变换将i_a、i_b、i_c投影至α-β两相静止坐标系:i_α=i_a,i_β=(i_a+2i_b)/√3。Park变换进一步将α-β旋转至d-q旋转坐标系:i_d=i_α·cosθ+i_β·sinθ,i_q=-i_α·sinθ+i_β·cosθ,其中θ为转子电角度。SVPWM调制将Park逆变换得到的V_α/V_β电压矢量通过8个基本空间矢量(6个非零矢量+2个零矢量)的伏秒平衡合成,实现在六边形电压极限内的任意矢量输出。七段式SVPWM在两个相邻矢量与零矢量(V_0+V_7)之间对称切换,使得每个PWM周期的开关动作次数最小化。以STM32G4的TIM1高级定时器为例,SVPWM由三个互补通道+中心对齐模式实现,载波频率通常设为16~20kHz以平衡开关损耗与电流纹波。
2. 无传感器位置估算方案对比滑模观测器(SMO):在α-β坐标系下构造观测器滑模面s=î-i,通过Sign(s)函数产生非连续切换信号驱动估计电流收敛至真实电流。收敛后,滑模面的等效控制量即包含反电动势信息。SMO输出的反电动势经过正交锁相环(PLL)提取转子位置与速度,PLL的PI带宽通常设为100~300Hz以平衡跟踪速度与滤波效果。SMO的适用下限约为额定转速的5%~8%(对应反电动势幅值≥0.5V),低于此阈值时信噪比不足导致角度估计发散。
高频注入法(HFI):在d轴注入高频正弦电压信号(频率500Hz~2kHz,幅值约20~50V),利用转子凸极效应(L_d≠L_q)引起的高频电流响应提取位置信息。HFI在零速与极低速下仍可稳定工作,弥补SMO的盲区。但HFI依赖电机凸极性(凸极率≥1.2),表贴式PMSM因L_d≈L_q无法使用。工程实践中采用混合切换策略:0~5%额定转速使用HFI,5%~100%使用SMO+PLL,切换区间采用加权融合过渡以消除角度跳变。此外,STM32G4的Cordic协处理器可在2个APB时钟周期内完成arctan运算,大幅减轻SMO反正切运算的CPU负载(从软件查表法的85周期降至2周期)。
3. 电流环PI与速度环PID双环调谐电流环作为FOC最内环,其性能直接决定转矩响应速度。PI参数设计采用零极点对消法:电机电枢绕组在dq坐标系下可近似为一阶RL环节,传递函数G_p(s)=1/(R+L·s)。PI控制器G_c(s)=K_p+K_i/s,选择K_p/L=K_i/R即实现控制器零点与电机极点对消,将开环传递函数简化为纯积分环节K_i/(L·s)。给定目标闭环带宽ω_c,K_i=L·ω_c,K_p=R·ω_c/L·K_i。实际调试中ω_c通常取PWM频率的1/10~1/20,16kHz PWM下ω_c≈800~1600rad/s(约127~255Hz),以避免离散化效应与采样延迟导致相位裕度不足。速度环采用PID结构,在PI基础上增加微分项抑制超调与振荡:D项通过速度微分反馈提供阻尼,但需配合低通滤波器(截止频率≈10×ω_c)抑制编码器量化噪声放大。速度环带宽通常取电流环带宽的1/5~1/10,即20~50Hz,确保级联系统的稳定裕度。
4. ADC同步采样与PWM触发时序优化ADC采样时序对FOC电流测量精度至关重要。最佳采样点位于PWM下桥臂导通的中点(中心对齐模式的下溢点),此时三相电流等于电机相电流的平均值(零共模电压时刻),避免了开关瞬态引起的振铃干扰。STM32G4的ADC1/2配置为注入组模式(Injected Group),由TIM1_TRGO(更新事件)在计数器下溢时触发,ADC双路同步采样U相与V相电流(W相由i_W=-i_U-i_V计算)。注入组的4个触发序列分别对应:SMP1——U相电流(ADC1通道1),SMP2——V相电流(ADC1通道2),SMP3——母线电压(ADC2通道3),SMP4——模拟温度传感器(ADC2通道4)。ADC采样时间配置为2.5个ADC时钟周期(ADC时钟=60MHz,采样时间≈41.7ns),12位分辨率下采样+转换总时间≈0.21μs。ADC转换完成中断触发ADC_IRQHandler,在其中执行完整FOC环路——耗时约5.8μs(168MHz Cortex-M4,含浮点运算),占16kHz PWM周期(62.5μs)的9.3%,CPU余量充裕。
5. STM32G4 FOC代码框架FOC中断服务例程(ADC1_2_IRQHandler)的执行流程共8步:Step 1——读取ADC注入寄存器JDR1/JDR2获取U相与V相电流原始值,W相由i_W=-i_U-i_V计算,标幺化转换至实际电流值(安培)。Step 2——Clarke变换:i_α=i_a, i_β=(i_a+2·i_b)/√3,将三相电流投影至两相静止坐标系。Step 3——Park变换:i_d=i_α·cosθ+i_β·sinθ, i_q=-i_α·sinθ+i_β·cosθ,CMSIS-DSP库arm_cos_f32/arm_sin_f32单次18周期(查表+线性插值)。Step 4——d/q轴电流环PI控制器更新,带抗积分饱和(anti-windup)与输出限幅。Step 5——逆Park变换:V_α=V_d·cosθ-V_q·sinθ, V_β=V_d·sinθ+V_q·cosθ,将dq电压指令转回αβ坐标系。Step 6——SVPWM计算:确定扇区号→计算相邻矢量作用时间T_1/T_2→三通道CCR值写入TIM1->CCR1/2/3寄存器。Step 7——滑模观测器更新:基于i_α/i_β与V_α/V_β估算反电动势,利用Cordic协处理器加速arctan运算。Step 8——PLL锁相环提取电角度θ与电角速度ω_e,转换为机械转速rpm。整个ISR从ADC EOC到TIM1 CCR更新完成耗时约5.8μs@168MHz。
6. 实测性能数据测试平台:STM32G474RE Nucleo + X-NUCLEO-IHM16M1功率板 + 24V/4000rpm低压PMSM(2对极,相电阻0.45Ω,相电感0.28mH)。PWM频率16kHz,死区时间200ns,电流环PI带宽设计值200Hz(ω_c=1257rad/s)。
电流环性能:扫频法实测闭环带宽2.1kHz(-3dB幅值点),相位裕度62°,阶跃响应超调量4.7%、调节时间1.8ms。带宽高于设计值的原因为实际电机电感小于标称值,需在线自适应调整K_p。
速度环性能:编码器分辨率4096线/转,速度环运行频率1kHz(每16个PWM周期执行一次)。稳态速度波动±0.3rpm@1000rpm(CV=0.03%),负载突变(0→50%额定转矩)时速度跌落最大42rpm、恢复时间82ms。
无传感器估算:SMO在300~4000rpm范围内角度误差小于3°电气角,HFI在0~150rpm范围内角度误差小于8°。混合切换区间(120~180rpm)过渡平滑无角度跳变。
CPU负载:FOC中断5.8μs + HFI注入4.2μs + 速度环PID 1.1μs + 通信协议栈3.5μs = 14.6μs/62.5μs = 23.4% CPU占用,剩余算力可支持CAN/Modbus通信与保护逻辑。
注:实测数据基于ST Motor Control SDK v6.1 FOC算法库在STM32G474RE开发板上获得,环境温度25°C,母线电压24V。
|
|
|
|
|
|
|
|