无感FOC做久了,你会发现低速才是真正的分水岭。中高速段随便上一个龙伯格观测器或者滑模观测器,都能把转子位置追着跑;可一到了零速和极低速,反电动势小到还不如采样噪声,传统“基于模型”的无感算法基本集体失灵。这时候如果设备又要求从零速满载直接起动,比如电动压缩机、无人机、水泵、带载皮带机这一类工况,脉振高频电流注入就成了比较能打的方案之一。这篇东西就是把脉振高频电流注入无感FOC从原理到落地的完整思路拆开,讲清楚为什么低速必须靠“灌信号”才能看见转子,注入信号怎么设计、位置误差怎么提取、起动和切换怎么衔接,以及我在现场调试时踩过的一堆坑。
1. 为什么零低速偏偏要“往电机里灌高频电流”
1.1 反电动势观测在零低速为什么失效
先聊一个所有做无感FOC的人都会遇到的根本问题:我们平时用来估算转子位置的那些状态方程,本质上是靠反电动势或者磁链变化来反推位置的。电机转起来,定子绕组切割磁力线产生反电动势,它的大小和转速基本成正比。中高速时反电动势信号强,信噪比高,随便一个扩展卡尔曼或者滑模观测器都能用得风生水起。但转速一掉到几十转甚至零转,反电动势几乎为零,能观测到的信号连死区电压都不如,位置估算精度就完全没法保证。
即使退一步说,可以用定子电压和电流去积分磁链,零速下积分器又会遇到直流偏置、初始值不准、参数漂移这些老大难问题。所以业界很久以前就达成了一个共识:想要在零低速获得可靠的转子位置,必须放弃“看基波信号”的思路,改为“主动向电机注入信号,再从响应中提取位置信息”,这就是高频信号注入法的基本思想。
1.2 凸极效应:转子位置怎么“写”在电感里
高频注入能工作的物理基础,是电机磁路的凸极效应。对内嵌式永磁同步电机来说,永磁体埋在转子铁芯里,导致d轴磁路气隙比q轴大,直观表现就是d轴电感小于q轴电感,也就是Ld < Lq。电感大小为转子位置角度变化,高频电流或电压在这个旋转坐标系里流过时,电感的差异会把转子的位置信息“调制”到高频响应信号里,我们只要想办法解调出来,就知道转子转到哪了。
这里必须提一个常见误区。有人觉得只有内嵌式电机才能用高频注入,表贴式电机Ld约等于Lq,没凸极就没法用。这个说法不全对。表贴式电机虽然没有结构凸极,但电流较大时磁路饱和会让d轴和q轴的有效电感产生差异,这叫“饱和凸极效应”。所以很多表贴式电机的驱动项目在零速起动时也用高频注入方案,只是信号幅度和解调策略需要重新处理,不能直接照搬内嵌式那一套。
1.3 脉振高频电流注入和电压注入、旋转注入有什么不同
高频注入按注入信号的形式可以分成几类:旋转高频电压注入、脉振高频电压注入、脉振高频电流注入、方波注入等等。旋转注入是在静止坐标系里注入一个旋转的高频电压矢量,它的优点是位置误差解调起来比较直观,零速下有不错的鲁棒性;缺点是实现复杂,尤其对电流环的带宽要求高,而且持续旋转注入会带来额外的转矩脉动。
脉振注入是在估计出的转子轴系上,沿着某一固定轴(通常是估计d轴)注入脉振高频信号,这样引起的转矩脉动相对小一些,更适合对噪音和振动敏感的场合。而题目里强调的“脉振高频电流注入”,相比电压注入,最大区别在于注入量是电流指令而不是电压指令。关键是电流指令经过电流环闭环之后,等于直接控制了流过电机的真实高频电流。这样做的好处是抗逆变器非线性能力更强,死区电压误差不容易影响高频电流的相位,而且电流环PI本身能压掉一部分扰动,对高频频率选择没有电压注入那么敏感。
如果把这几种方案放到一张表里对比,会更直观:
| 方案类型 | 注入坐标系 | 抗死区能力 | 实现复杂度 | 转矩脉动 | 适用场合 |
|---|---|---|---|---|---|
| 旋转电压注入 | 静止αβ | 中等 | 较高 | 较大 | 低速带载,对噪音不敏感的工业设备 |
| 脉振电压注入 | 估计dq轴 | 中等 | 中等 | 较小 | 压缩机、风机、泵类起动 |
| 脉振电流注入 | 估计dq轴 | 较强 | 中等偏上 | 较小 | 零低速带载起动,对起动可靠性要求高的场合 |
| 方波电压注入 | 估计dq轴 | 中等 | 中等 | 较小 | 需要更高注入频率、更多增益预算的应用 |
我个人的经验是,如果用脉振电流注入,省掉了很多因电压调制误差导致的高频电流畸变问题,调试起来反而更快。但它有一个前提:电流环必须有足够的带宽去跟踪高频电流指令,不然“我想要的高频电流”和“实际流过的电流”对不上,解调出来的误差信号就失真了。
2. 脉振高频电流注入到底是怎么把转子角度“偷”出来的
2.1 先建立一个“估算轴系”,理解d-q和d’-q’的关系
想弄明白脉振注入的原理,第一件事是分清两个坐标系。一个是电机真实的转子轴系(d-q),另一个是控制器在程序里假设出来的估算轴系(d’-q’)。无感控制的最终目的,就是让d’-q’轴系无限逼近真实的d-q轴系,两者之间的夹角就是我们需要不断校正的位置误差Δθ。当Δθ等于零时,估算角度就等于真实转子角度。
高频信号注入在这个轴系里的位置很讲究。以我最常用的方案为例:在估算d’轴上注入一个余弦形式的高频电流指令,q’轴的高频电流指令给零。这个选择不是拍脑袋决定的。估算d’轴在起动时不一定对准真实d轴,但通常离真实d轴不会差太远。向估算d’轴注入高频电流,会在真实电机里产生一个高频磁动势,由于d轴和q轴磁阻不同,这个磁动势的路径会随着角度偏差变化,最终在q’轴上感应出与Δθ相关的高频电流分量。我们解调的目标就是这个分量。
2.2 高频电流注入与位置误差解调的数学链条
不要被数学公式吓跑,整个链条实际就是三条线串联起来:注入、感应、解调。
第一步是注入。在估算d’轴给出高频电流指令:
[ i_{d'} = I_h \cos(\omega_h t) ]
其中I_h是高频电流幅值,ω_h是高频角频率,t是时间。电流环会帮我们把这个指令跟踪到位,所以真正流入电机的高频电流主要沿d’轴脉振。
第二步是感应。由于真实dq轴系电感不同,且d’轴与d轴之间差了一个Δθ角度,这个高频电流耦合到真实电机里后,会在q’轴产生一个高频响应电流。推导电感方程后,q’轴高频电流的幅值里含有一个与sin(2Δθ)近似成正比的成分。注意这里的“二倍角”,是脉振注入方案最鲜明的特征。它来自把估算轴系下的电流变换到真实轴系时,电感张量的交叉耦合项自动带出的2Δθ项。
第三步是解调。我们先把采样的q’轴电流经过带通滤波器,把高频分量留下,把基波和开关噪声滤掉;然后把滤波后的信号乘以一个与注入信号同频同相的载波cos(ω_h t),再用低通滤波器把高频载波成分去掉,剩下的就是与(\sin(2\Delta\theta))成正比的直流误差信号:
[ \varepsilon = K \sin(2\Delta\theta) ]
其中K由高频电流幅值、电感参数和解调链路的增益共同决定。把这个误差信号送进一个PI调节器或者龙伯格位置观测器,通过闭环不断修正估算角度,最终让Δθ收敛到零,我们就得到了转子位置。
2.3 一个小细节:为什么经常用“二倍角误差”而不是直接角度
由于误差信号是sin(2Δθ),当Δθ比较小时,sin(2Δθ)近似等于2Δθ,这是线性收敛的基础。但这也带来一个麻烦:sin(2Δθ)在Δθ=0和Δθ=π时都等于零。换句话说,估算角度如果正好差了180度,也就是把N极当成S极了,误差信号一样为零,位置观测器会“非常自信地”锁在一个错误角度上。这就是零速起动时电机突然反转的根源之一。
所以任何采用脉振高频注入(包括脉振电压注入)的方案,都必须额外解决“磁极方向辨识”问题。常见做法是注入一个相对较大的直流或低频脉冲电流刺激磁路饱和,比较不同方向电流响应,或者注入高次谐波利用饱和不对称性判断N/S极。这一环节看起来只是系统启动流程里的一小段,但在实际项目里非常重要,稍后我在排查章节里会专门讲。
2.4 为什么电流注入方案的有效性高度依赖电流环
标题特别点出“脉振高频电流注入”,我认为它比电压注入更强调电流环带宽和相位延迟的匹配。你想,电流环带宽决定了它能不能在开关周期内把高频指令电流“复现”出来。如果注入频率取得太高,超过电流环响应能力,实际高频电流幅值会被严重衰减,相位也会滞后很多,解调出来的误差增益变小,甚至会因为相位补偿不对导致位置收敛方向错误。
所以我的经验是,做电流注入方案时,要对电流环做一次实际的频响摸底,最好通过仿真或者在线辨识确认在注入频率点上的电流环增益衰减和相位滞后是多少,然后在解调链路上补一个固定的相位补偿量。
3. 从零到一搭一套可落地的实现:注入生成、解调、起动与切换
3.1 注入信号生成的离散实现
在数字控制器里,高频信号不可能模拟实现,全部是离散计算。实现脉振电流注入时,我推荐在电流环给定端直接叠加一个余弦信号,而不是在电压端叠加。意思是:id_ref = 基波给定 + I_h * cos(ω_h t),iq_ref = 基波给定 + 0。然后让电流环闭环跟踪。
用C语言风格的伪代码来描述核心逻辑,大概是这个样子:
// 每个PWM中断里执行 float theta_h = theta_h_accum; // 高频角度积分量 float i_h_cmd = I_amp * cosf(theta_h); // 高频电流指令 // 叠加到基波电流给定 id_ref_hf = id_ref_base + i_h_cmd; iq_ref_hf = iq_ref_base; // 更新高频角度,freq_h为注入频率,T_sample为中断周期 theta_h_accum += 2.0f * PI * freq_h * T_sample; if (theta_h_accum > 2.0f * PI) theta_h_accum -= 2.0f * PI;这段代码里有个容易被忽略的问题:高频角度累加应该用浮点累加还是查表。我用的是角度累加法,好处是没有表项点数限制,频率可以连续调整;坏处是如果中断周期不严格恒定,相位会有微小抖动,对解调相位补偿稍有影响。实测下来,只要中断由PWM定时触发而不是任务调度触发,相位抖动可以忽略。如果控制器性能太弱,也可以用固定点数查表方式,相当于一种简化处理。
3.2 解调链路的离散滤波与位置观测器
解调链路是整套方案的胜负手。我习惯的滤波器组合是:先对q轴电流做带通滤波,中心频率放在注入频率上;再做乘法解调;再做低通滤波。带通滤波器可以用二阶IIR实现,实现代码片段如下:
// 带通滤波,中心频率freq_h,Q值取1~2 float bp_q = b0 * iq_sampled + b1 * iq_delay1 + b2 * iq_delay2 - a1 * bp_delay1 - a2 * bp_delay2; // 乘法解调 float demod = bp_q * cosf(theta_h + phase_comp); // 低通滤波,截止频率100~300Hz float err_lpf += lpf_gain * (demod - err_lpf); // 位置观测器,输入为err_lpf,输出为估算角度theta_est和估算速度omega_est float omega_est += omega_pi_kp * err_lpf; float theta_est += (omega_est + omega_pi_ki * err_lpf_integrator) * T_sample;这里的phase_comp是解调载波相位补偿。补偿量来源有两个:一个是电流环在注入频率点上的相位滞后,另一个是滤波器和采样延时带来的相位偏置。如果不补偿,虽然位置观测器仍可能收敛,但收敛精度会下降,低速带载时会出现角度偏置,直接体现为电流变大但力矩却不够。
位置观测器用不用PI都行,我见过很多实现直接用PI就好。原因是脉振注入解调后的误差信号本身就近似线性,PI足够让角度收敛。没必要一上来就上龙伯格,虽然加了龙伯格在高频注入模式下抗噪声更稳,但参数多了以后调试成本高。
3.3 注入频率、幅值和滤波器截止频率怎么选
参数整定这件事,不同电机差别很大,但可以先给一套比较稳妥的起步值。
注入频率方面,下限要高于基波明显频率,上限受限于开关频率和电流环带宽。我一般取开关频率的1/10到1/6。比如开关频率10kHz,注入频率取1kHz到1.6kHz,再高电流环跟踪能力就跟不上了。注入频率也不能太低,否则跟基波频率靠得太近,滤波器分离难度大。
注入电流幅值方面,取额定电流幅值的5%到15%是常见区间。幅值太小,解调信号信噪比不够;幅值太大,会产生明显高频噪声和额外铜损,电机低速运行时也会有嗡嗡声。我建议先按10%起步,转速能稳定起来后逐步降到5%左右,观察位置估算波动和起动可靠性。
滤波器截止频率方面,带通滤波器的品质因数Q取1~2之间比较合适,Q太高会导致相位陡变,Q太低又会把基波信号混进来。低通滤波器截止频率一般取注入频率的1/10到1/20,通常100Hz~300Hz,太高会留下载波残余,太低会拖慢位置观测器的动态响应。
这里给一个“按比例整定”的实用经验:在没有现成参数的情况下,把注入频率设成额定基频的30倍以上,把注入电流幅值设成额定电流的8%,先跑通低速起动,再根据噪音和发热微调。
3.4 零速起动和向中高速无感运行切换的衔接逻辑
高频注入不能在全速度范围里一直用,因为到了中高速段,反电动势信号已经很充足,继续高频注入纯属浪费,而且高频损耗和噪音会变大。所以完整的无感FOC系统都是双模式:零低速用高频注入,中高速用反电动势观测器。
起动流程按我的习惯一般是这样:
- 上电后先用预定位或短脉冲判断出初始磁极方向,得到一个粗略角度;
- 在这个角度上建立初始d’-q’轴系,开启脉振高频电流注入;
- 位置误差观测器快速收敛到真实角度,电机电流环以力矩指令带载起动;
- 转速升到额定转速的5%~10%后,启动反电动势观测器;
- 两种观测器输出做加权过渡,一般是高频注入权重线性减小,反电动势观测器权重线性增大;
- 完全切到反电动势观测器,关断注入信号。
最容易被忽略的是第5步。如果直接切换,两个观测器在同一时刻的角度输出可能有几度偏差,切换瞬间电流会发生突变,电机出现振动甚至失步。我在某压缩机项目里就遇到过切换瞬间过流报警的情况,后来加了约200ms的加权过渡带,问题就消失了。
4. 现场调试最常见的坑与排查实录
4.1 起动瞬间电机反转
现象:给定正向力矩指令,电机却反向转一小段角度,然后才被拉回来;严重时直接反转松负载。
排查思路:先怀疑初始磁极方向辨识环节。因为高频注入解调的误差信号是sin(2Δθ),在Δθ=π附近同样收敛。解决方法是单独做一次磁极极性检测,利用磁路饱和特性,给q轴或d轴方向施加一个短时脉冲,比较电流响应幅度,或者直接做预定位。我在调试时先用预定位再切高频注入,基本堵死了反转问题。
4.2 起动电流大但力矩不足
现象:高频注入已经收敛,电流也确实上去了,但电机就是不往前走,或者转得特别软。
排查思路:多半是解调相位补偿没调好。位置误差信号每偏一个角度,电流环给出的力矩方向就不准确;看起来电流有效值很大,实际上大部分电流消耗在产生径向力而不是切向转矩。先把解调相位从0度开始扫描,每15度试一次,找出让实际电机出力最大的相位点。这个办法虽然土,但在没有频率响应分析仪时非常实用。
4.3 低速运行时高频噪音和振动偏大
现象:零低速下能明显听到电机发出高频啸叫,用手摸壳体有细密振动。
排查思路:这是注入幅值过大最直接的表现。如果只是降低电流幅值不太管用,可以考虑改变注入频率点,避开电流环谐振峰以及机械结构固有频率。另外检查低通滤波器之后有没有载波泄漏,载波泄漏本身会加剧转矩脉动。把低通截止频率再降低一点,或者改用二阶巴特沃斯而不是一阶惯性滤波,噪音一般都能降下来。
4.4 位置观测器偶尔“跑飞”
现象:运行一段时间无感状态正常,但偶尔角度估算突然跳变、电流失控。
排查思路:先确认是不是电流采样噪声在特定工况下污染了解调信号,比如死区补偿没做好的场合,q轴电流里带有大量6次谐波成分。这种情况下带通滤波器的选择性不够,高频误差信号被谐波干扰,偶尔会把观测器“骗”出收敛区。处理办法是加强死区补偿,或者把带通滤波器改为更高阶数的级联形式,并检查采样点是否正好避开了上下桥臂开关瞬态。
4.5 注入信号导致母线电流波形异常
现象:用电流探头盯母线电流,发现高频成分很明显。
排查思路:高频注入电流确实会产生母线电流高频分量,这是正常现象。但如果母线电容选型偏小,或者母线布局电感偏大,高频分量会引起电压纹波,反过来干扰控制器采样。解决办法是增加母线电容容值、优化采样时刻,保证采样窗口避开PWM开关沿即可。还有一个额外好处:高频注入的信号幅度本身是可控的,确认损耗在可接受范围后一般不用太紧张。
5. 说点调试之外的真心话
脉振高频电流注入这套方案,优点和代价都摆在台面上。优点是零速低速起动能力强,不依赖反电动势,参数敏感性比纯模型方案低很多;代价是需要额外增加注入和解调的算力,需要忍受高频损耗,还要花不少精力在相位补偿和滤波参数整定上。我个人实际调试下来的体会是:算法本身不难,真正决定能不能落地的往往是细节——初始极性检测有没有做扎实、相位补偿有没有调准、电流环带宽有没有留够、切换过渡有没有设计好。如果你正准备把一台零低速起动类型的设备改成无感FOC,不妨先把这套方案跑通,把平层问题解决之后再去碰更复杂的算法迭代。调试顺利的话,那次起动平稳得会让你觉得前面所有为了“看见转子位置”而做的努力都值了。