如果 Arduino Uno 只有 6 个数字 PWM 引脚,它怎么能支持多达 12 个舵机?

电器工程 Arduino 发动机 脉宽调制 伺服 引脚
2022-01-13 06:16:34

据此_

Servo 库在大多数 Arduino 板上最多支持 12 个电机,在 Arduino Mega 上最多支持 48 个。在 Mega 以外的板上,使用该库会禁用引脚 9 和 10 上的模拟写入()(PWM)功能,无论这些引脚上是否有伺服。在 Mega 上,最多可以使用 12 个舵机,而不会干扰 PWM 功能;使用 12 到 23 个电机将禁用引脚 11 和 12 上的 PWM。

但是,根据这个

数字 I/O 引脚 14 个(其中 6 个提供 PWM 输出)

那么,如果 Uno 只有 6 个可以提供 PWM 输出的数字 I/O 引脚,它怎么能控制超过 6 个舵机呢?

2个回答

伺服库不使用 PWM。当您调用write()时,它会以微秒为单位计算脉冲宽度并将其存储在全局数组中。然后有一个定时器定期触发中断,根据每个通道所需的脉冲宽度改变输出信号。

您可以在下面找到源代码: Github 链接

6 个 PWM 引脚使用 ATmega328P 上的内置 UART 来产生输出。这使得脉冲非常快以获得更高质量的“模拟”输出。因为伺服以足够慢的速度进行通信,所以可以使用软件中断来驱动它们。软件中断远离您正在执行的代码并运行伺服库中包含的代码。此代码使用标准方法来更改引脚的状态。通过使用中断而不是使用 UART,您会浪费一些处理时间,但获得了驱动更多伺服系统的能力。