ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

高频方波注入:无感FOC零低速位置观测的核心技术

高频方波注入:无感FOC零低速位置观测的核心技术

做过FOC无感控制的工程师,应该都有过这种矛盾体验:电机转起来容易,停下来也容易,真正让人头疼的是让它在零速和极低速下死死地盯住转子位置。中高速段有反电动势帮忙,滑模观测器、龙贝格观测器都能干得不错;可一旦转速掉到零附近,反电动势归零,整套位置估计算法直接“失明”。这个场景,恰好是高频方波注入配合FOC无感控制最能发挥价值的地方——它不依赖反电动势,而是利用电机本身的凸极效应来感知转子位置,从而把零低速的无感控制重新“点亮”。

这篇文章我会从原理、工程实现、方案对比到实机调试的坑,完整走一遍。适合正在做无感FOC方案、准备把零低速段做扎实的工程师,也适合刚接触高频注入、想搞清楚它到底在“注入什么”的初学者。我会尽量用做项目时的那种口吻来讲,公式不多,重点放在“为什么这么干”和“实际怎么落地”。

1. 为什么无感FOC一到零低速就变成“盲人摸象”

1.1 反电动势观测器的天花板在哪

无感FOC最核心的问题只有一个:控制器不知道转子在哪。中高速下我们敢用无感,本质是赌“反电动势足够大”。反电动势幅值正比于转速,转速越高信号越强,观测器的信噪比越好,位置估计就越稳。但转速一往下掉,反电动势就线性变小,到零速时直接归零。

这时候滑模观测器里赖以工作的反电动势项消失,状态方程里的有效激励没了,位置估计自然收不住。有人会说:“那我用I/f启动,先拉起来再切观测器行不行?”这能应付一些轻载场合,但遇到零速大负载、外部力矩反转、大惯量停机再启动这类工况,I/f开环和反电动势观测器之间的接缝处非常容易崩。说白了,反电动势观测器的天花板是物理决定的:没有速度,就没有电动势,没有电动势,就无米下锅。

1.2 位置信息的“第二载体”:凸极效应

那零速下到底还能靠什么?答案是电机本身的不对称。内嵌式永磁同步电机(IPMSM)的转子磁钢埋在铁芯里,导致d轴磁路比q轴窄,宏观上呈现d轴电感小于q轴电感,也就是存在凸极(saliency)。这玩意儿有个特别好的性质:它不随转速消失,转子上只要存在几何或磁路上的不对称,站在定子侧看进去的高频阻抗就会随转子角度周期变化。

所以,思路就打开了:与其被动等待反电动势,不如主动向电机注入一个高频激励,然后去“听”电流响应里携带的位置信息。这个思路跟雷达有点类似——你不确定目标在哪,就主动发射信号,通过回波的差异去反推目标方位。凸极效应就是那个“回波差异”的物理来源。

当然有人会问:表贴式电机(SPM)Ld≈Lq,几乎没有凸极,是不是就不能用高频注入了?严格说,表贴电机本身凸极很弱,但加上饱和效应和定子齿槽等因素,也能在负载状态下挤出一点“饱和凸极”或“空间凸极”。只不过信号比IPMSM弱很多,调试难度高。实际项目里,高频注入用得最多最稳的还是IPMSM。

1.3 谁在真正需要零低速无感性能

我们得先想清楚,这个东西是给谁用的。伺服系统需要零速锁轴和低速高动态跟踪,换伺服电机通常带编码器,但在很多成本和集成度敏感的场合,无感方案开始向上渗透;电动工具、家电压缩机、风机水泵这类应用,要么不想装位置传感器,要么装传感器的环境太恶劣,只能在控制器里硬解位置;还有一些新能源汽车的辅助驱动、驻车类应用,也对零低速无感提出了明确要求。在这些场景里,高频方波注入往往不是“可选优化”,而是“唯一能打”的方案。

2. 高频方波注入的工作原理:从凸极到位置信息的完整链路

2.1 在“估计坐标系”里干活:γδ坐标系与真实dq坐标系的偏差

无感控制的尴尬在于:真实转子位置我们不知道,但所有矢量控制计算都需要一个转子位置。于是我们只能在控制器里假想一个转子位置,叫估计角度θ_est,然后用它把三相电流变换到一个假想的“估计转子坐标系”里。

