第16课 增强供电稳定性 多传感器并行运作

我是潘,曾经是个工程师。这是为 Ardui.Co 制作的 “Arduino 公开课” 系列的入门教程。当传感器越来越多,电流越来越大,Arduino 薄弱的供电能力将给系统的稳定带来挑战,本课将谈谈如何提供稳定的电源。有任何疑问请在评论区提出,我会逐一回答。

Arduino Uno、Mage2560 等开发板,R3以上版本的主供电一般是由 AMS1117-5.0,这是一块 LDO(低压差稳压电源),在供电接口上只要输入 6.3V 以上的电压,就可以稳定输出 5V。而旧版Arduino,采用LM7805,则需要7V以上的输入电压。输入电压越低,稳压芯片自身的功耗就越底。

根据Datasheet 主要参数如下:
最大输入电压:15V
输出电压:5.0V ±2%(空载)±4%(负载)
输出电流:800mA
截止温度:125°C

这块 LDO 可以提供高达800mA的电流,但根据 Arduino 官方说明,每路输入/输出引脚的电流 为20 mA,最大值不超过40mA。Uno 一共14路端口,即240mA,最大480mA。不过,除了几个点亮LED 的实验,我们不会用这些端口供电。而且由于 Uno 的端口少,可以忽略不计,但 2560 则要认真计算一下了。

实际上,影响供电稳定性的是,多个传感器通过 5.0V 和 3.3V 端口来供电(3.3V 端口的 LDO 最大仅可提供150mA电流)。比如,HC-SR04/05 超声波测距模块工作电流为10~40mA,发生声波测量时为 40mA。2个模块就是80mA,在避障小车等实验中,可能会用到3、4个,最大电流可达120~160mA。

后面课程中用到的网络、Wifi 等通信模块,单个工作电流更可达250mA以上。如果多个传感器和通信模块一起使用,就可能会出现供电不足的情况。

但刚才不是说 AMS1117-5.0 可以提供 800mA 的电流吗?其实,800mA 是 LDO 设计峰值(根据结温度计算得出),但要留一定余量确保长时间稳定工作。而且,Arduino 的电路设计达不到这么高。

假如多个连续工作的模块,峰值电流为 800mA,持续时间为0.001s(即工作频率为1KHz),那么根据电容与电流的公式:

dV/dt 是电压和时间的微分,由于是直流电,因此等于 5V / 0.001s = 5000V/s;

C = I / 200 = 0.8A  / 5000V/s = 0.00016 F(法拉) = 160uf。如果持续时间为0.002s(工作频率500Hz)电容为 320uf。远远大于 Arduino 开发板上2个并联的 47uF 电容了。

如果传感器或模块较多,且持续工作时间较长,可以根据需求在Vcc和GND之间,并联一只100uf ~ 220uf 的电容,一定程度上,可以保证瞬态供电能力。但不建议并联大电容,因为会影响 LDO 的稳定性。

同时,也要注意保证外接电源的电流足够(因为有电容做“蓄水池”,500mA ~ 800mA 即可满足大部分应用场景)。

总的来说,从Arduino 上直接取电不是一个理想的选择。另外,对于一些需要远距离传输数据的模块,导线本身会产生较大的损耗,需要提供略高于5.0V的电压(俗称“线补”),这时Arduino 上单个 AMS1117-5.0 的供电能力就显得更不足了。

解决办法不难,如果我们有开关电源,可以经过 LM7805 或者 AMS1117-5.0 等线性稳压芯片降低纹波后取电。如果是电池,确保电压在模块的使用范围内,可以直接取电。

最后提醒一下,Arduino UNO R3 的 3.3V 端口的 LDO 只能提供150mA电流(有趣的是,Arduino官方网站标的还是 50mA),仅能用于蓝牙等低功耗模块,或者作为参考电压之用。如果需要连接无线模块等功率较大的设备,建议使用外接电源。

Leave a Reply

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