☰
高频方波注入实现无感FOC零速起步:原理、实现与调参全解析
2026/10/16 7:00:09 网站建设 项目流程

做无感FOC的人,十有八九都会被“零速起步”这件事折腾过。静止状态下反电动势为零,位置信息完全消失,传统基于反电动势的观测器在这里集体失效。霍尔传感器能解决问题,但多了三个器件和一组线束,生产环节还得多几道工序;编码器精度高,但成本和安装条件是另一回事。于是高频信号注入(HFI,High-Frequency Injection)就成了很多量产方案的选择。

这篇文章里的电机是某项目里的内置式永磁同步电机(IPMSM),主控芯片是STM32F405,逆变器是常规的三相半桥,母线电压48V,整体方案属于车载和机器人传动里很常见的一种形态。我现在把整套高频方波注入方案从原理、实现到调参的完整过程整理出来,重点讲清楚两件事:一是为什么方波注入能拿到转子位置,二是STM32F405上从理论到工程落地中间那些文档里查不到的坑。

无论你是刚接触无感FOC的嵌入式工程师,还是正在给量产项目做零速性能优化,这篇文章都值得花半小时细读。代码级细节我会保留关键算法片段,但更多篇幅留给原理和排错链路,因为后者才是真正决定项目成败的部分。

1. 为什么零低速下无感FOC这么难:高频注入的用武之地

1.1 反电动势法在零低速下的失效边界

永磁同步电机的反电动势幅值与转速成正比,公式很简单:转速为零时,反电动势也为零。也就是说,堵转和接近堵转的工况下,我们用来提取位置的“信号源”消失了。这时候如果把基于反电动势的滑模观测器或磁链观测器强行跑起来,输入的信噪比会急剧恶化,位置输出基本是在白噪声里抖。

有人会想:那转速到1%额定、2%额定的时候总行了吧?实际做下来,问题比想象中严重得多。低速重载时定子电流很大,电流采样误差、死区效应、逆变器非线性产生的谐波几乎完全淹没了反电动势分量。我实测过一个48V系统、额定转速3000rpm的电机,在转速低于150rpm时,反电动势只有标称值的5%,而这个区间里谐波失真往往超过10%。用这种信号做位置闭环,结果就是低速力矩忽大忽小,甚至反转。

所以在工程上,我们通常把反电动势类方法的可用下限画在额定转速的5%~10%附近。再低就要靠别的信息源,这也是高频注入存在的根本理由。

1.2 电机凸极率:高频注入能够成立的基础

高频注入能站住脚,依靠的不是反电动势,而是电机的凸极效应。内置式永磁同步电机因为磁路结构不对称,直轴电感和交轴电感不相等(Ld≠Lq),定子绕组在不同转子角度下呈现出来的高频阻抗也就不一样。转子位置信息就以“高频阻抗随角度变化”的形式,藏在了电流响应里。

有人会问:表贴式永磁电机(SPMSM)的Ld和Lq几乎相等,是不是就不能用高频注入?实测发现能用,但信号弱不少。表贴电机在零速附近因为磁路饱和,直轴电感会略小于交轴电感,产生一个“差动电感”。这个凸极率可能只有5%~10%,而IPMSM一般能做到20%以上。凸极率越低,提取位置误差的信噪比越差,这直接决定了注入电压幅值和滤波器参数的取舍。

换句话说,高频注入不是“发射位置信号”,而是“主动给电机施加一个激励,再测量它表现出的电感不对称性”。这是理解后续所有解调逻辑的基础。

1.3 方波注入 vs 旋转正弦注入:为什么我选方波

高频注入有两个主要流派:旋转正弦注入和方波注入。很多教材先讲旋转正弦,因为数学上更优雅,但工程上我最终选了方波。

旋转正弦注入是在估计坐标系里施加一个幅值恒定、相位连续旋转的高频电压矢量,然后通过带通滤波提取高频电流,再做两次坐标变换,得到位置误差。它的主要问题是:位置信息的提取需要对电流幅值进行包络检测,这个过程需要多个注入周期累加,能把位置环路带宽压得很低。实测旋转正弦方案的位置环带宽通常只能做到注入频率的5%~10%,动态响应慢,对负载突变比较吃力。