在FOC里,我们用真实转子坐标系dq做电流环控制,用估计坐标系γδ做位置观测。两个坐标系之间差一个角度θ_err,定义成真实位置减去估计位置。当θ_err等于零时,估计坐标系与真实坐标系完全重合,此时FOC的电流环磁场定向才是准的。所以问题被转化成:如何把θ_err变成一个可以被测量、可以被控制的量。

2.2 方波电压注入与电流响应中的sin(2θ_err)信号

现在想象力再往前走一步。我们在估计坐标系的γ轴上,强行叠加一个高频方波电压指令,频率远高于电流环带宽,电流环PI根本来不及响应,于是电流在电压作用下只能“顺着电感走”,近似线性爬升或跌落。

如果电机是各向同性、完全不凸极,那么注入在γ轴上的电压只会在γ轴产生电流变化,δ轴电流不会有任何响应。但电机偏偏有凸极,在γδ坐标下看,电感矩阵不是对角阵,γ轴上的电压会在δ轴“蹭”出一股电流差值。这个差值的大小和符号,恰好和2倍的位置误差角有关系。

把高频电压方程按离散时间近似化简,忽略电阻压降和电流环响应,可以得到一个关键结果:在两个相邻的注入半周期里,δ轴电流的差分值里包含一项sin(2θ_err)。写成一行就是:

Δi_δ ≈ - Vinj · Δt · ΔL / (Ld·Lq) · sin(2θ_err)

其中Vinj是注入电压幅值,Δt是半周期时长,ΔL=(Ld-Lq)/2是凸极强度系数,Ld、Lq是真实电感。这个式子很漂亮:位置误差被调制到了一个我们能够直接观测的电流信号上。注意,我们并不是先知道真实dq轴再去注入,我们是在估计坐标系里乱碰一下,结果电流响应把“估计坐标系和真实坐标系的偏差”给暴露出来了——这正是我们想要的东西。

2.3 用角度跟踪器把误差压到零

拿到了带误差信息的信号ε,后面的工作就清爽了。当θ_err比较小时,sin(2θ_err)约等于2θ_err,可以近似成一个线性误差信号。经典做法是把ε送进一个锁相环(PLL)或角度跟踪观测器:先用反正切结构提取误差,再用PI调节器把误差收敛到零,PI输出就是估计电角速度,再积分一步得到估计角度。

这里要特别提一句:sin(2θ_err)本身有一个固有的π电角度的多解问题——你只知道误差,但分不清转子的N极和S极,实际位置有可能差180度电角度。所以工程上做初始位置检测时,必须在方波注入之后再做一次磁极极性判断,常见的方法是施加一个定向脉冲电流,利用磁饱和效应去分辨N/S极。很多刚起步的人只盯住了凸极信号,忘了极性判断,结果启动时偶尔会“反着走”,这属于完整的零低速方案里必须补齐的一环。

3. 高频方波注入信号设计与离散化实现

3.1 注入极性与PWM同步:让电流采样“卡”在正确的时刻

从原理到代码,第一件事是把注入方波和PWM载波对好相位。工程上最常见的做法是让注入频率和载波频率保持整数倍关系同步。比如10kHz的PWM,注入频率选5kHz,也就是每两个载波周期切换一次方波极性;也有人直接用和开关频率相等的方波注入,这种配置对采样时序的要求更高,但解调的数据率也更高。

前提是:每个注入半周期内必须有一个相对稳定的电流采样窗口,而且采样点要避开开关动作引起的瞬变尖峰。实际项目里我习惯用中心对齐PWM,让ADC在每个载波周期的中点触发采样,此时逆变器开关状态相对稳定,电流纹波也比较小。这个细节看起来不起眼,但很多仿真好、实机崩的项目,问题就出在采样点没卡对位置。

3.2 电流差分解调的一种实现思路

方波注入相比正弦注入的一个最大优点,就是解调逻辑简单粗暴:相邻两个半周期,分别采样δ轴电流,然后做差,再乘上注入极性符号,就得到误差信号。为什么做差有效?因为相邻半周期之间,基波电流和反电动势变化非常小,做差会把低频分量消掉;而注入方波极性发生翻转,高频电流响应恰好跟着翻转,做差之后信号反而增强。

下面给一段演示性的伪代码,方便理解主循环里的关键顺序:

// PWM中断服务函数,每两个载波周期切换一次注入极性 static uint8_t half_cycle = 0; static float i_delta_prev = 0.0f; static float epsilon; // 生成注入极性:+1 或 -1 int16_t pol = (half_cycle & 0x01) ? 1 : -1; // 把方波电压叠加到gamma轴电压环输出上 v_gamma_ref += pol * V_INJ; // 在注入电压作用到电机之后,同步采样并完成Clark/Park变换 float i_gamma, i_delta; sample_current_and_transform(&i_gamma, &i_delta); // 差分加极性解调,得到位置误差信号 if (half_cycle > 0u) { epsilon = (float)pol * (i_delta - i_delta_prev); // epsilon ≈ K * sin(2 * theta_err) } // 送进角度跟踪器/锁相环 angle_tracker_update(epsilon); i_delta_prev = i_delta; half_cycle++;

代码是演示性质的,真实项目里的顺序要比这复杂:需要处理ADC采样结果什么时候有效、PWM零时刻的更新点、一拍的电压延时补偿,还要保证角度跟踪器的更新频率和注入极性切换频率一致。但核心思想就是这么四步:叠电压、采电流、做差分、送PLL。把这四步想通了,整个方案就通了一半。

3.3 注入幅值怎么定:太小看不见,太大会“吵死人”

注入电压幅值是调参里最直观的一个旋钮。给得太小,高频电流响应淹没在采样噪声和逆变器非线性里,位置误差信号信噪比不够,位置环就会抖;给得太大,高频电流会引起附加损耗、扭矩脉动,还会发出插件人耳能察觉的电磁噪声。

我的经验是先用一个相对保守的幅值起步,例如母线电压的2%~5%,把解调信号抓出来看波形。重点观察两点:一是sin(2θ_err)波形是否干净,有没有被死区纹波污染;二是高频电流的峰峰值是否占到了额定电流的10%以内,最好控制在5%上下。在这个基础上再往下慢慢压幅值,找到一个“噪声还能接受但信号依然可分离”的边界。低压48V系统和540V系统因为母线平台不同,注入幅值差别很大,不要照搬别人的参数,一定要自己在示波器和电流波形上确认。

另外,注入频率也影响幅值选择:频率越高,同样电压下电流爬升时间越短,Δi就越小,所以高频注入通常要配上足够的电压幅值才能把信号抬出来。频率、幅值、采样窗口这三个变量是联动的,调参时要一起看。

4. 高频方波注入与高频正弦注入的工程对比

4.1 滤波器延时的差别决定了带宽上限

很多老方案用的是高频正弦注入,在估计d轴注入一个正弦电压,然后通过带通滤波器(BPF)提取同频电流分量,再做同步解调。这个方案成熟、参数少、好理解,但它有一个绕不开的缺点:带通滤波器有相位滞后和幅值衰减,注入频率一般只能选在1~2kHz以下,滤波器的群延时直接拖累了位置观测器的闭环带宽。低速动态响应稍微一高,整个环路就跟不上。

方波注入则扬长避短:它用“同步差分”代替带通滤波器,在算法层面把高频响应分离出来,不需要为了滤出单一频率而牺牲相位。注入频率可以提高到5kHz甚至更高,位置观测器带宽可以做到几百赫兹。在我们实测的某伺服项目中,同样的电机和控制器,正弦注入方案的位置环带宽被滤波器限制得很死,换成方波注入后低速动态明显改善,带的负载也更大。

4.2 对硬件和采样时序的敏感度不同

但方波注入不是免费的午餐。因为它吃的是差分信号,任何采样误差、开关瞬态、死区补偿残差,都会被直接放大到误差信号里。而正弦注入因为先过带通滤波器又过低通滤波器,反而天然“洗掉”了不少噪声,对电流采样精度和逆变器非线性的容忍度更好。

我在调试中体会到一句话:方波注入是在用“高要求”换“高性能”。它的高性能建立在PWM同步采样做得好、电流传感器标定准确、死区补偿到位这些前提下。如果你的硬件平台采样抖动大、ADC同步触发的时序没有锁紧,那做方波注入会很痛苦,可能还不如先用正弦注入把功能跑起来。

4.3 选型时的真实场景建议

具体到方案选型,我的观点很直接:

维度高频正弦注入高频方波注入
注入频率通常1~2kHz以下可与开关频率同频或半频
信号分离方式带通+低通滤波同步差分
位置观测器带宽几十Hz量级可达数百Hz
对采样时序要求中等苛刻
对逆变器非线性容忍度较高较低
实现复杂度较低中等偏高
典型应用压缩机、风机等低动态场景伺服、机器人关节、高动态无感驱动

如果应用只是压缩机启动、风机低速运行,对动态要求不高,用正弦注入甚至I/f加切换就能过关,没必要承担方波注入的调试成本。但如果你做的是伺服级无感控制、机器人关节、或者要求零速满转矩输出,那方波注入基本是绕不过去的选择。

