Skip to content

arduino 操作舵机和供电

发布日期:2023-08-25

使用 arduino nano 开发板操作舵机时遇到了不少问题,并由此深入了解舵机供电、arduino供电的最佳方式。


操作舵机时遇到的问题

为啥先讨论舵机而不是先讨论供电?虽然舵机跑不起来是因为供电问题,但我的初衷是操作舵机,而不是折腾电源。如果不是因为操作舵机遇到问题,可能我不会去研究供电问题。

95% 的舵机问题都是因为电压不足。 -- arduino 论坛老哥的忠告

arduino IDE 中自带了两个 servo 示例,示例中提示用板载 5V 给舵机供电。在第一次尝试时,两个程序都正常运行,其中 knob 程序经常在电位器转动过快时失去控制,舵机完全停止,需要按 arduino 重置按键来恢复。

后来,又买了4个舵机,想在 arduino 上测试舵机能否正常运行,之后安装到机械臂。然而尝试上述两个程序都无法运行,舵机处于抖动失灵的状态,更坏的情况是运行 sweep 程序时 arduino 的L灯不停地闪烁,即使按重置键也无法恢复,只能断电重连,但很快又会陷入相同的问题。

于是有了以下两个怀疑:

  1. 这些舵机都是劣质产品,全部坏掉了,因为旧舵机能够正常运行,新舵机却不行。但经多多次切换舵机对比后,旧舵机也无法正常运行了,这不对劲。

  2. 这是 arduino 的问题,或者我的操作有问题,它烧坏了吧?。于是尝试上网搜索。百度搜索完全没有任何有价值的信息,果断切换到 google 英文搜索,找到很多在官方论坛发起的讨论,很多新手都遇到了类似的问题。老手的解决方法是:忘记 arduino 上的 5V 输出吧,它无法提供稳定可靠的电压,电压会被开发板本身运行的硬件降低,需要给舵机独立供电才能使舵机正常运行。板载 5V 很可能供电不足,即使舵机跑起来了,也会因为运行过程电流波动导致 arduino 频繁重启或故障。

问题解决

最终解决:我使用一条 DC 口 usb 数据线连接电脑,负极和 arduino 共地,为舵机提供 5V 独立供电。果然,所有舵机都能正常运行,我又拿出曾经为树莓派准备的,被我认为是坏掉的两个舵机来测试,结果舵机根本没坏。

注意,usb 提供的电压是 5V,电流是 500mA,开发板本身会消耗一部分电流,会导致输出电流不足 500 mA,功率降低达不到驱动舵机的标准,是无法驱动舵机的主要原因。问题来了,经常看到一种说法是连接的设备电流过大导致主板烧坏,如果电流最大只有 500,又怎样超过这个电流呢?答:电脑主板有电流保护,最大提供 500,但 arduino 没有电流保护,过大的功率导致电流过大可能会烧坏。USB2.0的标准最大电流是500mA,到3.0时代才到900mA,当然如果是充电设备,那么可以不做限制,2A也可以。

关于 sg90 舵机到底会产生多大的电流,制造商声称 SG90 失速电流为 650 +/- 80 mA,因此为了安全裕度,将其称为 750 mA。您的电源需要能够提供至少 750 mA 乘以同时移动的伺服器数量。

为舵机供电

为舵机供电的最佳方式是为舵机提供 5V 独立供电。其他供电方式各有弊端:

  1. 使用 arduino 5V 输出为舵机供电,这是官方入门教程的供电方式,也是最坏的供电方式。即使用 12V 电源接入 Vin 供电,也无法在板载 5V 接口为舵机输出稳定的电源,电流尖峰甚至会导致 arduino 频繁重启,甚至损坏开发板。最终的结果就是舵机运行不起来,或者看起来像是坏掉了。

  2. 使用 5V 电源并联同时为 arduino 和 舵机供电,可行但仍有一定的风险。舵机运行过程中会产生一些电流“噪音”,影响 arduino 的稳定供电。

  3. 使用 5V 电源并联同时为 arduino 和 舵机供电,并提供稳压电路保证 arduino 开发板稳定供电,可行的方案,但操作起来比较麻烦,至少我暂时不懂这个稳压电路。

为 arduino 供电

开发板上丰富的电源输入接口,为我们提供了多种供电思路:

  1. 12V供电(比如12V电池):Vin 引脚连接到板载 5V 稳压器的输入,使用 7-12V 电源连接 VIN 和 GND 可以为 arduino 提供 5V 稳定供电。但是降压会导致发热,需要注意散热问题和额外的功耗。

  2. 5V供电(比如充电宝,或 5V 充放电模块 + 3.7V 电池):连接 5V 和 GND 为 arduino 供电。

  3. 使用 usb 接口:同时为 arduino 供电并传输数据,注意电脑的 USB2.0 和 3.0 提供的最大电流有差异。

  4. 使用桶型接口供电,输入电压为 7-12V,该接口在 nano 上没有部署。

参考文章

Power by vitepress