
做无感FOC的人十有八九都会被“零速起步”这件事折腾过。静止状态下反电动势为零位置信息完全消失传统基于反电动势的观测器在这里集体失效。霍尔传感器能解决问题但多了三个器件和一组线束生产环节还得多几道工序编码器精度高但成本和安装条件是另一回事。于是高频信号注入HFIHigh-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.5us16kHz注入方波每两个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控制中断里每一步的执行顺序对稳定性影响很大。我最终采用的顺序是ADC电流采样完成进入中断读取三相电流做Clarke变换和Park变换坐标角度用当前估计角θ̂高频注入解调用本次采样值减上一次采样值得到Δθ相关的误差量两级均值滤波把滤波结果送入PLL更新估计角θ̂和估计转速ω̂用更新后的θ̂做电流环PI控制输出ud_ref、uq_ref叠加上注入电压做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 值得继续投入的扩展方向这套框架跑稳之后我还在继续探索三个方向。第一个是堵转保位模式。高频注入在转速为零时依然有效所以完全可以用它实现带载堵转时的高精度保位。做法是把位置环的积分作用加强同时降低注入频率补偿范围实测堵转力矩保持能力比纯电流环好很多。第二个是多模式无扰切换的泛化。反电动势观测器也不一定用滑模磁链观测器和扩展卡尔曼在过渡区的表现各有优劣。核心问题是过渡区相位对齐我验证过只要两种观测器都跟随同一个有效位置信号过渡参数稍微微调就能稳定工作。第三个是注入参数的在线自整定。我试过基于电流响应幅值在线识别凸极率然后自动调整注入电压幅值让系统自动匹配不同温度、不同磁链状态下的参数漂移。目前已经能跑通但要填的细节还不少后面有成果再单独写一篇分享。调高频注入这半年我最大的体会是不要上来就把观测器结构搞得太复杂先让解调波形符合物理直觉再谈算法进阶。波形和数据永远是第一现场你能把误差信号里的每一个尖峰都解释清楚方案就离量产不远了。希望这篇文章能帮你少走几个我走过的弯路。