第6课 温控风扇与 PWM 的频率问题

我是潘,曾经是个工程师。这是为 Ardui.Co 制作的 “Arduino 公开课” 系列的入门教程。在第4课第5课,介绍了 PWM 控制 LED 亮度 ,第5.1课,将以温控风扇实验深入了解Arduino 的PWM 功能。有任何疑问请在评论区提出,我会逐一回答。

个人电脑内部的散热风扇有两种,一种是4针的,通过 PWM 控制转速,一般用于 CPU 散热。另外一种则是3针,定速运行,用于机箱、电源等降温。但3针温控的风扇(其中两针为正、负极,一针为霍尔传感器测速,后面会讲到),即使机箱不太热,声音也很吵,现在我们用 Arduino 的 PWM 功能,把它们改造为温控风扇。

DIY的思路很简单,通过传感器监测,如果温度升高,驱动风扇高速运行,如果温度降低,则让风扇速度降下来。

不过,因为 Arduino 的驱动功率很小,我们不能像 LED 实验一样,直接用 Arduino 来驱动风扇。但又不能使用继电器,因为继电器的响应频率很低,不可能转化 PWM 信号。我们需要两只晶体管组成的高速开关电路来实现。风扇电机的驱动电路如下:

电阻 R 不能省,因为Q2工作时基极电流Ibq2高达 10mA ~ 20mA,此时Q1的Vce达 11.4V(12V – Vbq2),此时Q1 最大热功耗为:

Vce * Ibq2 = 11.4V * 20mA = 228mW

由于小三极管缺乏散热的途径,导致热量集聚、温度急升直至烧毁。我们引入一只电阻,提高Q1 的发射极电位,减少热功耗,但阻值不能太大,否则Arduino 要输出更高的电压才能开启Q1。其实,改用电压控件 MOSFET 就不存在这个问题。

温度探测部分,我们采用负温度系数的热敏电阻,其特征是随着温度上升,阻值增加/减少(正温度系数则反之)。

如果要准确的温度控制,可以采用 LM35、LM75 这类温度传感器,后面会详细降到。热敏电阻接线方式与光敏电阻类似,而这次采用的是,温度上升,电阻减少的元件。接线方式如下:

这是目前我们连接过最复杂的电路了。注意:晶体管bce(基极、集电极、发射极)三个引脚排列,即使是同一型号,不同厂家也可能不一样。因此上面只是示意图,连接时必须实际测量一下极性。

这个程序为了演示,设置了只有温度上升,直到 n >= 180 风扇才会启动。由于没有更好的热源,我直接用火加热热敏电阻,温度越高转速越快,直到风扇风大到把火吹灭:

实验中,我们听到风扇电机一直发出“蜂鸣”的声音,这不是电机出现故障,而是因为PWM的频率过低。

无刷电机调速器(电调)一般采用10KHz 的PWM频率(Arduino Uno 除了5、6号端口为980Hz,其他端口都是490Hz),正好落在人的听觉范围,即便是在电机转速不高,也会发出巨大声响。如果使用20KHz 以上的高频 PWM,则可以有效降低噪声。但高频PWM的优势,远不止这点。

PWM驱动过程中,是靠一通一断来对电机调速的,通电的时间长电机转的快,断电的时间长,电机转的慢。不过,电机内电枢电流不能一直保持连续,那么电机的机械特性将明显偏离理论特性,变的很软。

断电时期,电枢绕组的电感将通过续流二极管维持一会。电感越大维持的电流时间越长。如果在电感较小的情况下,电流显然维持不了很长时间。所以高频PWM 能使每个周期内,电机断电时间减少,实现连续电流。但Arduino 怎样才能实现高频PWM 输出呢?在后面的课程会深入讲解。

Leave a Reply

Your email address will not be published. Required fields are marked *