方波注入的思路完全不同:在估计的d轴方向,直接施加一个正负交替的方波电压。因为是“定轴交替注入”,相邻两个半周期的电流差值直接就能构造出位置误差信号,不需要包络检测和长时间积分。每两个控制周期就能更新一次位置误差,位置环带宽可以做到注入频率的1/5甚至更高。

具体到数字控制实现:方波注入极其契合定时器中断驱动FOC的架构——在一个控制周期里注入正电压,下一个周期注入负电压,采完电流后相减就算完事。采样逻辑清晰,计算量小,ST芯片的ADC定时触发能轻松对齐。代价是高频噪声频谱比正弦宽,谐波分量更多,但这个可以通过同步采样和滤波器设计化解。

维度旋转正弦注入高频方波注入
位置误差提取速度需多个周期包络检测每两个控制周期一次
位置环带宽潜力较低较高
数字实现复杂度中等低
对凸极率的要求高中高,但解调更直接
高频噪声分布集中在单频点频点及谐波较宽

2. 高频方波注入的核心原理与信号解调链路

2.1 模型简化:高频激励下只剩电感说了算

完整的高频电压方程包含电阻压降、反电动势、电感压降几部分。但注入频率通常选在1kHz~10kHz,远高于电机的基频,电感阻抗占据绝对主导。以这个量级的高频电流来看,电阻压降和反电动势项都可以忽略,模型就能简化成:

udq ≈ Ldq · di/dt

这样做的物理含义是:在高频激励作用下,电机的电流响应主要由定子电感决定。而电感矩阵里恰好包含了转子位置信息。我们需要做的就是测量电流对注入电压的“响应差异”,反推出角度。

2.2 位置误差如何映射到电流响应

核心推导如下。假设真实转子角为θ,我们估计的角为θ̂,两者夹角为Δθ = θ̂ - θ。在估计的d轴方向施加高频方波电压:

u_d̂_high = V_inj · sign(sin(2πf_inj·t))

经过坐标变换后,高频电流在估计d/q轴上的分量为:

i_d̂_high ≈ (V_inj·T/2) · [Σcos(2Δθ)]
i_q̂_high ≈ (V_inj·T/2) · [Σsin(2Δθ)]

这里T是方波半周期对应的积分时间,Σ是一个与电感矩阵相关的系数。当Δθ很小时,q轴的高频电流响应近似与sin(2Δθ)成正比。换句话说,q轴高频电流的幅值本身就是位置误差信号,而且直接可用,不需要再做包络检波。

2.3 从这个误差信号到位置收敛:怎么组成闭环

得到了q轴高频电流响应以后,就把它当作输入误差信号,通过锁相环(PLL)或者积分器来修正估计角度。

最简单的做法是纯积分器:误差信号乘以增益后直接对频率积分。优点是不用调整参数就能跑起来,缺点是积分器零极点会导致位置闭环响应慢,而且对误差信号的直流偏置非常敏感。实际项目几乎都会选二阶PLL,结构是典型的PID结构加积分环节,PLL带宽要跟注入频率拉开差距,经验值取注入频率的1/5~1/10。我用的8kHz注入,位置环PLL带宽定在600Hz左右,理论滞后和实际滤波器相位基本能匹配。

另外需要明确的是,这里解调出来的角度是“电角度”。如果电机极对数是4,那么转子机械角度是电角度除以4。多极对数没有让高频注入变复杂,只是坐标变换次数多一点而已。

2.4 固定角度偏差补偿:所有量产方案都绕不开的一件事

实际系统里,逆变器死区、电流采样延迟、控制周期离散化、PWM更新延迟都会给解调结果引入固定的角度偏置。这部分偏置是系统性的,不随转速变化,但随电流方向略有不同。我采用的办法是离线标定两张偏置表:正转工况一张,反转工况一张,每个电角度周期采12个点。在线运行时根据电流符号查表补偿,实测可以把残留偏差控制在1.5°电角度以内。

