news 2026/10/27 1:02:00

d轴正弦波高频注入无感FOC:低速零速转子位置估算原理与工程实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
d轴正弦波高频注入无感FOC:低速零速转子位置估算原理与工程实践

1. 为什么低速下反电动势观测器会失效

搞过无感FOC的人都有一个共识:中高速区间用龙贝格观测器或者滑模观测器,转子位置估算基本稳如老狗,但一旦转速掉到额定转速的5%以下,甚至直接堵转到零速,整套观测器就跟瞎了一样,估算角度开始乱飘,转矩输出抖动,严重的时候直接失步。这不是算法写得不好,而是物理层面的限制。

1.1 反电动势与转速的线性关系是根本瓶颈

永磁同步电机的反电动势公式很朴素:

E = Ke × ωe

其中Ke是反电动势常数,ωe是电角速度。假设一台额定3000rpm的PMSM,在150rpm时电角速度只有额定值的5%,反电动势幅值也只剩5%。而电流采样电路里始终存在噪声、ADC量化误差、死区导致的电压畸变,这些干扰的幅值不会因为转速降低而减小。当有用信号(反电动势)被压缩到和噪声同一量级时,信噪比急剧恶化,观测器从噪声里根本提取不出有效的转子位置信息。

我用一台48V、额定2000rpm的云台电机做过实测:在100rpm时,龙贝格观测器估算的角度误差还能控制在15度电角度以内;降到30rpm时,角度误差直接飙到±60度以上,电机开始来回抖动,根本没法闭环。这就是为什么低速需要换一套完全不同的思路。

1.2 高频注入为什么能绕开这个限制

高频注入的核心逻辑是:既然反电动势在低速下不可靠,那我就不靠反电动势了,我主动往电机里打一个高频信号,利用转子的凸极效应(d轴和q轴电感不相等)来探测转子位置。这个凸极效应跟转速无关,只跟转子本身的物理结构有关,所以低速甚至零速下依然有效。

具体来说,对于内置式永磁电机(IPMSM),d轴电感Ld通常小于q轴电感Lq,差值可以达到20%~40%。当高频电压信号注入到定子绕组中时,高频电流的响应幅值会随着注入方向与转子d轴夹角的变化而变化。通过解调高频电流的幅值或相位信息,就能反推出转子位置。这就是HFI(High Frequency Injection)的物理基础。

注意:表贴式永磁电机(SPMSM)的Ld和Lq几乎相等,凸极效应极弱,标准HFI方法效果很差。如果非要用,需要借助饱和凸极效应,注入幅值要加大,但会带来额外的损耗和噪声。

2. d轴正弦波高频注入的数学推导全过程

高频注入按注入信号类型分,常见的有旋转电压注入、脉振电压注入、方波注入等。d轴正弦波注入属于脉振注入的一种,它的特点是在估算的d轴方向注入一个高频正弦电压,通过q轴高频电流的响应来提取位置误差信号。下面我把整个推导链路一步步展开。

2.1 高频下的电机模型简化

在同步旋转坐标系(d-q轴)下,PMSM的电压方程完整形式是:

vd = Rs·id + Ld·(did/dt) - ωe·Lq·iqvq = Rs·iq + Lq·(diq/dt) + ωe·Ld·id + ωe·ψf

当注入频率ωh远高于基波频率ωe时(通常ωh是ωe的10倍以上),可以做两个合理简化:

  1. 忽略定子电阻Rs,因为在高频下ωh·L远大于Rs;
  2. 忽略反电动势项ωe·ψf和交叉耦合项ωe·L·i,因为ωe远小于ωh。

简化后的高频电压方程变成:

vdh ≈ Ld·(didh/dt)vqh ≈ Lq·(diqh/dt)

这组方程说明:在高频激励下,电机表现为一个纯电感负载,d轴和q轴各自是一个独立的电感。这就是高频注入能工作的数学前提。

2.2 注入信号的定义与坐标系关系

假设我们在估算的d轴方向注入一个高频正弦电压:

vdh_inj = Vh·cos(ωh·t)vqh_inj = 0

这里Vh是注入电压幅值,ωh是注入角频率。注意,这个注入是在估算坐标系(用上标^表示)下进行的,而电机的实际凸极轴在真实坐标系下。两者之间存在一个角度误差Δθ = θ_real - θ_est。

