1. 高频注入技术的前世今生
高频信号注入法在电机控制领域已经存在了二十余年,最早可以追溯到上世纪90年代末期。这项技术的本质是在电机控制系统中人为注入特定高频信号,通过检测响应信号来获取转子位置信息。与传统的传感器方案相比,它最大的优势在于可以实现无位置传感器控制(Sensorless Control),这在成本敏感、环境恶劣的应用场景中具有不可替代的价值。
我最早接触高频注入是在2012年参与某工业伺服项目时,当时团队为了解决编码器在高温环境下的可靠性问题,尝试采用高频注入作为冗余方案。实测发现,在零速和低速区间(<5%额定转速),高频注入的位置估算精度甚至优于普通增量式编码器。不过这项技术对电机参数变化较为敏感,需要针对具体电机型号进行细致调参。
2. 脉振方波注入原理剖析
2.1 信号注入机制
脉振方波注入(Pulsating Square-Wave Injection)是目前工程实践中最为成熟的方案之一。其核心思想是在d轴(直轴)注入高频电压信号:
code复制Vdh = Vh·sign(sin(ωh·t))
Vqh = 0
其中Vh为注入电压幅值(通常为5-20V),ωh为注入频率(1-2kHz范围)。这种非对称注入方式会在q轴(交轴)感应出包含转子位置信息的高频电流响应。
关键经验:注入频率选择需避开控制系统带宽(通常为电机基频的5-10倍)和PWM开关频率的谐波区间,否则会与正常控制产生干扰。我们曾因忽略这点导致电流环持续振荡。
2.2 位置信息提取原理
高频响应电流经过带通滤波后,其包络信号与转子位置θ存在如下关系:
code复制Iqh_envelope ≈ K·Vh·sin(2θ)
其中K是与电机电感参数相关的系数。通过锁相环(PLL)或反正切运算,即可解算出转子位置。某大厂方案中采用了改进型二阶广义积分器(SOGI)进行信号提取,其传递函数为:
matlab复制H(s) = k·ωh·s / (s² + k·ωh·s + ωh²)
这种结构对频率偏移具有较强鲁棒性,实测位置误差可控制在±0.1rad以内。
3. 核心代码实现拆解
3.1 注入信号生成模块
某大厂方案采用定时器中断实现精准的方波注入,关键代码如下:
c复制// 配置TIM1为1.5kHz载波频率
TIM1->ARR = (SystemCoreClock/2)/1500 - 1;
TIM1->CCR1 = TIM1->ARR * duty_cycle;
// 中断服务程序
void TIM1_UP_IRQHandler(void) {
static uint8_t injection_phase = 0;
if(injection_phase ^= 1) {
Vd_ref = Vh + Vd_control; // 注入正脉冲
} else {
Vd_ref = -Vh + Vd_control; // 注入负脉冲
}
TIM1->SR &= ~TIM_SR_UIF; // 清除中断标志
}
调试技巧:实际项目中我们发现,注入信号与PWM载波同步可显著降低电流谐波。建议将TIM1的计数器时钟源配置为与PWM定时器同源。
3.2 响应信号处理流程
信号处理链路由三个关键环节组成:
- 电流采样:在PWM周期中点进行同步采样,消除开关噪声
- 带通滤波:采用32阶FIR滤波器,通带1.2-1.8kHz
- 位置解算:基于改进型PLL结构
c复制typedef struct {
float sin_2theta; // sin(2θ)
float cos_2theta; // cos(2θ)
float omega_est; // 估算转速
float theta_est; // 估算位置
} PLL_TypeDef;
void PLL_Update(PLL_TypeDef *pll, float iqh_hf) {
float error = iqh_hf - pll->sin_2theta;
// 比例积分环节
pll->omega_est += Ki * error * pll->cos_2theta;
float delta_theta = Kp * error * pll->cos_2theta + pll->omega_est;
// 角度更新
pll->theta_est += delta_theta * Ts;
if(pll->theta_est > PI) pll->theta_est -= 2*PI;
if(pll->theta_est < -PI) pll->theta_est += 2*PI;
// 三角函数更新
pll->sin_2theta = sinf(2 * pll->theta_est);
pll->cos_2theta = cosf(2 * pll->theta_est);
}
4. 工程实践中的关键挑战
4.1 参数敏感性分析
高频注入法对电机电感参数的敏感性可通过以下公式量化:
code复制∂θ_error/∂Ld ≈ (Lq-Ld)/(2·Ld·Lq)·(1/K)
这意味着:
- 凸极率(Lq/Ld)越大的电机,位置检测精度越高
- 电感温度漂移10%可能导致位置误差增加3-5度
- 某电动车项目实测数据显示,电机温度从25℃升至120℃时,需动态补偿电感参数变化
4.2 电磁兼容设计要点
我们在某医疗设备项目中遇到的典型干扰问题及解决方案:
| 现象 | 根源分析 | 解决措施 |
|---|---|---|
| 位置估算跳变 | 逆变器死区效应 | 注入信号幅值提升至15V |
| 电流采样失真 | ADC时钟耦合噪声 | 采用光纤隔离采样 |
| 系统谐振 | 机械共振频率1.8kHz | 调整注入频率至2.2kHz |
5. 性能优化实战记录
5.1 动态幅值调整算法
传统固定幅值注入在轻载时信噪比不足,我们开发了基于转速的自适应算法:
c复制float adaptive_injection_amplitude(float speed) {
const float Vh_min = 5.0f; // 最小幅值
const float Vh_max = 20.0f; // 最大幅值
const float omega_th = 0.2f; // 切换阈值(标幺值)
if(fabs(speed) < omega_th) {
return Vh_max;
} else {
return Vh_max - (Vh_max-Vh_min)*(fabs(speed)-omega_th)/(1.0-omega_th);
}
}
实测表明该算法可降低30%的高频损耗,同时保持零速位置精度。
5.2 多速率执行架构
为平衡计算负荷和动态性能,某工业驱动器采用如下任务划分:
| 任务 | 执行周期 | 关键操作 |
|---|---|---|
| 电流环 | 50μs | PWM更新、ADC采样 |
| 速度环 | 500μs | 速度估算、PI调节 |
| 位置解算 | 100μs | PLL更新、滤波运算 |
| 参数辨识 | 10ms | 在线电感测量 |
这种架构在STM32F407上实测CPU占用率仅65%,留有充足余量应对突发负载。