这个标定过程看起来不起眼,却是高频注入方案量产落地时必须做的一步。省了这个环节,低速下的力矩精度和噪声性能都会有明显折扣。

3. STM32F405上的工程实现:从理论到定时器中断

3.1 硬件平台与电流采样时序设计

平台用的是STM32F405,主频168MHz,带FPU和DSP指令集,做常规FOC是高配。PWM由TIM1驱动,中央对齐模式,载频16kHz。电流采样用两个分流电阻加运放,ADC1同时采样两相电流,第三相由基尔霍夫电流定律计算。

高频注入方案对采样时序的要求比普通FOC严格得多。原因是注入方波引起的电流纹波比较大,采样点如果落在电流前沿或后沿,得到的数值会带上很大的瞬态分量,解调误差会被放大。我的做法是把ADC触发点设置在PWM中央对齐的中点附近,也就是方波电压稳态区间的中间时刻。这个时刻电流纹波的斜率最平缓,采样值最能代表这个半周期的平均电流。

系统里的PWM周期是62.5us(16kHz),注入方波每两个PWM周期翻转一次极性,所以注入频率是8kHz。ADC采样在每次PWM中点触发,对应的采样序列为:正半周期采样、负半周期采样、正半周期采样……相邻两个采样值做差,正好提取高频响应。

3.2 高频注入挂在FOC的哪个环节

很多初接触高频注入的人会以为要额外加一个独立模块,其实不需要。整个注入过程就是给现有FOC的电压给定上加一个偏置。

具体顺序是这样的:在每个周期,根据注入极性变量flag_inj(取值为+1或-1),在ud_ref上叠加V_inj·flag_inj,然后照常做SVPWM和驱动输出。与此同时,把flag_inj记录到当前控制周期的上下文里,供下一个周期的解调使用。整个注入环节增加的运算量非常小,只是一个乘法和一个加法。

注意一点:注入极性变化时刻必须跟PWM周期边界严格对齐,否则会产生额外的相位误差。实现上只要在PWM更新中断里统一处理,自然就对齐了。

3.3 解调计算的流水线设计

FOC控制中断里每一步的执行顺序对稳定性影响很大。我最终采用的顺序是:

  1. ADC电流采样完成,进入中断;
  2. 读取三相电流,做Clarke变换和Park变换(坐标角度用当前估计角θ̂);
  3. 高频注入解调:用本次采样值减上一次采样值,得到Δθ相关的误差量;
  4. 两级均值滤波,把滤波结果送入PLL,更新估计角θ̂和估计转速ω̂;
  5. 用更新后的θ̂做电流环PI控制,输出ud_ref、uq_ref;
  6. 叠加上注入电压,做SVPWM,写TIM1比较寄存器。

把高频注入解调放在电流环PI之前,是为了让位置信息和电流内环使用同一时刻的dq轴电流,避免延迟错位。否则位置环更新的角度领先或滞后电流环一拍,轻则影响动态,重则低速振荡。

整个FOC中断加高频注入解调的耗时,在168MHz主频下实测是12us~15us,远小于62.5us的PWM周期,留下充裕的负载余量。STM32F405的浮点单元在这里价值明显,全部用单精度浮点运算没问题,不需要做定点化。

3.4 高频注入参数初始表

参数初始值最终值调整依据
PWM载频16kHz16kHz定死
注入频率8kHz8kHz两个PWM周期一次极性翻转
初始注入电压幅值15V12V见阶段二排查过程
位置PLL带宽600Hz600Hz注入频率的7.5%,留裕量
低速切换点5%额定转速5%额定转速与反电动势观测器无扰过渡
ADC采样点PWM中点PWM中点避开极性翻转瞬态

4. 调参实战:从波形乱飞到稳定闭环的完整排查链路

这一部分是最值得细读的,因为我踩过的几个坑,几乎每个在做高频注入的项目里都会遇到。

4.1 阶段一:解调信号完全被噪声淹没,电机发烫但不转

现象描述:代码逻辑检查没问题,PLL输出的估计角度却在±30°电角度之间随机抖动,电机在注入电压作用下发热明显,但转不起来。

