无感FOC低速破局:d轴正弦波高频注入算法推导与工程实现
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不是单一方法常见的有两大类旋转高频电压注入在αβ轴系注入一个旋转的高频电压矢量利用电流响应的负序分量提取位置。优点是实现直观不需要额外坐标变换缺点是会产生较大的高频转矩脉动对凸极率低的电机比如表贴式PMSMLd≈Lq效果很差。脉振高频电压注入在估算的d轴或q轴方向注入高频正弦电压通过提取q轴高频电流响应中的位置误差信号来闭环估算转子位置。优点是转矩脉动小对凸极率要求相对低一些更适合内置式PMSMIPMSM。标题里说的“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.1HFI效果会大打折扣可能需要借助饱和凸极效应注入电流足够大时磁路饱和导致等效凸极率提升。逆变器带宽要够高频注入频率通常在500Hz~2kHzPWM频率至少要是注入频率的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 RR可以忽略。忽略交叉饱和和磁路非线性或者把非线性归入等效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 · sin(ω_h·t)代入i_δh的表达式ε ≈ -2 · U_h · L_diff · Δθ · sin²(ω_h·t) / (ω_h · (L_avg² - L_diff²))低通滤波sin²(ω_h·t) (1 - cos(2ω_h·t))/2低通滤波后滤掉2ω_h分量得到ε_LPF ≈ -U_h · L_diff · Δθ / (ω_h · (L_avg² - L_diff²))这就是位置误差信号它和Δθ成正比符号取决于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频率10kHzCPU占用率大概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%的额定电压。比如额定电压220VU_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太大振荡。我一般先设Kp0只留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这个领域理论框架已经比较成熟但工程实现上还有很多细节可以打磨。把基础的正弦波注入吃透再去看其他变种会轻松很多。