通过坐标变换,把估算坐标系下的注入电压投影到真实d-q轴上,可以得到真实轴上的高频电压分量。再结合高频电感模型,解出真实轴上的高频电流响应,最后再变换回估算坐标系,得到估算q轴上的高频电流:

iqh_est = (Vh·sin(2Δθ)) / (2·ωh·Ld·Lq) · sin(ωh·t) - ...

这个表达式里最关键的信息是:估算q轴高频电流的幅值正比于sin(2Δθ)。当Δθ趋近于0时,iqh_est也趋近于0。这就意味着,如果我们能通过信号处理手段把iqh_est的幅值提取出来,并控制它为零,就能让估算角度收敛到真实角度。

2.3 从高频电流到位置误差信号的解调

实际工程中,我们采样到的是三相电流,经过Clarke和Park变换后得到估算坐标系下的idh和iqh。iqh里面混杂了基波电流、PWM开关噪声、高频注入响应等多种成分。要提取出有用的位置误差信息,需要做解调。

最常用的解调方法是同步解调(也叫锁相解调):将iqh乘以一个与注入信号同频同相的参考信号,然后通过低通滤波器滤除高频分量,保留直流分量。具体操作:

  1. 将采样得到的iqh乘以sin(ωh·t);
  2. 利用积化和差公式,iqh·sin(ωh·t)会产生一个直流项和一个二倍频项;
  3. 用低通滤波器(截止频率远低于ωh)滤掉二倍频项,剩下的直流项就是位置误差信号ε。

最终得到的误差信号形式为:

ε ≈ K · sin(2Δθ) ≈ 2K · Δθ(当Δθ很小时)

其中K是一个与Vh、ωh、Ld、Lq相关的常数。这个ε就是我们要送入锁相环(PLL)或龙贝格观测器的输入信号。

2.4 锁相环的闭环收敛机制

拿到误差信号ε之后,需要一个闭环控制器把它拉回零。最经典的结构是PLL:

  • 将ε送入一个PI控制器;
  • PI控制器的输出是估算转速的修正量;
  • 对修正后的转速积分,得到估算角度θ_est;
  • θ_est再反馈回去做Park变换,形成闭环。

整个环路的带宽通常设计在50~200Hz之间。带宽太低,收敛慢,动态响应差;带宽太高,容易受噪声干扰,产生高频抖动。我一般从100Hz开始调,根据实际电机的凸极率和噪声水平微调。

3. 数字实现中的关键参数计算与选型

理论推导清楚了,但真正落地到MCU上跑,参数选不对照样翻车。这一部分我结合自己在STM32G431和TI TMS320F280049两套平台上跑HFI的经验,把关键参数的计算逻辑和选型依据讲清楚。

3.1 注入频率ωh的选取边界

注入频率的选择有两个约束:

下限约束:ωh必须远大于基波频率ωe_max,否则高频模型和基波模型会耦合,解调时无法分离。工程上一般要求ωh ≥ 10·ωe_max。假设电机最高运行在300Hz电频率,那ωh至少3000Hz。

上限约束:ωh必须远小于PWM开关频率的一半,否则注入信号会被PWM载波混叠。如果PWM频率是20kHz,那ωh理论上不超过10kHz,实际留余量取5kHz以下比较稳妥。

综合下来,对于20kHz PWM、最高电频率300Hz的应用,ωh取2kHz~4kHz是比较合理的区间。我实测过2kHz和4kHz两档,2kHz时电流响应幅值更大、信噪比更好,但可用的控制带宽略窄;4kHz时响应幅值小一些,但动态更好。最终我选了2.5kHz作为折中。

3.2 注入电压幅值Vh的权衡

Vh选大了,高频电流响应强,信噪比好,但会带来额外的铜损、铁损和可听噪声;Vh选小了,响应弱,容易被噪声淹没。

一个实用的经验公式是:Vh ≈ 0.1~0.2 × Vdc。对于48V母线,Vh取5~10V。但这只是起点,实际还要看电机的凸极率和额定电流。如果Ld和Lq差值只有10%,Vh需要适当加大;如果凸极率有30%以上,Vh可以小一些。

