如果 Arduino Uno 只有 6 个数字 PWM 引脚,它怎么能支持多达 12 个舵机?
电器工程
Arduino
发动机
脉宽调制
伺服
引脚
2022-01-13 06:16:34
2个回答
伺服库不使用 PWM。当您调用write()时,它会以微秒为单位计算脉冲宽度并将其存储在全局数组中。然后有一个定时器定期触发中断,根据每个通道所需的脉冲宽度改变输出信号。
您可以在下面找到源代码: Github 链接
6 个 PWM 引脚使用 ATmega328P 上的内置 UART 来产生输出。这使得脉冲非常快以获得更高质量的“模拟”输出。因为伺服以足够慢的速度进行通信,所以可以使用软件中断来驱动它们。软件中断远离您正在执行的代码并运行伺服库中包含的代码。此代码使用标准方法来更改引脚的状态。通过使用中断而不是使用 UART,您会浪费一些处理时间,但获得了驱动更多伺服系统的能力。