1. 无感FOC低速困境与HFI的破局逻辑
1.1 为什么低速下无感FOC会“失明”
搞过永磁同步电机(PMSM)无感FOC的兄弟都清楚一个尴尬的现实:反电动势观测法在高速区跑得挺欢,一到低速甚至零速就直接“抓瞎”。原因不复杂——反电动势的幅值和转速成正比,转速越低,反电动势越小,当转速低到一定程度,反电动势信号完全被噪声、ADC量化误差和逆变器非线性淹没,信噪比低到没法用。
我刚开始调无感FOC那会儿,用滑模观测器在额定转速30%以上跑得稳稳当当,一到10%以下就开始抖,转子位置估算误差直接飙到±30°电角度以上,电机发出“咯咯咯”的异响,转矩脉动大得能把联轴器震松。后来换了隆贝格观测器,高速段确实平滑了不少,但低速问题依旧——这不是观测器结构的问题,是物理层面的信噪比瓶颈,换什么观测器都绕不过去。
所以低速无感FOC必须换思路:既然反电动势靠不住,那就主动往电机里“打信号”,通过注入高频激励,利用电机凸极效应(Ld ≠ Lq)来提取转子位置信息。这就是高频注入(HFI, High Frequency Injection)的核心逻辑。
1.2 HFI的两大流派:旋转高频注入 vs 脉振高频注入
HFI不是单一方法,常见的有两大类:
- 旋转高频电压注入:在αβ轴系注入一个旋转的高频电压矢量,利用电流响应的负序分量提取位置。优点是实现直观,不需要额外坐标变换;缺点是会产生较大的高频转矩脉动,对凸极率低的电机(比如表贴式PMSM,Ld≈Lq)效果很差。
- 脉振高频电压注入:在估算的d轴(或q轴)方向注入高频正弦电压,通过提取q轴高频电流响应中的位置误差信号来闭环估算转子位置。优点是转矩脉动小,对凸极率要求相对低一些,更适合内置式PMSM(IPMSM)。
标题里说的“d轴正弦波高频注入”属于脉振注入的范畴,具体是在估算d轴注入高频正弦电压信号,通过q轴电流响应解调出转子位置误差,再送入锁相环(PLL)或龙贝格观测器闭环收敛。
1.3 为什么选d轴注入而不是q轴
这里有个细节值得掰扯:脉振注入可以注在d轴,也可以注在q轴。注在d轴的好处是,高频电流响应主要集中在d轴附近,产生的高频转矩脉动相对小;注在q轴则高频转矩脉动更大,但位置误差信号的增益可能更高。实际工程中d轴注入更常见,尤其是对噪声和振动敏感的场合(比如家电、风机、压缩机)。
另外,d轴注入时,q轴高频电流响应的幅值正比于位置误差的正弦值,在误差较小时近似线性,方便用PLL做闭环收敛。这个特性是后面算法推导的核心基础。
1.4 适用场景与边界条件
HFI不是万能的,它有明确的适用边界:
- 电机必须有凸极效应:Ld ≠ Lq是前提。表贴式PMSM如果凸极率极低(Lq/Ld < 1.1),HFI效果会大打折扣,可能需要借助饱和凸极效应(注入电流足够大时,磁路饱和导致等效凸极率提升)。
- 逆变器带宽要够:高频注入频率通常在500Hz~2kHz,PWM频率至少要是注入频率的10倍以上,否则高频信号无法准确复现。我用10kHz PWM跑1kHz注入,效果还行;如果PWM只有5kHz,注入频率就得降到500Hz以下,否则波形畸变严重。
- 电流采样精度要高:高频电流幅值通常只有额定电流的5%~10%,如果电流采样噪声大、分辨率低,解调出来的位置误差信号会被噪声淹没。
注意:HFI注入会带来额外的铜损和铁损,长期运行要注意电机温升。另外,注入频率要避开机械谐振频率,否则会激发机械振动。
2. d轴正弦波高频注入的算法原理推导
2.1 坐标系定义与基本假设
推导之前先把坐标系和假设理清楚,不然后面公式容易绕晕。
定义两套坐标系:
- 实际转子坐标系(dq轴):d轴对准转子磁极N极方向,q轴超前d轴90°电角度。
- 估算转子坐标系(γδ轴):γ轴对准估算的转子位置,δ轴超前γ轴90°。定义位置误差角 Δθ = θ - θ_est,其中θ是实际电角度,θ_est是估算电角度。
基本假设:
- 忽略定子电阻上的高频压降(高频下ωh·L >> R,R可以忽略)。
- 忽略交叉饱和和磁路非线性(或者把非线性归入等效Ld、Lq)。
- 注入频率远高于基波频率,基波分量在解调时可以被滤除。
- 电机三相绕组对称,逆变器理想。
这些假设在工程上基本成立,推导出来的结论和实测吻合度很高。
2.2 高频电压方程在估算坐标系下的表达
在估算的γδ坐标系下,注入高频电压矢量。假设只在γ轴(估算d轴)注入高频正弦电压:
u_γh = U_h · cos(ω_h · t) u_δh = 0其中U_h是注入电压幅值,ω_h是注入角频率。
高频下定子电压方程可以简化为:
u_γh = L_γγ · di_γh/dt + L_γδ · di_δh/dt u_δh = L_δγ · di_γh/dt + L_δδ · di_δh/dt这里的L_γγ、L_γδ、L_δδ是估算坐标系下的等效电感,它们和实际dq轴电感Ld、Lq以及位置误差Δθ的关系是:
L_γγ = L_avg + L_diff · cos(2Δθ) L_δδ = L_avg - L_diff · cos(2Δθ) L_γδ = L_δγ = L_diff · sin(2Δθ)其中:
- L_avg = (Ld + Lq) / 2,平均电感
- L_diff = (Ld - Lq) / 2,差分电感(注意符号,对IPMSM来说Lq > Ld,所以L_diff是负值,但推导中按代数处理)
这个关系是整个HFI算法的数学基石。可以看到,位置误差Δθ的信息被编码在L_γδ(交叉耦合项)和L_γγ、L_δδ的二次项里。
2.3 高频电流响应的求解
把注入电压代入高频电压方程,忽略交叉耦合的暂态(因为注入频率高,交叉耦合项的影响相对小),可以近似求解出高频电流响应。
先看γ轴:
di_γh/dt ≈ u_γh / L_γγ = U_h · cos(ω_h · t) / L_γγ积分得到:
i_γh ≈ U_h · sin(ω_h · t) / (ω_h · L_γγ)再看δ轴,由于u_δh = 0,但交叉耦合项L_δγ · di_γh/dt会产生δ轴电流:
di_δh/dt ≈ -(L_δγ / L_δδ) · di_γh/dt代入di_γh/dt的表达式:
di_δh/dt ≈ -(L_δγ / L_δδ) · U_h · cos(ω_h · t) / L_γγ积分得到:
i_δh ≈ -(L_δγ / L_δδ) · U_h · sin(ω_h · t) / (ω_h · L_γγ)把L_γγ、L_δδ、L_γδ的表达式代入,经过三角恒等变换(这一步比较繁琐,但思路就是展开再合并),可以得到δ轴高频电流的近似表达式:
i_δh ≈ -U_h · sin(ω_h · t) · L_diff · sin(2Δθ) / (ω_h · (L_avg² - L_diff²))当Δθ很小时,sin(2Δθ) ≈ 2Δθ,所以:
i_δh ≈ -2 · U_h · L_diff · Δθ · sin(ω_h · t) / (ω_h · (L_avg² - L_diff²))这个式子说明一个关键结论:δ轴高频电流的幅值和位置误差Δθ成正比,且与注入信号sin(ω_h·t)同相(或反相,取决于L_diff符号)。这就是位置误差信号的来源。
2.4 解调与位置误差信号提取
δ轴高频电流里除了位置误差信息,还有注入频率的载波。要提取Δθ,需要做解调。
解调的基本步骤:
- 带通滤波:用带通滤波器(中心频率ω_h)从δ轴电流中提取高频分量i_δh,滤掉基波和低次谐波。
- 同步解调:将i_δh乘以与注入信号同频同相(或正交)的参考信号。常用的是乘以sin(ω_h·t):
代入i_δh的表达式:ε = i_δh · sin(ω_h·t)ε ≈ -2 · U_h · L_diff · Δθ · sin²(ω_h·t) / (ω_h · (L_avg² - L_diff²)) - 低通滤波:sin²(ω_h·t) = (1 - cos(2ω_h·t))/2,低通滤波后滤掉2ω_h分量,得到:
这就是位置误差信号,它和Δθ成正比,符号取决于L_diff的符号。ε_LPF ≈ -U_h · L_diff · Δθ / (ω_h · (L_avg² - L_diff²))
实操心得:解调时的参考信号相位很关键。如果注入的是cos,解调也要用cos;如果相位对不上,解调出来的信号会包含cos(Δφ)的衰减因子,严重时甚至符号反转。我一般会在代码里加一个相位微调参数,实测时用示波器看解调波形来校准。
2.5 锁相环闭环收敛
得到位置误差信号ε_LPF后,送入锁相环(PLL)或龙贝格观测器,闭环估算转速和位置。
PLL的基本结构:
dω_est/dt = Ki · ε_LPF ω_est = Kp · ε_LPF + ∫Ki · ε_LPF dt θ_est = ∫ω_est dt其中Kp、Ki是PI参数。当ε_LPF → 0时,Δθ → 0,估算位置收敛到实际位置。
这里有个细节:ε_LPF的增益和U_h、L_diff、ω_h都有关系。如果注入电压幅值太小,误差信号弱,收敛慢;如果太大,高频损耗和转矩脉动增加。实际调参时,我一般先固定U_h为额定电压的10%~15%,然后调PLL的PI参数,让收敛时间在50ms~200ms之间。
2.6 完整算法框图(文字描述)
整个算法的信号流如下:
- 在估算γ轴注入U_h·cos(ω_h·t)。
- 采样三相电流,Clarke/Park变换到γδ坐标系。
- 对δ轴电流做带通滤波,提取i_δh。
- 乘以sin(ω_h·t)做同步解调。
- 低通滤波得到ε_LPF。
- ε_LPF送入PLL,输出ω_est和θ_est。
- θ_est反馈到Park变换,形成闭环。
这个结构清晰、计算量小,适合在MCU上实时运行。我用STM32F4系列跑这套算法,注入频率1kHz、PWM频率10kHz,CPU占用率大概15%~20%,还有余量做其他任务。
3. 工程实现中的关键细节与参数选择
3.1 注入频率怎么选
注入频率的选择是个权衡:
- 太高:接近PWM频率的一半时,采样和PWM更新跟不上,高频信号畸变;同时逆变器开关损耗增加。
- 太低:和基波频率接近时,带通滤波难以分离,解调精度下降;同时可能激发机械谐振。
经验公式:注入频率取PWM频率的1/10~1/20,且至少是额定基波频率的5倍以上。比如PWM 10kHz,注入频率取500Hz~1kHz;如果电机额定频率100Hz,注入频率至少500Hz。
我实测下来,1kHz注入配10kHz PWM是个比较稳的组合。如果PWM只有8kHz,注入频率降到800Hz也行,但解调滤波器的带宽要相应调整。
3.2 注入电压幅值的确定
注入电压幅值U_h直接影响信噪比和额外损耗。太小了误差信号弱,太大了电机发热和噪声明显。
一个实用的起步值:U_h = 10%~15%的额定电压。比如额定电压220V,U_h取22V~33V。然后根据实测的位置估算精度和电机温升微调。
如果电机凸极率很低(Lq/Ld < 1.1),可能需要加大U_h到20%甚至更高,利用磁路饱和效应增强凸极率。但这时候铜损和铁损会明显增加,要评估热设计是否扛得住。
3.3 带通滤波器和低通滤波器的设计
带通滤波器的中心频率是ω_h,带宽一般取ω_h的10%~20%。带宽太窄,滤波器阶数高、延迟大;带宽太宽,基波和低次谐波滤不干净。
低通滤波器的截止频率一般取ω_h的1/5~1/10,比如注入1kHz,低通截止频率取100Hz~200Hz。截止频率太高,2ω_h分量滤不干净,PLL会抖;太低,响应慢,收敛时间长。
我用二阶巴特沃斯带通+二阶巴特沃斯低通,在STM32上用双线性变换离散化,运行效果不错。如果MCU算力紧张,可以用一阶滤波器,但解调精度会下降。
3.4 逆变器非线性补偿
逆变器存在死区、管压降等非线性,会导致注入电压和实际电压有偏差,影响位置估算精度。低速时这个问题尤其明显,因为注入电压本身就不大,非线性误差占比高。
常见的补偿方法:
- 死区补偿:根据电流方向补偿死区导致的电压误差。
- 管压降补偿:根据电流幅值补偿开关管和续流管的压降。
我一般会在HFI算法前加一个简单的死区补偿,补偿量根据实测电流方向查表。不补偿的话,位置估算误差可能增加5°~10°电角度。
3.5 从HFI到中高速观测器的切换
HFI适合低速和零速,高速时反电动势观测法更准。实际系统需要在两者之间平滑切换。
切换策略:
- 低速区(< 10%额定转速):纯HFI。
- 过渡区(10%~20%额定转速):HFI和反电动势观测器加权融合,权重随转速线性变化。
- 高速区(> 20%额定转速):纯反电动势观测器。
切换时的关键是位置和转速的连续性,不能突变。我一般用一阶低通对切换权重做平滑,避免切换瞬间的转矩冲击。
注意:切换点不能设得太低,否则高速观测器还没准备好就切过去,容易失步;也不能太高,否则HFI的额外损耗持续时间太长。
4. 常见问题排查与实操避坑指南
4.1 位置估算收敛慢或不收敛
现象:PLL输出位置长时间不收敛,或者收敛后抖动大。
排查思路:
- 检查注入信号是否真的加到了电机上。用示波器看相电流,应该有明显的高频分量。如果没有,检查代码里注入电压是否被后续的Park变换或SVPWM覆盖了。
- 检查解调参考信号的相位。如果相位错了180°,误差信号符号反转,PLL会往反方向跑。可以试着把解调参考信号取反,看是否收敛。
- 检查PLL的PI参数。Kp太小收敛慢,Kp太大振荡。我一般先设Kp=0,只留Ki,让系统慢慢积分收敛,然后再加Kp加快响应。
- 检查电机凸极率。如果Lq/Ld接近1,误差信号太弱,需要加大注入电压或换用其他方法。
4.2 高频噪声和啸叫
现象:电机发出明显的高频啸叫,或者电流波形上高频纹波很大。
原因:注入频率落在人耳敏感频段(1kHz~4kHz),或者注入电压幅值太大。
解决:
- 把注入频率调到人耳不敏感的频段,比如800Hz以下或5kHz以上。但5kHz以上对PWM频率要求高,一般还是往低调。
- 降低注入电压幅值,但要注意不能低于信噪比底线。
- 在电流采样后加模拟低通滤波,减少高频噪声进入ADC。
4.3 低速转矩脉动大
现象:电机低速运行时转矩脉动明显,甚至出现爬行现象。
原因:HFI注入本身会产生高频转矩脉动,如果解调不干净或者PLL带宽太高,脉动会传递到基波转矩上。
解决:
- 降低PLL带宽,让位置估算更平滑,但收敛会变慢。
- 优化带通和低通滤波器,减少解调信号中的高频残留。
- 如果电机凸极率高,可以适当降低注入电压幅值。
4.4 不同电机需要重新调参
现象:换一台电机,原来的参数就不灵了。
原因:HFI的参数(注入频率、电压幅值、滤波器截止频率、PLL参数)和电机的Ld、Lq、额定电压、额定频率都相关。
解决:建立一套参数整定流程:
- 根据电机额定参数计算初始注入频率和电压幅值。
- 实测电流响应,调整带通滤波器中心频率和带宽。
- 观察解调波形,调整低通滤波器截止频率。
- 调PLL参数,直到收敛时间和抖动满足要求。
我一般会把不同电机的参数存成配置表,换电机时直接加载,省得每次重调。
4.5 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 位置不收敛 | 注入信号未生效 | 示波器看相电流高频分量 | 检查代码注入环节 |
| 位置反向收敛 | 解调相位错误 | 解调参考信号取反测试 | 校准解调相位 |
| 收敛慢 | PLL参数保守 | 逐步加大Kp | 调PI参数 |
| 高频啸叫 | 注入频率在人耳敏感段 | 改变注入频率 | 调到800Hz以下 |
| 转矩脉动大 | PLL带宽太高 | 降低PLL带宽 | 优化滤波器 |
| 换电机失效 | 参数不匹配 | 重新整定参数 | 建立配置表 |
实操心得:HFI调试最耗时的不是算法本身,而是滤波器参数和PLL参数的整定。我建议先用MATLAB/Simulink做离线仿真,把参数大致调好,再上实物。实物调试时,用DAC输出解调后的误差信号和估算位置,用示波器观察波形,比盯着串口打印的数据直观得多。
5. 从算法到代码的落地要点
5.1 离散化实现的关键细节
HFI算法在MCU上实现时,所有连续域公式都要离散化。几个关键点:
- 注入信号生成:用查表法或递推法生成sin/cos,避免实时调用三角函数。查表法精度取决于表长,我一般用1024点表,线性插值,精度够用。
- 滤波器离散化:用双线性变换(Tustin)把模拟滤波器转成差分方程。注意预畸变,保证截止频率准确。
- PLL积分:用前向欧拉或梯形积分,积分步长是PWM周期。步长太大时积分误差明显,10kHz PWM下步长100μs,前向欧拉够用。
5.2 计算量优化
HFI算法本身计算量不大,但如果MCU还要跑基波FOC、保护逻辑、通信等,就要注意优化:
- 滤波器用二阶而不是四阶,精度够用就行。
- 解调用的sin/cos和注入信号共用查表,减少重复计算。
- PLL的PI运算用定点数,比浮点快很多。我用Q15定点,精度和浮点差不多,但速度快3~5倍。
5.3 调试接口设计
调试HFI时,最有用的是实时观察解调误差信号和估算位置。我一般会:
- 用DAC输出ε_LPF和θ_est,接示波器看波形。
- 用串口上传数据到上位机,画收敛曲线。
- 在代码里加一个“注入使能”开关,方便对比注入和不注入时的差异。
这些调试接口在量产时可以关掉,但开发阶段能省很多时间。
5.4 与基波FOC的整合
HFI不是独立运行的,它要和基波FOC整合:
- 电流环的参考值是基波电流,HFI注入的高频分量要通过带通滤波从反馈中分离,不能进入基波电流环。
- 位置和转速估算值同时供给基波FOC的Park变换和速度环。
- 注入电压要叠加到基波电压上,通过SVPWM输出。
整合时要注意时序:电流采样→Clarke/Park→HFI解调→PLL→基波FOC→SVPWM,整个链路要在PWM周期内完成。10kHz PWM下,100μs内要跑完所有计算,对MCU算力有要求。我用STM32F407跑这套,主频168MHz,刚好够用。
6. 个人实操体会与扩展思路
这套d轴正弦波高频注入算法,我从第一次听说到真正跑通,前前后后折腾了差不多两个月。最开始看论文觉得公式推导挺清晰,但一上实物就各种问题:位置不收敛、啸叫、转矩脉动大,几乎把能踩的坑都踩了一遍。
最大的体会是:HFI的难点不在算法推导,而在工程细节。滤波器参数、PLL参数、注入频率和幅值,这些看起来不起眼的参数,实际决定了算法能不能用。论文里通常只给公式,不给调参方法,而这些调参经验才是真正值钱的东西。
另外,HFI不是孤立的,它要和基波FOC、逆变器非线性补偿、切换策略一起考虑。我见过有人HFI单独跑得挺好,一整合到完整FOC里就出问题,就是因为没处理好高频和基波的分离。
后续如果想进一步扩展,有几个方向:
- 方波注入:用方波代替正弦波,解调更简单,计算量更小,但高频谐波更丰富,对滤波器要求不同。
- 多频率注入:同时注入多个频率,利用不同频率的响应差异提升凸极率估计精度。
- 结合饱和凸极效应:对表贴式PMSM,通过注入足够大的电流激发磁路饱和,人为制造凸极率。
- 无滤波器解调:用锁相环直接跟踪高频电流的包络,省掉带通和低通滤波器,降低延迟。
这些方向我有些试过,有些还在琢磨。HFI这个领域,理论框架已经比较成熟,但工程实现上还有很多细节可以打磨。把基础的正弦波注入吃透,再去看其他变种,会轻松很多。