排查链路:

第一步,先确认我的解调方向没搞反。用角度偏置强制设一个已知误差(比如让估计角比真实角大15°),看误差信号符号是否跟理论一致。结果符号正确,排除方向问题。

第二步,直接把解调输出从PLL中断里断开,接到DAC或者通过串口打印出来,观察原始波形。发现高频电流差值里叠加了一个与开关频率同步的大尖峰,尖峰幅度是有效信号的好几倍。

第三步,定位尖峰来源。用逻辑分析仪同时看PWM输出和ADC触发信号,发现ADC采样发生时刻离注入极性翻转点只差了约2us,而电流纹波在极性翻转瞬间会有明显的过冲振荡,振荡没有完全衰减就触发了采样。

第四步,修复采样点位置。把ADC采样点从PWM周期的1/2处微调到1/2往后延3us,确保落在极中性区。加上两级均值滤波后,解调信号干净了很多,电机开始能稳定转起来。

这个坑的本质是我把注入频率的周期边界和PWM的采样点混为一谈。高频方波注入确实每两个PWM周期翻转一次极性,但采样必须对齐到“电压稳态区”,而不是周期正中。

4.2 阶段二:空载能转,带载就失步

现象描述:电机空载启动没问题,但负载一上来,位置误差逐渐拉大,最终失步。当时位置误差已经从理论上的±1°放大到±8°,而且伴随明显的力矩噪声。

排查链路:

第一判断指向注入电压幅值不足。方波注入的位置误差信号幅值,跟注入电压幅值成线性关系,但电机电流中的噪声和采样噪声是固定的。注入电压太低,位置误差信号被噪声淹没,带载时因为电流波动更大,信噪比进一步恶化。

把注入电压从15V逐步调高到20V时,位置误差改善明显,但此时电机高频啸叫已经能听见,且IGBT温升变快。最终做不到“只加电压”,原因在于还要兼顾整机噪声和热约束。

接下来我在注入电压和解调增益之间做了平衡优化。把注入电流纹波的峰值设定为额定电流的5%,同时提高解调链路里的增益和滤波器阶数。实测最优注入电压落在12V附近。这里多说一句:很多人误以为注入电压越大越好,其实超过一定值后,磁路饱和会削弱凸极效应,误差信号不再线性增长,反而增加损耗。

提示:调整注入电压时不要只看能否维持位置稳定,还要看带载启动、堵转保持、动态突加负载三个工况的表现。单一工况调出来的参数,上整机通常要返工。

4.3 阶段三:正转和反转的位置偏置不对称

现象描述:位置闭环稳定后,让电机分别正转和反转低速运行,用低速下的力矩波动间接评估位置偏置。发现正转时偏置约+3°,反转时偏置约-5°,明显不对称。

排查链路:

先做固定偏置整体补偿,发现只能补偿其中一个方向,另一个方向误差依然存在。于是怀疑是逆变器死区效应在不同电流方向下的表现不一致。我们用电流极性分类统计误差数据,果然正半波和负半波的误差斜率不同。

解决办法是采用双表偏置补偿:正转一张查找表、反转一张查找表,每张表按电角度周期采12个点,在线运行时按当前转速符号选择对应表。实施之后,残留位置偏置从原来的±5°压缩到了±1.5°以内,低速力矩抖动显著下降。

这个经验对量产项目尤其重要,因为电机装配误差、霍尔替代方案的标定误差,都会叠加到这个固定偏置上。不做双表补偿,至少会有一组方向上的性能被拉低。

4.4 阶段四:从高频注入切换到反电动势观测器的瞬间抖动

现象描述:低速跑高频注入,转速超过5%额定后切换到反电动势观测器,切换瞬间电流明显震荡,转速掉了一圈又爬回来。

排查链路:

第一反应是切换时刻执行太晚或太早,导致两组位置估计的差距太大。我把两款观测器的位置输出同时发到上位机,发现它们之间存在约10°的相位差,主要集中在过渡区间。这个相位差是因为PLL的动态滞后和反电动势观测器滤波延迟不同步造成的。

