用Teensy控制舵机

由于Arduino的Servol类不支持teensy,当需要用teensy对舵机驱动时,就要自动动手写响应的代码了。以下是我的笔记。

1.单片机是通过PWM信号驱动舵机的,通常驱动舵机的PWM信号的频率为500Hz(见舵机技术规格)。

但Teensy的PWM信号的频率就不一定是500Hz了。好就好在Teensy提供了设置PWM波频率的功能,可根据需要自行设置。

 analogWriteFrequency(14, 500);  //将Pin14的pwm的频率置为500赫兹。

注意,将Pin14的频率修改后,其他所以针的PWM频率都将随之改变。

2.控制舵机信号的分辨率。这一项不是必须的。Teensy与其他的板子相同,缺省的分辨率为512(8位),为使舵机的动作更加细腻,可把控制舵机的pwm输出信号的分辨率置为1024(10位)。

 analogWriteResolution(10);  // analogWrite value 0 to 1024, or 4096 for high

3.修正PWM信号脉冲宽度与舵机角度的关系

理论上,当脉冲宽度从0->1023时,舵机的转角会从最小转为最大。但实际测试时发现,舵机的最小转角并不在PWM脉冲宽度为零时。我手上的舵机就是从大于300以后才开始动作的。

实测我的一只金属舵机: 脉冲宽度300-1024  对应舵机的角度约为0-160度。

拿到这组数据后,自然就可以在程序中计算脉冲宽度与舵机转角的关系了。下面这段代码就是干这件事的,你可以观测PWM值和舵机的角度关系。

void setup() {
  // put your setup code here, to run once:
  pinMode(3,OUTPUT);
  analogWriteFrequency(3, 500);  //将pwm的频率置为500赫兹。
  analogWriteResolution(10);  // analogWrite value 0 to 1024, or 4096 for high
 Serial.begin(115200);
  }

void loop() {
  for(int i=300;i<1023;i++) {
    Serial.println(i);
    analogWrite(3, i);
    delay(10);
   }
   for(int i=1023;i>300;i--) {
    analogWrite(3, i);
     Serial.println(i);
    delay(10);
  }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值