☰
永磁同步电机低速无感FOC:d轴方波高频注入算法推导与工程实践
2026/10/27 1:09:11 网站建设 项目流程

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为负)
  • θ是转子电角度

这个矩阵就是凸极效应在静止坐标系下的完整表达。你可以看到,矩阵里的每一项都含有θ,这就是位置信息的来源。如果Ld=Lq,那么L1=0,矩阵退化成对角阵,θ就消失了,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_qh=0;当Δθ很小时,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的结构很简单:

  1. 把Δi_q当作误差输入
  2. 误差经过一个PI调节器,输出估计转速
  3. 估计转速积分得到估计角度θ_est
  4. θ_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极方向。

具体做法:

  1. 先让HFI收敛到一个轴线方向(可能是N也可能是S)
  2. 往估计d轴正方向注入一个短时大电流(比如额定电流的50%到100%)
  3. 测量电流上升率或稳态电流幅值
  4. 如果d轴正方向对应N极,磁路更饱和,电感更小,电流上升更快
  5. 根据结果决定是否需要把角度加π

这个判断只需要在启动时做一次,之后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]。你需要在t=T/2时刻采样一次,在t=T时刻采样一次。这两个时刻正好是方波切换的瞬间,电流响应达到最大。

实现上,通常用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,凸极比接近1,HFI效果很差。如果你拿一个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实现包含以下模块:

  1. 注入模块:在估计d轴电压上叠加方波,频率和幅值可配置
  2. 采样模块:在方波正负半周期末尾触发ADC采样,获取q轴电流
  3. 解调模块:计算相邻周期q轴电流差分,得到位置误差信号
  4. PLL模块:误差信号过PI,输出估计转速和角度
  5. 极性判断模块:启动时执行一次,确定N极方向
  6. 切换模块:低速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的有效转速上限和观测器的有效转速下限要有足够重叠,这个重叠区间的设计比切换算法本身更重要。

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

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

立即咨询