首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
永磁同步电机低速无感FOC:d轴方波高频注入算法推导与工程实践
📅 2026/10/27 1:09:27
✍️ 爱科研究院
👁 阅读 3,247
1. 为什么低速下必须换一套玩法从反电动势失效说起如果你调过永磁同步电机的无感FOC大概率经历过这样一个尴尬中高速跑得挺稳一到低速甚至零速附近转子位置估算就开始飘转速环抖得像筛糠严重时直接失步。很多人第一反应是调观测器增益把龙贝格或者滑模的带宽往上顶结果发现越调越糟——这不是参数没调好而是物理层面反电动势本身就不够用了。无感FOC的根基是通过电机端电压和电流去反推转子位置。中高速时转子转得快永磁体切割定子绕组产生的反电动势幅值足够大信噪比高观测器能轻松从电压方程里解出磁链和角度。但转速一降反电动势幅值随转速线性下降到低速时几乎淹没在电阻压降、逆变器非线性、采样噪声里。你拿一个被噪声糊住的信号去估算角度神仙也救不了。这就是为什么低速段必须换思路不靠反电动势而是主动往电机里打一个激励信号靠转子凸极效应产生的响应来反推位置。这套方法就是高频注入英文叫High Frequency Injection简称HFI。它的核心逻辑是——既然转子自己不说话反电动势太小那我就主动问它一句听它怎么回答从回答里判断它朝哪。HFI里又分好几种注入方式旋转电压注入、脉振正弦注入、方波注入。其中d轴方波高频注入因为实现简单、对处理器算力要求低、在低速段位置估算精度高成了很多量产方案的首选。但它也不是没有代价——方波注入会带来额外的电流纹波和噪声推导过程也比正弦注入绕一些。这篇文章就把d轴方波高频注入的算法原理从头推一遍把每一步的物理意义和工程取舍讲清楚让你不只是会抄代码而是真正明白每个公式是怎么来的。适合谁看如果你已经做过基础的无感FOC对Clarke/Park变换、电流环、SVPWM这些不陌生但一到低速就卡壳或者想搞明白HFI到底在算什么那这篇就是给你写的。如果你连FOC的基本框架还没搭起来建议先把有感和中高速无感跑通再回来。2. 凸极效应HFI能成立的全部物理基础2.1 从电感矩阵看转子的方向感HFI能work前提是电机得有凸极效应也就是d轴电感和q轴电感不相等。表贴式永磁电机SPM的Ld和Lq理论上相等凸极效应很弱HFI效果就差而内置式永磁电机IPM因为永磁体埋在转子铁芯里d轴磁路经过永磁体磁导率接近空气q轴磁路主要走铁芯导致Ld Lq凸极比通常在1.5到3之间HFI效果就很好。为什么凸极效应能反映位置你可以把转子想象成一个椭圆形的铁疙瘩d轴是短轴方向q轴是长轴方向。当你在定子上施加一个电压激励产生的电流响应取决于这个激励方向上的等效电感。如果激励方向正好对着d轴等效电感是Ld对着q轴等效电感是Lq。因为Ld≠Lq所以同一个电压激励在不同转子位置下产生的电流响应幅值不同。反过来我测到电流响应的特征就能推断出转子在哪个方向。这就是HFI的全部物理基础。听起来简单但工程上要把它变成可用的角度估算中间要过好几道坎。2.2 高频下的电感模型简化在基波频率下电机的电压方程要考虑反电动势、交叉耦合、磁饱和等一堆因素很复杂。但HFI注入的信号频率通常在500Hz到2kHz远高于基波频率低速时基波可能只有几Hz到几十Hz。在这个频率下有几项可以大胆简化反电动势项可以忽略反电动势幅值正比于转速低速时本来就小高频下相对于注入电压更是微不足道。电阻压降可以忽略高频下感抗ωL远大于电阻R电流主要由电感决定。交叉耦合项影响小在低速小电流工况下d-q轴交叉耦合可以近似忽略。简化后高频激励下的电机模型就退化成一个纯电感模型电压约等于电感乘以电流的变化率。这个简化是HFI推导的起点也是为什么HFI在低速有效、高速反而失效的原因——高速下反电动势项不能忽略了。注意这个简化只在注入频率远高于基波频率、且电机处于低速或零速时成立。如果你的应用需要在全速域切换HFI和观测器切换点的设计要特别小心后面会讲。2.3 d轴方波注入和正弦注入的本质区别正弦注入是往d轴叠加一个高频正弦电压然后通过带通滤波和同步解调提取位置误差信号。方波注入则是叠加一个高频方波电压正负交替。两者的本质区别在于信号处理路径对比项正弦注入方波注入注入波形连续正弦正负交替方波电流响应连续正弦正负交替脉冲解调方式带通滤波同步解调相邻周期电流差分对算力要求较高需要滤波较低差分即可电流纹波较小较大噪声较柔和较尖锐位置精度高高方波注入最大的优势是解调简单。因为方波是正负交替的我只需要在正半周期和负半周期分别采样电流然后做差分就能把注入响应提取出来不需要复杂的带通滤波器。这对低成本MCU很友好。代价是电流纹波更大电磁噪声更明显对采样时刻的同步要求也更高。3. d轴方波高频注入的完整数学推导3.1 静止坐标系下的高频电压方程先从最底层写起。在α-β静止坐标系下高频激励下的电压方程可以写成[Vα] [L0 L1*cos(2θ) L1*sin(2θ) ] [diα/dt] [Vβ] [L1*sin(2θ) L0 - L1*cos(2θ)] [diβ/dt]其中L0 (Ld Lq) / 2是平均电感L1 (Ld - Lq) / 2是凸极电感注意Ld Lq时L1为负θ是转子电角度这个矩阵就是凸极效应在静止坐标系下的完整表达。你可以看到矩阵里的每一项都含有θ这就是位置信息的来源。如果LdLq那么L10矩阵退化成对角阵θ就消失了HFI也就失效了。3.2 从静止坐标系到估计旋转坐标系实际实现时我们不会直接在α-β系下解算而是把注入和提取都放到估计的d-q坐标系下做。设估计角度为θ_est估计误差为Δθ θ - θ_est。把上面的方程变换到估计的d-q坐标系用Park变换角度用θ_est经过一通三角函数运算可以得到估计d轴和q轴上的电压方程。这里不把每一步展开网上很多推导直接给结论在估计d轴注入方波电压V_inj估计q轴电压为0的情况下估计q轴上的高频电流响应为i_qh (V_inj * ΔT / (Ld * Lq)) * L1 * sin(2Δθ) * sign其中ΔT是半个注入周期的时间sign是方波的符号1或-1。这个式子就是d轴方波注入的核心解调公式。它告诉我们估计q轴的高频电流幅值正比于sin(2Δθ)。当Δθ0时i_qh0当Δθ很小时sin(2Δθ)≈2Δθi_qh正比于角度误差。3.3 位置误差信号的提取相邻周期差分方波注入的解调精髓在于差分。因为方波是正负交替的我在正半周期采样一次q轴电流在负半周期再采样一次两者相减Δi_q i_qh(正) - i_qh(负)由于sin(2Δθ)在正负半周期符号相同角度误差在半个注入周期内基本不变而方波符号相反所以差分后Δi_q 2 * (V_inj * ΔT / (Ld * Lq)) * L1 * sin(2Δθ)这样就把位置误差信号提取出来了而且不需要带通滤波器只需要在正确的时刻采样。这就是方波注入解调简单的根本原因。3.4 从误差信号到角度锁相环的设计拿到Δi_q后怎么把它变成角度标准做法是过一个锁相环PLL。PLL的结构很简单把Δi_q当作误差输入误差经过一个PI调节器输出估计转速估计转速积分得到估计角度θ_estθ_est反馈回去做Park变换PLL的闭环传递函数是标准的二阶系统PI参数决定了带宽和阻尼。这里有个工程经验PLL带宽不能设太高因为Δi_q里还有噪声和采样误差带宽太高会把噪声放大导致角度抖动。一般低速HFI的PLL带宽设在20到50Hz左右具体看电机和采样质量。实操心得PLL的PI参数整定时先把积分项设为0只调比例项观察角度跟踪是否稳定然后慢慢加积分项消除稳态误差。如果角度出现低频振荡说明比例增益太大如果角度跟踪有滞后说明积分增益不够。3.5 极性判断N/S极分辨的坑上面推出来的sin(2Δθ)有个致命问题它的周期是π不是2π。也就是说θ和θπ会产生相同的误差信号。这意味着HFI只能分辨出转子的轴线方向但分不清哪头是N极、哪头是S极。这是HFI最经典的坑。解决办法是磁饱和极性判断往d轴正方向注入一个较大的电流脉冲由于永磁体的存在d轴正方向的磁路饱和程度和负方向不同导致电感变化不同通过比较正负脉冲下的电流响应幅值就能判断出N极方向。具体做法先让HFI收敛到一个轴线方向可能是N也可能是S往估计d轴正方向注入一个短时大电流比如额定电流的50%到100%测量电流上升率或稳态电流幅值如果d轴正方向对应N极磁路更饱和电感更小电流上升更快根据结果决定是否需要把角度加π这个判断只需要在启动时做一次之后HFI跟踪就不会再丢极性了。4. 工程实现中的关键细节与参数选择4.1 注入频率和幅值的权衡注入频率和幅值是HFI最重要的两个参数直接决定性能。注入频率的选择要考虑几个因素要远高于基波频率低速时基波可能只有几Hz所以500Hz以上就够要低于电流环带宽否则电流环跟不上注入信号要避开机械谐振频率否则会激发振动要避开采样频率的整数分频否则会产生混叠工程上常用的是电流环频率的1/4到1/8。比如电流环10kHz注入频率取1.25kHz到2.5kHz。方波注入时注入频率就是方波的基波频率正负半周期各占一半。注入幅值的选择更微妙太小电流响应信噪比不够角度估算抖动太大电流纹波大噪声明显可能激发饱和一般取额定电压的10%到20%或者额定电流的10%到30%我个人的经验是先从额定电压的10%开始试如果角度抖动大就往上加如果噪声太大就往下减。对于凸极比高的IPM注入幅值可以小一些凸极比低的SPM就得加大注入幅值但效果还是有限。4.2 采样时刻的精确同步方波注入对采样时刻的要求极其苛刻。因为方波是正负交替的你必须在正半周期的末尾和负半周期的末尾分别采样才能得到正确的差分信号。如果采样时刻偏了差分出来的信号就混入了基波电流的变化角度估算直接崩。具体来说假设方波周期是T正半周期是[0, T/2]负半周期是[T/2, T]。你需要在tT/2时刻采样一次在tT时刻采样一次。这两个时刻正好是方波切换的瞬间电流响应达到最大。实现上通常用PWM定时器的比较中断来触发ADC采样确保采样时刻和方波切换严格对齐。这里有个大坑如果PWM载波和注入方波不同步采样时刻会漂移导致差分信号里混入低频分量。解决办法是让注入方波的切换和PWM周期严格同步比如每N个PWM周期切换一次方波。注意采样时刻的抖动会直接转化为角度误差。如果你的MCU中断响应有延迟或者ADC采样有固定偏移一定要在代码里做补偿。我见过太多人在这里翻车明明算法推导没问题就是角度抖最后发现是采样时刻偏了几个微秒。4.3 电流环带宽与HFI的相互制约HFI注入的高频信号会进入电流环如果电流环带宽不够注入信号会被衰减导致响应幅值变小信噪比下降。但电流环带宽也不能无限高受限于采样频率和PWM频率。一般来说电流环带宽至少要是注入频率的2到3倍。比如注入1kHz电流环带宽至少2kHz。如果电流环带宽不够可以考虑提高PWM频率和采样频率降低注入频率在电流环反馈路径上对注入频率做陷波但这会同时衰减有用信号要谨慎另一个思路是把HFI注入和电流环解耦注入信号不经过电流环PI直接叠加到电压输出上。这样电流环只负责基波电流控制注入响应通过独立的采样通道提取。这种结构更清晰但实现复杂一些。4.4 从HFI到中高速观测器的切换HFI只在低速有效中高速还是要靠反电动势观测器。两者之间需要一个平滑切换策略否则切换瞬间角度跳变电机会抖甚至失步。常见的切换策略是加权融合在切换速度区间内HFI估算的角度和观测器估算的角度按转速加权平均。低速时HFI权重大高速时观测器权重大中间平滑过渡。切换区间的选择很关键下限HFI能可靠工作的最高转速通常是额定转速的5%到10%上限观测器能可靠工作的最低转速通常是额定转速的10%到20%两者之间就是切换区间切换区间内两个估算器的角度都要参与融合所以两个估算器都得处于正常工作状态。这意味着HFI在切换区间上限附近还得能work观测器在切换区间下限附近也得能work两者要有重叠。实操心得切换区间不要设太窄否则转速波动时会在切换点反复横跳。我一般把切换区间设成额定转速的5%到20%留足够的重叠。另外融合权重用转速的平滑函数不要用阶跃否则会有突变。5. 实测中容易翻车的几个场景5.1 凸极比太低导致信噪比不足前面说过SPM的Ld≈Lq凸极比接近1HFI效果很差。如果你拿一个SPM电机跑HFI会发现角度估算抖动很大甚至完全无法收敛。这不是算法问题是物理限制。解决办法换IPM电机凸极比至少1.3以上如果必须用SPM可以尝试饱和凸极注入通过注入大电流人为制造凸极但效果有限且会增加损耗或者放弃低速HFI用其他方法如开环启动到一定转速再切观测器5.2 逆变器非线性导致的电压误差逆变器有死区、管压降、开关延迟等非线性因素会导致实际输出电压和指令电压有偏差。这个偏差在低速时相对于注入电压可能占比不小会直接影响HFI精度。死区补偿是必须做的。常见做法是根据电流方向补偿死区电压或者用在线辨识方法估计非线性电压。如果死区补偿没做好HFI的角度估算会有固定偏差表现为估算角度和实际角度之间有一个恒定的偏移。判断方法如果电机能转但效率低、电流大或者带载能力差很可能是角度有固定偏差。这时候要检查死区补偿。5.3 采样噪声和量化误差HFI提取的差分信号幅值可能只有几十毫安如果电流采样噪声有十几毫安信噪比就很差。这时候角度估算会抖PLL输出会有高频噪声。改善方法提高电流采样精度用更高位数的ADC在差分信号上做低通滤波但会引入相位滞后要权衡增加注入幅值提高信号幅值在PLL前面加一个陷波器滤掉注入频率的残余我一般会在差分信号后加一个截止频率几百Hz的低通滤波既能滤掉高频噪声又不会引入太大滞后。滤波器的截止频率要高于PLL带宽否则会影响PLL的动态。5.4 负载突变时的角度跟踪HFI在稳态下角度估算很准但负载突变时电流突然变化会引入额外的电压扰动可能让HFI暂时失锁。如果负载突变很剧烈甚至可能让PLL发散。改善方法PLL带宽适当提高但会牺牲稳态精度在负载突变时暂时增大注入幅值提高信噪比加一个角度误差限幅防止PLL积分饱和实际调试时我会用突加突卸负载来测试HFI的动态性能。如果角度在负载突变时抖动超过几度就要考虑优化PLL参数或注入策略。6. 代码实现框架与调试顺序6.1 整体软件架构一个典型的d轴方波HFI实现包含以下模块注入模块在估计d轴电压上叠加方波频率和幅值可配置采样模块在方波正负半周期末尾触发ADC采样获取q轴电流解调模块计算相邻周期q轴电流差分得到位置误差信号PLL模块误差信号过PI输出估计转速和角度极性判断模块启动时执行一次确定N极方向切换模块低速HFI和高速观测器的平滑切换代码框架大致如下伪代码// 每个PWM周期调用 void HFI_ISR(void) { // 1. 更新方波符号 if (hfi_counter hfi_half_period) { hfi_counter 0; hfi_sign -hfi_sign; } // 2. 注入方波到d轴电压 Vd_ref Vd_pi hfi_sign * V_inj; Vq_ref Vq_pi; // 3. 在方波切换时刻采样 if (hfi_counter 0 || hfi_counter hfi_half_period) { iq_sample get_iq(); if (hfi_sign 0) { iq_pos iq_sample; } else { iq_neg iq_sample; // 4. 差分得到误差信号 delta_iq iq_pos - iq_neg; // 5. PLL更新 angle_error delta_iq * pll_gain; speed_est PI_pll(angle_error); angle_est speed_est * Ts; } } }6.2 调试顺序从开环到闭环HFI调试不能一上来就闭环要按顺序来第一步开环注入观察电流响应。让电机静止只注入方波不跑电流环用示波器看q轴电流波形。应该看到正负交替的脉冲幅值随转子位置变化。如果看不到明显脉冲说明注入幅值太小或凸极比太低。第二步手动转动转子观察误差信号。慢慢转动转子观察delta_iq随角度的变化。应该是一个周期为π的正弦波。如果波形不对检查采样时刻和差分逻辑。第三步闭环PLL观察角度跟踪。让PLL闭环手动转动转子观察估计角度是否跟随实际角度。如果角度能跟但抖动大调PLL参数如果角度不跟或发散检查误差信号符号和PLL极性。第四步极性判断。执行极性判断流程确认N极方向正确。如果判断反了电机会反转或失步。第五步带载测试。加上负载观察角度跟踪和转速稳定性。如果带载后角度偏差大检查死区补偿和电流环带宽。第六步切换测试。从低速加速到高速观察HFI到观测器的切换是否平滑。如果有抖动调整切换区间和融合权重。6.3 几个实用的调试技巧用DAC输出内部变量把delta_iq、angle_error、angle_est等变量通过DAC输出到示波器比看寄存器直观得多。注入频率从低往高调先从500Hz开始稳定后再往上加找到性能和噪声的平衡点。PLL参数从保守往激进调先保证稳定再追求动态。记录启动过程用示波器或数据记录功能抓启动时的角度收敛过程看是否有超调或振荡。7. 我对这套算法的一点个人体会d轴方波高频注入这套东西推导看起来绕但核心思想其实很朴素既然低速时反电动势靠不住那就主动注入一个已知信号从响应里反推位置。方波注入相比正弦注入最大的好处是解调简单省掉了带通滤波器对低成本硬件友好。但它的代价是电流纹波和噪声更明显对采样时刻的同步要求也更高。我踩过的最大的坑是采样时刻偏移。当时算法推导检查了好几遍都没问题但角度就是抖。后来用示波器同时看PWM波形和ADC触发信号发现采样时刻比方波切换晚了几个微秒导致差分信号里混入了基波分量。把采样时刻对齐后角度立刻稳了。所以如果你也在调HFI建议第一件事就是用示波器确认采样时刻和方波切换是否严格对齐。另一个体会是不要迷信仿真。仿真里电机模型理想没有死区、没有采样噪声、没有参数偏差HFI跑得完美。但实际硬件上死区补偿、采样精度、参数变化都会影响效果。仿真只能验证算法逻辑真正的参数整定必须在实物上做。最后说一句关于切换的HFI和观测器的切换很多人只关注角度融合忽略了转速估算的融合。如果两个估算器的转速差异大切换时转速环会抖。我的做法是角度和转速都做融合而且融合权重用同一个函数保证一致性。切换区间内两个估算器都要处于良好工作状态所以HFI的有效转速上限和观测器的有效转速下限要有足够重叠这个重叠区间的设计比切换算法本身更重要。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/27 1:09:27
国产车规芯片破局:OBC/DCDC电源链路六大关键节点解析
2026/10/27 1:09:27
垃圾目标检测数据集使用指南:校验、转换与一致性排查
2026/10/27 1:04:26
STM32智能手表开发全攻略:低功耗设计、屏幕驱动与传感器调试
2026/10/27 2:09:32
大数据技术原理题库复盘:Hadoop、HDFS、HBase与NoSQL考点
2026/10/27 2:09:32
词法分析器底层:正则表达式到DFA最小化与状态机避坑
2026/10/27 2:09:32
BarTender标签打印全链路:驱动字体、数据库SQL与批量打印避坑
2026/10/27 2:09:32
ETL数据整合实战:从抽取清洗到加载的完整指南
2026/10/27 2:09:31
大数据技术原理与应用测试题:Hadoop、HDFS、HBase知识地图
2026/10/27 2:04:31
分布式架构搭建技术详解
2026/10/27 0:04:20
WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价
2026/10/27 0:04:20
WorkBuddy_新建任务与工作模式20_新手推荐路径
2026/10/27 0:04:20
ZerolanLiveRobot开发者指南:如何扩展一个新服务并注册自定义事件(附完整实战示例)
2026/10/26 11:29:50
全国计算机二级C语言真题PDF高效刷题指南
2026/10/26 0:03:29
requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南
2026/10/26 11:29:49
递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现
2026/10/25 22:15:16
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/26 11:29:48
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/25 12:42:56
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)