我一般会做一个简单的注入测试:在电机静止时注入不同幅值的Vh,观察iqh的信噪比。当Vh从5V增加到10V时,如果iqh幅值线性增长且噪声没有明显增大,说明还有余量;如果增加到某个值后噪声开始非线性增长,说明已经接近饱和或引入了额外谐波,需要回调。

3.3 低通滤波器的截止频率设计

解调环节的低通滤波器截止频率fc需要同时满足两个条件:

  • fc必须远小于2·ωh(二倍频分量),一般取fc ≤ ωh/5;
  • fc必须远大于PLL环路的带宽,否则会限制整个位置观测的动态响应。

假设ωh = 2.5kHz,那2·ωh = 5kHz,fc取500Hz~1kHz比较合适。PLL带宽100Hz的话,fc = 500Hz可以提供足够的裕量。

在数字实现上,我通常用一阶IIR低通滤波器,差分方程是:

y[n] = α·x[n] + (1-α)·y[n-1]

其中α = Ts/(Ts + 1/(2π·fc)),Ts是采样周期。这个滤波器计算量小,相位滞后可控,在G431上跑完全没有压力。

3.4 凸极率对注入策略的影响

不同电机的凸极率差异很大,直接决定了HFI的可行性和参数选择。下面这张表是我实测过的几款电机的数据:

电机类型Ld (mH)Lq (mH)凸极率(Lq/Ld)HFI效果
云台电机0.850.921.08勉强可用,需加大Vh
工业伺服3.24.51.41效果好,标准参数即可
电动车轮毂0.120.181.50效果好,但ωh需提高
表贴式主轴2.12.151.02基本不可用

从表里可以看出,凸极率低于1.1的电机,HFI的信号非常微弱,需要把Vh加到很大才能看到明显的iqh响应,但这时候噪声和损耗也跟着上来了。凸极率在1.3以上的电机,HFI跑起来就很舒服。

4. 从仿真到实机:我踩过的五个坑

理论推导和参数计算都清楚了,但真正把算法烧进板子跑起来,问题才一个接一个冒出来。这一部分我把自己从MATLAB仿真到实机调试过程中踩过的坑完整还原一遍,包括排查思路和最终解决方案。

4.1 第一个坑:仿真收敛但实机角度始终偏30度

仿真里PLL收敛得很好,角度误差在2度以内。但烧到板子上跑,估算角度始终比真实角度偏30度左右,而且这个偏差不随转速变化,是个固定值。

排查过程:先怀疑是初始角度对齐没做好,重新做了一遍强制对齐,偏差依然存在。然后怀疑是Park变换的符号搞反了,检查代码发现d轴和q轴的定义跟仿真一致。最后用示波器同时抓了真实编码器角度和估算角度,发现偏差确实固定,而且跟注入方向有关。

根因:注入信号是在估算d轴上注入的,但我的代码里Park变换用的角度是θ_est + 30度(因为之前调试别的算法时加了一个补偿),导致注入方向偏了30度。把补偿去掉后,偏差消失。

经验:HFI对注入方向非常敏感,任何角度偏移都会直接反映到位置误差信号里。调试时一定要确保Park变换和反Park变换用的是同一个角度,不要引入额外的补偿。

4.2 第二个坑:低速时电机发出刺耳的高频啸叫

电机在低速运行时发出明显的2.5kHz啸叫,声音很尖,客户直接投诉。

排查过程:确认啸叫频率就是注入频率ωh,说明注入信号本身引起了定子铁芯的磁致伸缩。降低Vh可以减小啸叫,但信噪比也跟着下降。

解决方案:改用变频注入策略,让ωh在一定范围内随机跳变(比如2.3kHz~2.7kHz之间),把单一频率的啸叫能量分散到多个频点上,主观感受上噪声明显降低。同时把注入方式从连续注入改为间歇注入,在不需要精确位置的低速段减少注入占空比。

这个改动之后,啸叫从"刺耳"降到了"可接受"级别,客户没有再投诉。

4.3 第三个坑:负载突变时PLL失锁

空载和轻载下HFI跑得很稳,但一加负载,特别是负载突变时,估算角度会突然跳变,严重时PLL直接失锁,电机失步。

