第三章 执行器驱动电路:直流无刷风机驱动、电子膨胀阀步进电机驱动、四通换向阀继电器驱动、PWM调速原理
各位同学,咱们今天聊点硬核的——执行器驱动电路。说实话,暖通空调系统里那些风机、阀门、换向阀,说白了就是靠这些电路才能“动起来”。我做了十几年嵌入式硬件,踩过的坑比你们见过的电路板还多。今天就把这些经验掰开揉碎了讲给你们听。
3.1 直流无刷风机驱动
先说说直流无刷风机。这玩意儿在空调里太常见了,室内机、室外机都在用。为什么不用有刷电机?你想想看,有刷电机那碳刷磨着磨着就没了,维护起来多麻烦。无刷电机没有这个烦恼,寿命长、效率高、噪音还低。
驱动无刷电机,核心就是控制三相绕组的通电顺序。我习惯用六步换向法,说白了就是六个步骤,每个步骤让两相绕组通电,产生旋转磁场。具体怎么实现?看代码:
// 六步换向表
const uint8_t commutation_table[6] = {
0b001001, // U+ V- W悬空
0b001100, // U+ V悬空 W-
0b010100, // U悬空 V+ W-
0b011000, // U- V+ W悬空
0b010001, // U- V悬空 W+
0b001001 // U悬空 V- W+
};
void motor_step(uint8_t step) {
// 根据霍尔传感器位置选择换向步骤
uint8_t pattern = commutation_table[step];
// 写入PWM寄存器
PWM1_LOAD(pattern & 0x3F);
}
我在项目中遇到过一个问题:电机启动时抖动得厉害。查了半天,发现是启动时的换向频率不对。后来我加了个开环启动策略——先给一个固定频率的方波,等电机转起来再切到闭环控制。嗯,这个坑你们以后可能会遇到。
3.2 电子膨胀阀步进电机驱动
电子膨胀阀用的是步进电机。步进电机的好处是精确——你给它一个脉冲,它就转一个角度。空调系统里调节制冷剂流量,靠的就是这个。
驱动步进电机,我常用的是两相四拍或者两相八拍。四拍就是A、B、A反、B反这样轮流通电。八拍呢,中间加了半步,精度更高。你们看这个表格:
| 拍数 | A相 | B相 | A反 | B反 |
|---|---|---|---|---|
| 1 | 1 | 0 | 0 | 0 |
| 2 | 1 | 1 | 0 | 0 |
| 3 | 0 | 1 | 1 | 0 |
| 4 | 0 | 0 | 1 | 1 |
我曾经在一个项目里,电子膨胀阀老是卡死。拆开一看,步进电机驱动芯片过热了。为什么?因为驱动电流设得太大了。后来我把电流从1.5A降到0.8A,问题就解决了。记住,步进电机不是电流越大越好,够用就行。
3.3 四通换向阀继电器驱动
四通换向阀,说白了就是控制制冷和制热切换的。它里面有个电磁铁,通电就吸合,改变制冷剂流向。驱动它很简单,一个继电器就够了。
但简单归简单,坑也不少。继电器线圈是感性负载,断电时会产生反向电动势。这个电压能到几百伏,如果不加保护,分分钟烧掉你的MCU。我习惯在继电器线圈两端并联一个续流二极管,阴极接电源正极,阳极接线圈另一端。这样反向电动势就被二极管钳位了。
// 继电器驱动代码
void relay_control(uint8_t state) {
if (state) {
GPIO_SetBits(RELAY_PORT, RELAY_PIN); // 吸合
} else {
GPIO_ResetBits(RELAY_PORT, RELAY_PIN); // 断开
}
// 注意:断开后要加一个延时,防止继电器触点抖动
delay_ms(10);
}
我记得有一次,客户反映空调制热时偶尔会突然变成制冷。查了半天,发现是继电器触点粘连了。为什么?因为切换太频繁,触点拉弧了。后来我在软件里加了切换间隔——至少等3秒才能再次切换。嗯,这个问题就再也没出现过。
3.4 PWM调速原理
PWM调速,说白了就是通过改变方波的占空比来控制电机转速。占空比越高,平均电压越高,电机转得越快。这个原理很简单,但实际应用时有很多细节。
PWM的频率怎么选?我一般用1kHz到20kHz之间。频率太低,电机会发出“嗡嗡”声,听着难受。频率太高,MOS管的开关损耗会变大。我习惯用16kHz,人耳听不到,效率也还行。
占空比的分辨率也很重要。8位分辨率就是0-255,16位就是0-65535。我建议用10位以上,这样调速更平滑。你们看这个代码:
// PWM初始化
void pwm_init(void) {
// 设置PWM频率为16kHz
TIM_TimeBaseInitTypeDef tim;
tim.TIM_Prescaler = 72 - 1; // 72MHz / 72 = 1MHz
tim.TIM_Period = 62; // 1MHz / 62 ≈ 16kHz
TIM_TimeBaseInit(TIM2, &tim);
// 设置PWM模式
TIM_OCInitTypeDef oc;
oc.TIM_OCMode = TIM_OCMode_PWM1;
oc.TIM_Pulse = 0; // 初始占空比为0
TIM_OC1Init(TIM2, &oc);
// 使能PWM输出
TIM_Cmd(TIM2, ENABLE);
}
// 设置占空比
void pwm_set_duty(uint16_t duty) {
if (duty > 62) duty = 62; // 限制最大值
TIM_SetCompare1(TIM2, duty);
}
我在项目中遇到过一个问题:PWM调速时电机转速不稳定。查了半天,发现是PWM频率和电机的机械谐振频率重合了。后来我把频率调到18kHz,问题就解决了。所以,选PWM频率时,最好避开电机的谐振点。
好了,这一章的内容就这些。直流无刷风机、电子膨胀阀、四通换向阀、PWM调速,每个都是暖通空调系统里的关键执行器。你们在实际项目中,一定要多注意驱动电路的细节——续流二极管、散热、频率选择、软启动,这些看似不起眼的东西,往往就是问题的根源。
下一章我们聊聊传感器电路,温度、湿度、压力、流量,这些信号怎么采集、怎么处理。到时候见。