解决方案是做一个基于转速的过渡机制,而不是二选一硬切。具体做法是设置过渡区间为额定转速的3%~7%,在区间内用线性权重混合两个位置输出。混合权重函数为:

当转速低于3%额定转速时,位置完全采用高频注入结果;转速超过7%额定转速后,位置完全采用反电动势观测器结果;中间段线性混合。

同时,在过渡区把位置PLL带宽从600Hz动态降低到400Hz左右,避免两个观测器的相位差在混合过程中激发振荡。实施后,切换瞬间的电流震荡基本消失,转速曲线平滑过渡。

4.5 最终参数配置总表

参数最终数值调整依据
注入电压幅值12V(对应纹波峰值约5%额定电流)信噪比和热损耗平衡
注入频率8kHzPWM载频的一半
位置PLL带宽600Hz(过渡区400Hz)受注入频率和滤波延迟约束
解调滤波器两级均值滤波+低通抑制开关噪声和谐波
固定偏置补偿双表12点查表正反转死区不对称
速度切换点3%~7%额定转速线性过渡两观测器相位差消除

5. 性能边界、工程取舍与下一步扩展

5.1 实测结果:零速起步到额定转速过渡

整套方案在48V/300W级IPMSM上跑通后,我记录了几组关键数据:

工况实测结果
零速启动带额定负载2.5s内稳定建立转速,位置误差±1.5°以内
0~150rpm低速往复位置误差最大值±2°,无明显抖动
额定转速3000rpm稳定运行位置误差±0.5°,噪声正常
突加50%额定负载阶跃位置误差瞬态峰值±4°,1s内恢复

需要说明的是,这些数据是在电机凸极率约20%的前提下取得的。换用凸极率较低的电机,位置误差通常会放大,换算下来大致是凸极率每降低一半,解调信噪比下降约6dB,位置误差小信号区间的线性度也会变差。

5.2 高频注入的天花板:不是所有场景都适合

高频注入最大的门槛不在算法,而在物理约束。第一是高频噪声,注入电流会在绕组里产生明显的电磁啸叫,如果你做的产品对静音要求高(比如家居、医疗),需要从结构和隔音层面额外投入。第二是损耗,注入电流虽小,但IGBT的开关损耗和电机的铁损都会增加,尤其是长时间堵转应用,这个热问题必须算清楚。第三是母线电压归一化,注入电压幅值是直接叠加在ud_ref上的,母线电压波动超过±15%时,位置误差信号会跟着漂移,需要在软件里用母线电压实测值对注入幅值做归一化处理。

此外,高频注入本质上依赖的是凸极性产生的电感差异,如果电机设计上凸极率偏低,或者磁路饱和严重,信号质量会急剧恶化。这类问题不是调参能解决的,需要从电机本体设计阶段就把“用于无感FOC的高频注入”作为约束条件提进去。

5.3 值得继续投入的扩展方向

这套框架跑稳之后,我还在继续探索三个方向。

第一个是堵转保位模式。高频注入在转速为零时依然有效,所以完全可以用它实现带载堵转时的高精度保位。做法是把位置环的积分作用加强,同时降低注入频率补偿范围,实测堵转力矩保持能力比纯电流环好很多。

第二个是多模式无扰切换的泛化。反电动势观测器也不一定用滑模,磁链观测器和扩展卡尔曼在过渡区的表现各有优劣。核心问题是过渡区相位对齐,我验证过只要两种观测器都跟随同一个有效位置信号,过渡参数稍微微调就能稳定工作。

第三个是注入参数的在线自整定。我试过基于电流响应幅值在线识别凸极率,然后自动调整注入电压幅值,让系统自动匹配不同温度、不同磁链状态下的参数漂移。目前已经能跑通,但要填的细节还不少,后面有成果再单独写一篇分享。

调高频注入这半年,我最大的体会是:不要上来就把观测器结构搞得太复杂,先让解调波形符合物理直觉,再谈算法进阶。波形和数据永远是第一现场,你能把误差信号里的每一个尖峰都解释清楚,方案就离量产不远了。希望这篇文章能帮你少走几个我走过的弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询