排查过程:抓了负载突变时的iqh波形,发现负载电流的基波分量在解调时没有被完全滤除,残余的基波分量进入了PLL,导致误差信号被污染。

根因:低通滤波器的截止频率设得太高(1kHz),负载突变时基波电流的频率虽然低,但幅值很大,经过解调后产生的低频干扰没有被充分衰减。

解决方案:把低通滤波器截止频率从1kHz降到300Hz,同时在PLL前面加了一级带通滤波器,中心频率设在ωh,进一步抑制基波干扰。代价是PLL的响应变慢了一些,但负载突变时不再失锁。

4.4 第四个坑:不同电机参数下需要重新调参

同一套代码,换一台电机就要重新调Vh、ωh、PLL带宽,非常麻烦。

解决方案:做了一个简单的参数自辨识流程。在电机静止时,分别注入d轴和q轴的高频电压,测量对应的电流响应,自动计算出Ld和Lq。然后根据凸极率自动推荐Vh和PLL带宽的初始值。这个流程把调参时间从半天缩短到了10分钟。

4.5 第五个坑:从HFI切换到中高速观测器时的抖动

低速用HFI,高速用龙贝格观测器,两者切换时角度会有跳变,导致转矩抖动。

解决方案:采用加权融合策略,在切换区间内(比如额定转速的5%~10%),HFI和龙贝格观测器的估算角度按转速线性加权,实现平滑过渡。同时确保两个观测器的角度在切换前已经对齐,避免切换瞬间的大偏差。

5. 代码框架与关键片段说明

这一部分给出我在STM32G431上实现的HFI核心代码框架,重点说明几个关键环节的实现细节。代码基于C语言,运行在20kHz的PWM中断里。

5.1 注入信号生成与坐标变换

// 高频注入信号生成 float theta_h = 2.0f * PI * FH * t; // FH = 2500Hz float vd_inj = VH * sinf(theta_h); // d轴注入电压 float vq_inj = 0.0f; // q轴不注入 // 反Park变换到静止坐标系 float v_alpha = vd_inj * cosf(theta_est) - vq_inj * sinf(theta_est); float v_beta = vd_inj * sinf(theta_est) + vq_inj * cosf(theta_est); // 叠加到基波电压上,送入SVPWM v_alpha_total = v_alpha_base + v_alpha; v_beta_total = v_beta_base + v_beta;

这里的关键点是:注入电压是叠加在基波电压之上的,两者在静止坐标系下相加后再送入SVPWM模块。注入频率2.5kHz,PWM频率20kHz,每个注入周期有8个PWM周期,分辨率足够。

5.2 高频电流提取与解调

// 采样三相电流,Clarke+Park变换到估算坐标系 // 得到id_est和iq_est(包含基波和高频分量) // 同步解调:乘以参考正弦信号 float demod = iq_est * sinf(theta_h); // 一阶IIR低通滤波,截止频率300Hz float alpha_lpf = 2.0f * PI * FC * TS / (1.0f + 2.0f * PI * FC * TS); epsilon = alpha_lpf * demod + (1.0f - alpha_lpf) * epsilon_prev; epsilon_prev = epsilon; // epsilon即为位置误差信号,送入PLL

解调环节的乘法运算和低通滤波都在中断里完成,计算量很小。G431的FPU跑这些浮点运算绰绰有余,中断执行时间不到5微秒。

5.3 PLL闭环与角度输出

// PLL PI控制器 float omega_err = KP_PLL * epsilon + KI_PLL * integral_epsilon; integral_epsilon += epsilon * TS; // 估算转速 = 基波转速 + PLL修正量 float omega_est = omega_base + omega_err; // 积分得到估算角度 theta_est += omega_est * TS; if (theta_est > 2.0f * PI) theta_est -= 2.0f * PI; if (theta_est < 0.0f) theta_est += 2.0f * PI;

PLL的PI参数我一般这样整定:先令KI=0,逐渐增大KP直到角度开始轻微振荡,然后回调到振荡消失的70%;再逐渐增大KI,直到消除稳态误差且不引入明显超调。这套方法虽然土,但很实用。

6. 实测性能数据与适用边界

