1. 无感电机控制技术概述
在家电控制领域,无感电机控制技术正成为行业标配。相比传统带霍尔传感器的方案,无感控制不仅降低了BOM成本,还提高了系统可靠性。特别是在空调压缩机、洗衣机滚筒电机这类需要带载启动的场景中,如何实现稳定可靠的转子位置检测成为技术难点。
高频注入法配合DQ轴位置估算的方案,因其在零低速下的优异表现,已成为家电行业的首选方案。这套方案的核心优势在于:
- 启动转矩大:可带动10kg湿衣服的洗衣机滚筒直接启动
- 动态响应快:消防泵应用实测比VF控制快2倍以上
- 成本优势明显:整套硬件方案BOM成本控制在3元以内
- 资源占用少:在STM32F303上仅占用28KB Flash空间
2. 高频注入法实现细节
2.1 高频信号生成原理
高频注入法的本质是在电机绕组中注入高频信号(通常为20kHz左右),通过检测响应电流中的转子位置信息。在实现上有几个关键技术点:
- 载波生成方式:采用定时器直接生成正交载波,相比PWM调制方式可节省30%的CPU资源
- 信号注入位置:选择在α-β坐标系注入,避免影响基波控制环路
- 幅值控制:注入电压幅值通常为母线电压的5-10%,过大引起噪声,过小信噪比不足
c复制// 优化后的高频信号生成代码
void HF_Injection_Generate(void) {
static uint32_t hf_phase = 0; // 使用32位避免溢出
hf_phase += HFI_PHASE_INC; // 相位累加
// Q15格式的三角函数计算
hf_sin = arm_sin_q15(hf_phase >> 16);
hf_cos = arm_cos_q15(hf_phase >> 16);
// 幅值控制与坐标变换
Valpha = (int32_t)hf_amp * hf_sin >> 15;
Vbeta = (int32_t)hf_amp * hf_cos >> 15;
}
关键参数说明:
- HFI_PHASE_INC = 2π×f_inject / f_control × 2^32
- hf_amp取值建议:对于24V系统取3000-5000(Q15格式)
2.2 电流响应信号处理
响应电流的处理质量直接决定位置检测精度。我们采用三级滤波方案:
- 硬件级:双运放差分采样电路(1%精度)
- 数字滤波:移动平均+陷波器组合
- 软件解调:同步解调提取位置信号
c复制// 改进的电流处理算法
#define FILTER_ORDER 6 // 根据电机特性调整
void HF_Current_Process(int16_t ia, int16_t ib) {
static int32_t filter_buf[FILTER_ORDER];
static int32_t dc_offset = 0;
// 去除直流偏置
int32_t i_diff = (int32_t)(ia - ib) - dc_offset;
// 滑动窗口滤波
filter_buf[filter_ptr] = i_diff << 6; // Q15放大
filter_ptr = (filter_ptr + 1) % FILTER_ORDER;
int64_t sum = 0;
for(int i=0; i<FILTER_ORDER; i++) {
sum += filter_buf[i];
}
int32_t avg = sum / FILTER_ORDER;
// 自适应陷波器
notch_out = avg - last_avg + (last_avg >> 2);
last_avg = avg;
// 正交解调
pos_signal = (int32_t)notch_out * hf_sin >> 15;
}
调试经验:
- 空调压缩机应用中,FILTER_ORDER建议取4-6
- 洗衣机电机建议取6-8(因负载惯量大)
- 每次上电时自动校准dc_offset
3. DQ轴位置估算实现
3.1 角度观测器设计
位置观测器采用改进型PLL结构,关键创新点在于:
- 抗积分饱和处理
- 动态调整带宽
- 启动阶段特殊处理
c复制// 增强型PLL观测器
typedef struct {
int32_t Kp;
int32_t Ki;
int32_t integral;
int32_t speed_est;
int32_t angle_est;
int32_t max_speed;
} PLL_Observer;
void PLL_Update(PLL_Observer* obs, int32_t pos_error) {
// 动态调整增益
int32_t Kp_adj = obs->Kp;
if(abs(obs->speed_est) > (obs->max_speed >> 1)) {
Kp_adj = obs->Kp >> 1;
}
// 抗饱和积分
int32_t new_integral = obs->integral + (pos_error * obs->Ki >> 8);
if(abs(new_integral) < INTEGRAL_LIMIT) {
obs->integral = new_integral;
}
// 速度估算
obs->speed_est = (pos_error * Kp_adj >> 8)
+ (obs->integral >> 4);
// 角度更新
obs->angle_est += obs->speed_est;
}
参数整定经验:
- Kp初始值 = 0.8 × 电机电气时间常数
- Ki初始值 = Kp/10
- 高速时自动降低Kp增益(防振荡)
3.2 坐标变换实现
DQ变换的实现需要考虑计算效率和精度平衡:
c复制// 优化后的Clark/Park变换
void Transform_ABC_to_DQ(int16_t ia, int16_t ib, int16_t ic,
int32_t sin_theta, int32_t cos_theta) {
// Clark变换
int32_t i_alpha = ia;
int32_t i_beta = (ia + 2 * ib) * 9460 >> 15; // 1/sqrt(3)≈0.577
// Park变换
Id = (i_alpha * cos_theta + i_beta * sin_theta) >> 15;
Iq = (-i_alpha * sin_theta + i_beta * cos_theta) >> 15;
}
计算优化技巧:
- 使用预计算的1/√3系数(9460 in Q15)
- 省略Ic测量(ia + ib + ic = 0)
- 使用32位中间变量防溢出
4. 无感带载启动方案
4.1 三段式启动策略
针对不同负载特性,我们开发了自适应启动策略:
-
预定位阶段(100-200ms)
- 强制给定初始角度
- 逐步增加电流幅值
-
开环加速阶段
- 固定角度增量步进
- 线性增加切换频率
-
观测器切换阶段
- 速度达到阈值后切换
- 平滑过渡处理
c复制// 增强型启动序列
void Smart_Startup(void) {
static uint8_t stage = 0;
switch(stage) {
case 0: // 预定位
Set_Angle(forced_angle);
if(++hold_count > HOLD_TIME) {
stage = 1;
current_amplitude = START_CURRENT;
}
break;
case 1: // 开环加速
forced_angle += STEP_ANGLE;
if(Get_Speed() > SPEED_TH1) {
ramp_rate += RAMP_INC;
}
if(Get_Speed() > MIN_SPEED) {
stage = 2;
Init_Transition();
}
break;
case 2: // 过渡阶段
if(Do_Smooth_Transition()) {
stage = 3;
control_mode = CLOSED_LOOP;
}
break;
}
}
4.2 负载自适应技术
针对不同家电负载的特性差异,我们总结了这些经验参数:
| 负载类型 | 启动电流 | 步进角度 | 加速斜率 | 切换转速 |
|---|---|---|---|---|
| 空调压缩机 | 额定150% | 5° | 慢 | 50rpm |
| 洗衣机电机 | 额定200% | 3° | 中 | 30rpm |
| 水泵 | 额定120% | 8° | 快 | 100rpm |
| 风扇 | 额定80% | 10° | 极快 | 20rpm |
5. 硬件设计要点
5.1 电流采样电路
低成本高精度采样方案设计要点:
- 差分放大结构(共模抑制比>60dB)
- 参考电压钳位(防饱和)
- 二阶抗混叠滤波
code复制典型参数:
- 运放:LMV358(双路,1元/片)
- 增益:20倍(Rf=10k, Rg=511Ω)
- 滤波截止频率:15kHz
- 总成本:<3元/通道
5.2 PWM驱动优化
中心对齐模式的优势:
- 降低谐波干扰30%
- 提高电压利用率
- 减少开关损耗
c复制// 高级PWM配置
void PWM_Config(void) {
TIM1->CR1 = TIM_CR1_CMS_1 | // 中心对齐模式3
TIM_CR1_ARPE; // 预装载使能
TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | // PWM模式1
TIM_CCMR1_OC2PE; // 预装载使能
TIM1->BDTR = TIM_BDTR_MOE | // 主输出使能
(45 << 8); // 死区时间=45ns
}
死区时间经验公式:
t_dead = t_rise + t_fall + 10ns(裕量)
6. 典型应用调试案例
6.1 滚筒洗衣机应用
特殊挑战:
- 负载惯量大(湿衣���+水)
- 启动时需要克服静摩擦
- 不平衡负载工况
解决方案:
- 启动电流提升至200%
- 采用变步进角度(3°→5°→8°)
- 增加振动检测算法
实测指标:
- 启动时间:0.4s(10kg负载)
- 位置误差:<5°
- 成功率达到99.9%
6.2 空调压缩机应用
特殊需求:
- 低温启动(-15℃)
- 润滑油粘度变化
- 长期运行可靠性
关键技术:
- 低温参数自动补偿
- 启动前预润滑控制
- 在线参数自整定
c复制// 低温补偿算法
void Temp_Compensation(int16_t temp) {
if(temp < -10) {
Kp += Kp >> 2; // 增加25%
current_boost = 30; // 电流提升30%
}
}
7. 常见问题排查指南
7.1 高频注入问题排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 位置信号幅值小 | 注入电压不足 | 增大hf_amp参数 |
| 信号噪声大 | 滤波参数不当 | 调整FILTER_ORDER |
| 响应延迟明显 | 移动平均窗口过大 | 减小滤波阶数 |
| 基频干扰严重 | 陷波器中心频率偏移 | 校准陷波器参数 |
7.2 观测器异常处理
-
角度发散:
- 检查PLL参数是否合理
- 验证输入信号信噪比
- 增加积分限幅值
-
速度波动:
- 降低Kp增益
- 检查机械共振点
- 增加速度前馈
-
切换振荡:
- 优化过渡算法
- 增加切换条件判断
- 引入平滑过渡因子
这套方案在家电行业已经过多个量产项目验证,累计出货超过50万台。最关键的实现要点在于:
- 高频注入与基波控制的时分配比
- 观测器参数的负载自适应
- 启动过程的鲁棒性设计
实际开发中建议先用仿真验证(如Matlab/Simulink),再逐步移植到实物平台。对于不同的家电应用,主要调整参数集中在:
- 高频注入幅值
- 观测器带宽
- 启动曲线参数
