4、执行器与控制:继电器驱动压缩机、步进电机控制风阀、PWM调速风扇、三极管/MOS管驱动电路
好,咱们进入第四章。这一章讲的是执行器控制,说白了就是嵌入式系统怎么去「动手」——怎么让压缩机转起来、让风阀开合、让风扇调速。这些是暖通空调系统里最基础的物理动作,也是我们嵌入式工程师每天都要打交道的活儿。
我个人习惯把执行器分成两类:一类是「开关型」,比如继电器控制压缩机,要么开要么关;另一类是「调节型」,比如步进电机控制风阀开度、PWM控制风扇转速。两类驱动方式完全不同,但底层都离不开三极管和MOS管这些半导体开关器件。
4.1 继电器驱动压缩机:最简单的开关控制
压缩机是空调系统的心脏。它的启动电流很大,通常是额定电流的5-7倍。所以驱动压缩机,最常用的就是继电器。
继电器本质上是一个电磁开关。我给线圈通电,触点就吸合,压缩机就通电了。断电,触点弹开,压缩机停止。就这么简单。
但这里有个坑——继电器线圈是感性负载。断电瞬间会产生很高的反向电动势。我在项目中遇到过,第一次画板子时没加续流二极管,结果继电器一断开,单片机直接复位了。后来查了半天才发现是反电动势串到了电源线上。
驱动继电器的典型电路是这样的:
// 继电器驱动电路(NPN三极管方案)
// MCU引脚 → 1kΩ电阻 → NPN三极管基极
// 三极管集电极接继电器线圈一端
// 线圈另一端接12V电源
// 线圈两端并联续流二极管
// 三极管发射极接地
// 代码控制(以STM32为例)
HAL_GPIO_WritePin(RELAY_GPIO_Port, RELAY_Pin, GPIO_PIN_SET); // 吸合
HAL_GPIO_WritePin(RELAY_GPIO_Port, RELAY_Pin, GPIO_PIN_RESET); // 断开
你想想看,为什么用三极管而不是直接用单片机引脚驱动?因为继电器线圈需要几十毫安的电流,而单片机引脚只能输出几毫安。三极管在这里就是个电流放大器。
4.2 步进电机控制风阀:精准的位置控制
风阀控制是暖通系统里最常见的调节动作。新风阀、回风阀、排风阀,都需要精确控制开度。步进电机在这里是首选,因为它可以做到开环位置控制——我给它发多少个脉冲,它就转多少步,不需要反馈也能知道位置。
嗯,这里要注意:步进电机有整步、半步、微步三种驱动模式。整步扭矩大但振动也大,半步平滑一些,微步最平滑但扭矩会下降。我个人习惯在风阀控制中用半步驱动,平衡了精度和扭矩。
驱动步进电机需要专门的驱动芯片,比如ULN2003(便宜但功能简单)或者A4988、DRV8825(带微步功能)。我建议初学者先用ULN2003配合28BYJ-48步进电机练手,成本低,不容易烧。
// 步进电机四相八拍控制(28BYJ-48 + ULN2003)
// 引脚定义:IN1=PA0, IN2=PA1, IN3=PA2, IN4=PA3
// 半步序列:A-AB-B-BC-C-CD-D-DA
const uint8_t step_sequence[8][4] = {
{1,0,0,0}, // A
{1,1,0,0}, // AB
{0,1,0,0}, // B
{0,1,1,0}, // BC
{0,0,1,0}, // C
{0,0,1,1}, // CD
{0,0,0,1}, // D
{1,0,0,1} // DA
};
void stepper_step(uint8_t direction) {
static uint8_t step_index = 0;
if(direction == CW) {
step_index = (step_index + 1) % 8;
} else {
step_index = (step_index + 7) % 8;
}
// 输出到GPIO
for(int i=0; i<4; i++) {
HAL_GPIO_WritePin(STEP_PORT, STEP_PINS[i], step_sequence[step_index][i]);
}
HAL_Delay(2); // 2ms步进间隔,太快了会丢步
}
4.3 PWM调速风扇:平滑又节能
风扇调速在暖通系统里太常见了。冷凝器风扇、蒸发器风扇、排风扇,都需要根据温度或压力调节转速。PWM(脉宽调制)是最高效的方式——通过改变占空比来改变平均电压,从而控制转速。
为什么不用调电阻?因为电阻调压会发热,效率低。PWM调速的效率可以做到90%以上,因为MOS管工作在开关状态,导通时压降很小,关断时电流为零。
驱动直流风扇的典型电路:
// PWM控制直流风扇(N沟道MOS管方案)
// MCU PWM引脚 → 10kΩ电阻 → MOS管栅极
// MOS管漏极接风扇负极
// 风扇正极接12V电源
// MOS管源极接地
// 风扇两端并联续流二极管(保护MOS管)
// 代码示例(STM32定时器PWM输出)
// 配置TIM2通道1为PWM模式,频率25kHz
// 25kHz是人耳听不到的范围,避免啸叫
TIM_HandleTypeDef htim2;
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
// 设置占空比,范围0-1000
// 50%占空比
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 500);
// 100%占空比
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 1000);
我曾经在一个项目中,风扇PWM频率设成了1kHz,结果夜深人静的时候能听到明显的啸叫声。后来改成25kHz,问题就解决了。人耳对20kHz以上的频率不敏感,所以工业上常用20-30kHz的PWM频率。
| PWM频率 | 特点 | 适用场景 |
|---|---|---|
| 1kHz - 5kHz | 可能产生可听噪声 | 对噪声不敏感的场合 |
| 10kHz - 20kHz | 噪声较小,MOS管开关损耗适中 | 通用风扇控制 |
| 20kHz - 50kHz | 人耳听不到,开关损耗略大 | 静音要求高的场合 |
4.4 三极管/MOS管驱动电路:开关器件的选择
说到驱动电路,三极管和MOS管是绕不开的两个基本元件。很多初学者搞不清什么时候用三极管,什么时候用MOS管。我简单说说我的理解。
三极管是电流控制器件——我用基极电流来控制集电极电流。它的优点是便宜、驱动简单,缺点是导通时会有饱和压降(约0.2V),大电流下发热明显。
MOS管是电压控制器件——我用栅极电压来控制漏源极导通。它的优点是导通电阻很小(几毫欧到几十毫欧),大电流下几乎不发热,缺点是栅极电容大,开关时需要一定的驱动电流。
我的选择原则很简单:
- 电流小于500mA,用三极管(比如驱动继电器、小指示灯)
- 电流大于500mA,用MOS管(比如驱动风扇、加热器)
- 需要高频开关,用MOS管(比如PWM调速)
来看一个典型的N沟道MOS管驱动电路:
// N沟道MOS管驱动电路(低边驱动)
// 适用于负载一端接电源正极的情况
//
// +12V
// |
// [负载]
// |
// D ---+
// MOS管 |
// S ---+
// |
// GND
//
// 栅极驱动:MCU引脚 → 10kΩ电阻 → MOS管栅极
// 栅极与源极之间并联10kΩ下拉电阻(防止浮空导通)
// 选型参考(低压侧驱动):
// 小电流(<2A):IRLZ44N(逻辑电平MOS管,3.3V可完全导通)
// 中电流(2-10A):IRF540N(需要5V以上栅极电压)
// 大电流(>10A):IRFP260N(注意散热)
最后说一个我踩过的坑。有一次我用MOS管驱动一个电磁阀,结果MOS管莫名其妙就烧了。查了半天才发现,电磁阀是感性负载,关断时产生的反电动势击穿了MOS管。后来在负载两端并联了一个续流二极管,问题就解决了。记住:只要是感性负载(继电器、电磁阀、电机),驱动电路都必须加续流二极管。
好了,这一章的内容就这些。继电器、步进电机、PWM风扇、三极管/MOS管驱动,这四个知识点是暖通嵌入式系统里最基础也最常用的执行器控制技术。下一章我们会讲传感器采集,把温度、湿度、压力这些物理量变成数字信号,让系统真正「感知」环境。