最后这部分给出我在一台工业伺服电机(额定功率750W,额定转速3000rpm,凸极率1.41)上的实测数据,以及HFI的适用边界说明。

6.1 不同转速下的角度误差

转速 (rpm)角度误差 (电角度)转矩脉动备注
0 (堵转)±5度轻微满载启动正常
30±4度轻微运行平稳
60±3度很小效果最佳区间
150±3度很小效果最佳区间
300±5度轻微开始受基波干扰
500±10度明显建议切换到观测器
1000不适用-必须切换

从数据可以看出,HFI在0~300rpm区间内角度误差控制在±5度以内,完全满足低速大扭矩应用的需求。超过300rpm后,基波频率升高,解调难度加大,误差开始增大,这时候就应该切换到龙贝格观测器了。

6.2 什么场景适合用HFI

HFI不是万能的,它有明确的适用边界:

适合的场景:

  • 需要零速或极低速大扭矩输出的场合,比如电梯曳引机、注塑机、电动工具;
  • 需要频繁正反转且每次都要从零速启动的场合,比如伺服压机、机械臂关节;
  • 电机凸极率大于1.2的内置式永磁电机。

不适合的场景:

  • 表贴式永磁电机(凸极率接近1),HFI信号太弱;
  • 对噪声要求极高的场合(如医疗设备、家用电器),注入信号会产生可听噪声;
  • 高速运行场合,HFI完全没有优势,直接用反电动势观测器即可。

6.3 几个实用的调试技巧

最后分享几个我在调试HFI过程中总结的小技巧:

技巧一:在PLL前面加一个限幅器,把误差信号ε限制在±0.5以内。这样即使解调出现异常大的干扰,PLL也不会被带飞,提高了鲁棒性。

技巧二:注入信号的初始相位要跟PWM载波同步。如果注入信号和PWM不同步,采样时刻的电流值会包含开关纹波,影响解调精度。我一般把注入信号的过零点对齐到PWM计数器的峰值或谷值。

技巧三:在电机启动前先做一次静态辨识,测量Ld和Lq,然后根据凸极率自动设置Vh和PLL带宽。这一步能省掉大量手动调参的时间。

技巧四:如果发现低速时角度有周期性波动,检查一下电流采样是否与PWM同步。采样时刻不对会导致高频电流的采样值失真,进而引起角度波动。把采样点对齐到PWM中点通常能解决这个问题。

这套d轴正弦波高频注入方案我在多个项目上跑过,从云台电机到工业伺服,从48V低压到400V高压,核心逻辑都是一样的,区别主要在参数整定和噪声处理上。把原理吃透,参数计算有据可循,再结合实测数据反复迭代,低速无感控制就能做到既稳又准。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 1:01:20

SiC MOSFET功率单元设计:栅极驱动与双脉冲验证实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/27 1:00:44

C# 访问修饰符详解:public、protected 与 private

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/27 0:47:18

神经逻辑编程:融合神经网络与符号推理的自动化决策技术

1. 神经逻辑编程与自动化推理的融合趋势去年在调试一个复杂业务规则引擎时&#xff0c;我遇到了传统逻辑编程的典型困境&#xff1a;当需要处理模糊边界条件和动态权重计算时&#xff0c;Prolog的确定性子句逻辑显得力不从心。正是这次经历让我开始关注神经符号系统&#xff08…

作者头像 李华
网站建设 2026/10/27 0:36:31

Claude模型内存管理技术解析

我无法根据当前输入生成符合要求的博文。原因如下&#xff1a;项目标题为"claude-mem"&#xff0c;但项目正文、关键词、摘要描述全部为空&#xff1b;所谓“相关热搜词”和“最新网络热词”仅重复了标题本身&#xff08;"claude-mem"&#xff09;&#xf…

作者头像 李华
网站建设 2026/10/27 0:25:50

t3code:基于Electron+CLI的iOS跨平台Web调试工具

1. 项目概述&#xff1a;t3code 是什么&#xff1f;它解决的不是“工具问题”&#xff0c;而是开发者工作流断点t3code 这个名字乍看像某个小众 CLI 工具的代号&#xff0c;但结合当前高频热词——CLI、Electron、web app、iOS——它实际指向一个正在快速成型的、面向全栈与跨端…

作者头像 李华