我专门使用Teensy硬件。我有一个Teensy 2.0和Teensy 3.0,从文档中看,似乎有两个16位定时器可用,每个定时器都应能够控制12个伺服器。但是,我已经连接了逻辑分析仪,并确认只有前12个伺服器可以正常工作。

我有什么特别的草图可以说服伺服库分配伺服驱动器的第二个计时器超过了12号?

这有效:

附有十二个插针:

#define NUM_SERVOS 12

Servo servos[NUM_SERVOS];

// teensy 2.0 pins
int pin_assignments[NUM_SERVOS] = {0, 1, 2, 3, 4, 5, 20, 19, 18, 17, 16, 15};

void setup() { 
  for(int i = 0; i < NUM_SERVOS; i++) {
    servos[i].attach(pin_assignments[i]) ;
  }
}


评论

在第二个代码段中,是否要注释掉int pin_assignments的行?

哈哈,不,不是,但这当然不是问题:)

#1 楼

我猜您正在使用arduino库(尚未使用Teensy),在这种情况下,如果您仔细阅读文档(http://arduino.cc/en/Reference/Servo),将会看到Arduino伺服库


在大多数Arduino板上最多支持12个电机,在Arduino Mega上最多支持48个电机。如果您没有进行太多其他对时间要求严格的事情,或者制造/获取单独的串行伺服控制器,或者执行许多其他任何事情,则为伺服器发出信号。这是一本很好的书,可以了解正在发生的事情:
http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM(我将单击原始文档以查看不同计时器模式的直观视图)。

ps您要使用24个伺服器和一个微控制器做什么?听起来很刺激!

#2 楼

问题出在Arduino \ libraries \ Servo中的Servo.h文件中。此文件中未定义Teensy 3.0参数,因此假定它只有一个计时器。更改默认动作以复制倒数第二个动作已足够满足我的目的,我将其更改为以下文件:

发件人: >收件人:

#else  // everything else
#define _useTimer1
typedef enum { _timer1, _Nbr_16timers } timer16_Sequence_t ;                  
#endif


这只能使我获得16个舵机。我还尝试添加其他计时器,但没有成功增加可用伺服器的数量。希望这对某人有用。

#3 楼

还有另一个Servo库,可以根据需要驱动任意数量的伺服器:链接到Arduino Software Servo。祝你好运