4. 高频注入法(HFI):脉振高频注入与旋转高频注入的原理与实现
无感启动到了最关键的环节——零速和低速怎么搞?
说实话,早期我做无感项目时,最头疼的就是电机刚启动那会儿。反电动势几乎为零,观测器根本没法用。后来接触了高频注入法(HFI),才算是真正解决了零速启动的难题。
这一章,我们就来聊聊两种主流的高频注入方式:脉振高频注入和旋转高频注入。我会结合自己的项目经验,把原理、实现和坑都讲清楚。
4.1 为什么需要高频注入?
无感控制的核心问题在于:低速时反电动势太小,信噪比极低。传统的滑模观测器或龙伯格观测器在零速附近基本失效。
高频注入法的思路很巧妙——既然电机本身有凸极效应(d轴和q轴电感不一样),那我主动注入一个高频信号,通过检测电机的响应来提取转子位置信息。
说白了,就是用高频信号“探测”电机的凸极性。你想想看,就像用声呐探测海底地形一样,我们发射一个已知信号,然后分析回波。
核心前提:高频注入法要求电机具有凸极效应(Ld ≠ Lq)。对于表贴式永磁同步电机(SPMSM),凸极率很低,高频注入效果较差。我建议你在项目初期先确认电机参数,别盲目套用。
4.2 脉振高频注入(Pulsating HFI)
4.2.1 基本原理
脉振高频注入,顾名思义,是在估计的d轴上注入一个高频正弦电压信号。这个信号是脉动的,不是旋转的。
注入信号形式:
Vdh_inj = Vh * cos(ωh * t)
Vqh_inj = 0
其中Vh是注入幅值,ωh是注入频率。通常注入频率选在500Hz~2kHz之间,幅值控制在额定电压的5%~10%。
为什么只往d轴注入?因为d轴和q轴电感不同,当转子位置有误差时,q轴会产生一个与位置误差相关的高频电流响应。我们通过解调这个q轴电流,就能得到位置误差信号。
4.2.2 信号解调过程
我个人习惯把解调过程分为三步:
- 带通滤波:从采样电流中提取高频分量,滤除基波和开关噪声。
- 同步解调:将高频电流乘以sin(ωh*t),把信号搬移到低频。
- 低通滤波:提取直流分量,这个直流分量正比于位置误差sin(2Δθ)。
解调后的误差信号:
ε ≈ K * sin(2Δθ) ≈ 2K * Δθ (当Δθ很小时)
这个误差信号送入锁相环(PLL),就能收敛到真实位置。
我的经验:带通滤波器的Q值很关键。Q值太高,响应慢;Q值太低,信噪比差。我一般取Q=10~20,具体要看注入频率和采样率。曾经在一个项目中,我因为滤波器参数没调好,折腾了两天才找到问题。
4.2.3 实现要点
| 参数 | 推荐范围 | 注意事项 |
|---|---|---|
| 注入频率 | 500Hz ~ 2kHz | 避开PWM开关频率及其谐波 |
| 注入幅值 | 5% ~ 10% 额定电压 | 幅值过大会产生 audible noise |
| 带通滤波器带宽 | 100Hz ~ 300Hz | 带宽越窄,响应越慢 |
| PLL带宽 | 20Hz ~ 50Hz | 与速度环带宽协调 |
避坑指南:我曾经在一个高功率密度项目中,注入幅值设得太高,导致电机发出刺耳的啸叫声。后来把幅值从10%降到6%,同时优化了注入频率,问题才解决。记住,高频注入本质上是“噪声”,要在信噪比和听觉舒适度之间找平衡。
4.3 旋转高频注入(Rotating HFI)
4.3.1 基本原理
旋转高频注入是在静止坐标系(αβ)上注入一个旋转的高频电压矢量。这个矢量以角频率ωh匀速旋转。
注入信号形式:
Vα_inj = Vh * cos(ωh * t)
Vβ_inj = Vh * sin(ωh * t)
旋转高频注入的好处是:它不需要估计坐标系,直接利用电机的凸极效应在静止坐标系中产生一个与位置相关的高频电流响应。
4.3.2 信号处理流程
旋转高频注入的信号处理比脉振稍微复杂一些:
- 采样三相电流,变换到αβ坐标系。
- 带通滤波提取高频分量。
- 将高频电流变换到与注入信号同步旋转的坐标系(dq_h)。
- 提取负序分量(包含位置信息)。
- 通过反正切或PLL提取转子位置。
关键点在于:正序分量不包含位置信息,负序分量才包含。所以我们需要把正序滤掉,或者通过对称分量法提取负序。
4.3.3 两种方式的对比
| 对比项 | 脉振高频注入 | 旋转高频注入 |
|---|---|---|
| 注入坐标系 | 估计d轴 | 静止αβ轴 |
| 信号处理复杂度 | 较低 | 较高 |
| 对凸极率要求 | 中等 | 较高 |
| 收敛速度 | 较快 | 中等 |
| 抗谐波能力 | 较弱 | 较强 |
| 工程实现难度 | 简单 | 中等 |
我个人更倾向于在量产项目中使用脉振高频注入,因为实现简单,调试工作量小。但如果你遇到电机凸极率很低或者谐波干扰严重的情况,旋转高频注入可能是更好的选择。
4.4 核心逻辑框架
下面这张图展示了高频注入法的整体信号流程,我把它画成了SVG,方便你理解整个链路。
4.5 工程实现中的关键问题
4.5.1 注入频率的选择
注入频率不是随便选的。我总结了几条原则:
- 避开PWM谐波:注入频率不能是PWM频率的整数倍或分数倍,否则会引入严重的谐波干扰。
- 考虑采样率:根据奈奎斯特定理,采样率至少是注入频率的2倍。实际工程中我建议至少4倍以上。
- 避开机械谐振:注入频率不能落在机械系统的谐振频段内,否则可能激发机械振动。
4.5.2 滤波器设计
滤波器是高频注入的灵魂。我常用的滤波器设计思路:
- 带通滤波器:中心频率等于注入频率,带宽100~300Hz。我用的是二阶巴特沃斯,兼顾平坦度和相位特性。
- 低通滤波器:截止频率20~50Hz,用于提取解调后的直流分量。这里我建议用一阶RC等效,简单可靠。
小技巧:如果你用定点DSP,注意滤波器系数的量化误差。我曾经在16位定点芯片上吃过亏,滤波器实际响应和设计值差了20%。后来改用双精度中间变量累加,问题才解决。
4.5.3 启动切换策略
高频注入法不能一直用下去。当电机转速升高到一定程度(通常5%~10%额定转速),反电动势足够强了,就要切换到反电动势观测器。
切换过程我建议这样做:
- 在切换区(比如5%额定转速),同时运行高频注入和观测器。
- 比较两者的位置估计值,如果偏差小于某个阈值(比如5度电角度),开始平滑切换。
- 采用加权平均的方式,逐渐降低高频注入的权重,增加观测器的权重。
- 切换完成后,关闭高频注入信号,降低系统损耗。
我曾经踩过的坑:有一次切换时没有做平滑过渡,直接硬切,结果电机瞬间失步,电流飙升。从那以后,我每次做切换都会预留至少100ms的过渡时间,并且监控位置误差,一旦超限就保持高频注入模式。
4.6 代码实现示例
下面是一个脉振高频注入的核心代码片段,我用C语言风格写的,方便你移植到自己的项目中。
// 脉振高频注入 - 核心处理函数
// 调用频率:与PWM频率同步(10kHz)
#define HFI_INJ_FREQ 1000.0f // 注入频率 1kHz
#define HFI_INJ_AMP 0.08f // 注入幅值 8% 额定电压
#define HFI_BPF_CENTER 1000.0f // 带通中心频率
#define HFI_BPF_BW 200.0f // 带通带宽
static float theta_hfi = 0.0f; // 注入信号角度
static float pos_est = 0.0f; // 估计位置
void HFI_Process(float id_fb, float iq_fb, float vd_ref, float vq_ref)
{
// 1. 生成注入信号
float inj_signal = HFI_INJ_AMP * cosf(theta_hfi);
// 2. 叠加到d轴电压指令
float vd_inj = vd_ref + inj_signal;
float vq_inj = vq_ref; // q轴不注入
// 3. 更新注入角度
theta_hfi += 2.0f * PI * HFI_INJ_FREQ * DT;
if (theta_hfi > 2.0f * PI) theta_hfi -= 2.0f * PI;
// 4. 对q轴电流进行带通滤波(提取高频分量)
float iq_hfi = BPF_Process(iq_fb, HFI_BPF_CENTER, HFI_BPF_BW);
// 5. 同步解调:乘以sin(ωh*t)
float demod = iq_hfi * sinf(theta_hfi);
// 6. 低通滤波提取直流分量(位置误差)
float pos_error = LPF_Process(demod, 30.0f); // 30Hz截止
// 7. PLL更新估计位置
pos_est += (Kp_pll * pos_error + Ki_pll * pos_error_integral) * DT;
pos_error_integral += pos_error * DT;
// 输出估计位置给电流环和速度环
SetEstimatedPosition(pos_est);
}
这段代码看起来简单,但实际调试时你会发现,每个环节都有坑。滤波器参数、PLL系数、注入幅值,都需要根据具体电机和硬件平台仔细调优。
4.7 小结
高频注入法是无感启动的核心技术之一。脉振高频注入实现简单,适合大多数凸极电机;旋转高频注入抗干扰能力强,适合对鲁棒性要求高的场景。
我个人建议:先从脉振高频注入入手,把信号链路调通,再根据实际效果决定是否需要切换到旋转注入。毕竟,工程上“够用”比“花哨”更重要。