5. 从仿真到实机:我在实机调试中踩过的坑与对策

5.1 PWM一拍延时:为什么你算的误差总“偏相位”

仿真里很多时候都在理想模型上跑,忽略了一个关键的离散化事实:控制器在第n个周期计算出的注入电压指令,要到第n+1个周期才会真正作用到电机端上。而电流采样又是在当前周期内完成的,所以你把“当前周期的电流”和“上一周期的电流”做差分时,实际上已经隔了一拍甚至两拍的电压作用时间。

这个一拍延时在低速时影响不大,但转速一提上来,位置就会带一个与转速有关的固定偏角,表现为角度估计始终领先或落后真实位置一拍。解决思路有两种:简单一点,在角度跟踪器输出上做动态补偿,按角速度乘上PWM周期修正;严谨一点,把电压作用延时建模到误差提取公式里,在仿真阶段就用离散模型把这拍算进去。我强烈建议做仿真的朋友直接使用离散域模型,不要用纯连续域模型,否则这个坑你在实机上早晚会遇到。

5.2 死区与管压降:误差信号里混进来的谐波

零低速工况下,逆变器死区时间和开关管压降的影响会被放大,因为这些非线性带来的电压误差是相对固定的,而电机反电动势很小,两者比例失衡很严重。实测解调出来的误差信号里会出现6次电频率的波纹,严重时还有明显的2倍频分量,位置跟踪器被这个纹波推着走,电机会发出“咔咔”的抖动声。

我踩过这个坑之后,做了三件事才压下去:第一,把死区补偿做好,尤其是电流过零点附近的补偿精度;第二,在误差信号进入PLL之前加一个低频纹波抑制,最简单的做法是用一个截止频率合适的低通或陷波器;第三,千万别为了“快速收敛”把PLL带宽调得特别高,带宽过高会把死区纹波完整放大,输出角度抖得像振铃一样。位置纹波和跟踪带宽之间是矛盾关系,实际标定时要折中处理,按负载工况分别验证。

5.3 凸极消失的极端工况:磁饱和与交叉耦合

还有一个让很多人措手不及的情况:重载下磁饱和会让凸极效应减弱,甚至部分消失。IPMSM在大电流工况下d轴磁路饱和厉害,Ld下降,ΔL变小,误差信号的增益变小,观测器盲目地加大PLL带宽去追,反而引入噪声;同时,负载电流引起的交叉耦合项也会混进解调结果,让“误差信号”不再纯粹是sin(2θ_err),里面夹带了负载相关的附加偏置。

对策上没有银弹。我实际处理过的一个项目里,做法是提高注入幅值来撑住信噪比,同时针对不同的负载电流区间,在解调环节里加一个查表补偿的偏置校正,最后把PLL参数分空载、半载、满载三组适配,启动时根据当前电流状态切换。虽然繁琐,但效果稳定。这里也想提醒一句:如果电机选型时凸极率本身就很小,那高频注入方案的先天条件就很差,再怎么写算法都是带着手铐跳舞,方案评估阶段就要先测电机参数。

5.4 低速到中高速的观测器切换

方波注入一般只管到中低速,转速上来后反电动势信号足够强,继续用高频注入反而浪费性能和带宽,一般会切换到滑模或磁链型反电动势观测器。这里最怕两件事:一是切换瞬间角度估计跳变,电流环被“甩”一下;二是两个观测器的速度估计值有偏差,导致转矩输出突变。

我建议采用软切换策略:在切换区间让两个观测器同时工作,按转速比例加权合成最终位置和速度,等角度差收敛到很小时再逐步切到新的观测器上。这比“到了阈值硬切”要平滑得多。额外还要处理一个细节:切换完成后,把当前角度和速度状态无扰动地接入电流环和速度环,避免控制器内部积分器重置带来的冲击。

做过一段时间的方波注入之后,我自己的体会是:这套方案的理论门槛并不算高,真正的门槛在于把每一个离散延时、采样时序、补偿细节都在实机上验证清楚。方波注入让我意识到,无感控制中低速段的最大敌人不是算法不够现代,而是对物理和离散化边界条件的敬畏不够。对正在折腾无感FOC的朋友,我最后留一个小建议:从零速带载起步,先把误差信号送到虚拟示波器里看清楚波形长什么样,再去动PLL参数,很多“方案不稳定”的问题,其实在误差信号那个环节就已经暴露了。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进