Skip to content

第 8 章:控制风扇转起来

8.1 模块原理

此前我们学习了用芯片引脚直接驱动 LED 小灯、蜂鸣器等低功耗元件,本章将介绍需大电流驱动的直流电机。

生活中,洗衣机、电饭煲等大功率电器的功率可达上千瓦,3.3V 的电压无法直接驱动它们。这时,单片机引脚产生的微弱电流会作为开关电信号传输给三极管,由三极管来控制大电流的通断,从而实现用小信号控制大功率电器的目的。

image18.png

image19.jpeg

如上图三极管示意图,基极(B)接收来自单片机 GPIO 引脚的微弱电信号,这个信号就像一个"开关指令"。集电极(C)与发射极(E)则与大功率用电器串联在主供电回路中,这个主供电路可以是 5V 电源,也可以是 220V 的家用电流,也可以是更高电流强度,具体能接什么,看这个三极管的设计。我们上一章讲过的蜂鸣器,其内部驱动电路同样利用了这种"小电流控制大负载"的原理,蜂鸣器上 I/O 接口为上图的基极,蜂鸣器之所以会响,其工作电流来自于发射极长通电流做功。

下面要讲的风扇模块,也是运用这个原理来控制的。和普通电机不同的是,风扇不仅能实现"通电转、断电停",还可以正转和反转。其实原理本质是一样的,风扇的控制模块内置了两个三极管,通过"H 桥接"的方式(类似搭建一个电流换向的桥梁),分别控制电机正转和反转的回路。

如下图的风扇实图所示:

  • VCC 接口:连接风扇的工作电源(比如风扇是 5V 供电就接 5V,如果是 220V 的电机就接 220V)

  • GND 接口:连接公共地线(也就是电源的负极)

  • INA 和 INB 接口:分别连接单片机的两个 GPIO 引脚,用来控制风扇的转向和启停:

    • 当 INA 接高电平、INB 接低电平时,电机正转;

    • 当 INA 接低电平、INB 接高电平时,电机反转;

    • 当两个引脚同时为高电平,或者同时为低电平时,电机都会停止转动。

image20.png

高阶引申:三极管的基极开关并非简单的"有电就开、没电就关",它更像一个可以调节的电阻旋钮。当输入的电信号电压达到设计阈值时,三极管会完全导通;当电压低于阈值时,三极管则会处于截止或放大状态,电流也会随之减弱。以教具中的风扇为例,它有 INA 和 INB 两个控制接口,风扇的最终工作电流大小,取决于这两个接口之间的电势差,因此,假设两个控制接口接入的都是高电平信号,两口之电压之差为 0,基极开关依然没有打开,风扇处于停止状态。

8.2 接线方法

风扇模块Pico说明
VCCVBUS (Pin 40),杜邦线连接5V 供电
INAGP17 (Pin 22),直插面包板风扇正转信号(顺时针)
INBGP16 (Pin 21),直插面包板风扇反转信号(逆时针)
GNDGND (Pin 3),杜邦线连接共地

image21.jpeg

8.3 代码实现

image22.png

为什么中间要停 1 秒?因为需要停一下释放完此前状态的动能,任何优秀的程序控制都不能违背物理定理。

8.4 风扇控制失效的原因和解决办法

学习本章时,有些学员可能会碰到这样的情况:程序明明让风扇正转,它却乱转;让它停,它却停不下来——这就叫"控制失效"。失效最常见的有两类原因:

  • 线松了:风扇模块的 GND、INA(GP17)、INB(GP16)任意一根接触不良,控制信号就会异常;
  • 引脚模式被抢占:用米思齐(Mixly)等软件生成代码时,初始化里会自动多出两行 pinMode,把引脚提前"占"成普通数字口,后面的调速(PWM)就失效了。Mind+ 生成的代码没有这个问题。

完整的排查步骤和原理分析(含 Mind+ 与米思齐的代码对比图),见第四册《跬步编程小车 D3 教程》的附录 B:风扇(H 桥)控制失效的常见原因与排查(教具包风扇接 GP16 / GP17,把附录里的 GP18 / GP19 对应换成 GP17 / GP16 即可)。

不积跬步,无以至千里;万里之行,始于当下。