arduino入门实践之舵机的控制
元件:
arduino mega 2560、舵机、杜邦线
接线:
普通舵机有3根线:棕、红、橙(棕色连接 GND、红色连接 Vcc、橙色连接信号 S)
原理:
舵机的伺服系统由可变宽度的脉冲来进行控制,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号都是周期为20ms,宽度为1.5ms。这个基准信号定义的位置为中间位置。舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。最重要的一点是,不同舵机的最大转动角度可能不相同,但是其中间位置的脉冲宽度是一定的,那就是1.5ms。如下图:
角度是由来自控制线的持续的脉冲所产生。这种控制方法叫做脉冲调制。脉冲的长短决定舵机转动多大角度。例如:1.5毫秒脉冲会到转动到中间位置(对于180°舵机来说,就是90°位置)。当控制系统发出指令,让舵机移动到某一位置,并让他保持这个角度,这时外力的影响不会让他角度产生变化,但是这个是由上限的,上限就是他的最大扭力。除非控制系统不停的发出脉冲稳定舵机的角度,舵机的角度不会一直不变。
当舵机接收到一个小于1.5ms的脉冲,输出轴会以中间位置为标准,逆时针旋转一定角度。接收到的脉冲大于1.5ms情况相反。不同品牌,甚至同一品牌的不同舵机,都会有不同的最大值和最小值。一般而言,最小脉冲为1ms,最大脉冲为2ms。如下图:
arduino控制舵机的两种方法:
1、第一种是通过Arduino的普通数字传感器接口产生占空比不同的方波,模拟产生PWM信号进行舵机定位。
2、第二种是直接利用Arduino自带的Servo函数进行舵机的控制,这种控制方法的优点在于程序编写,缺点是只能控制2路舵机,因为Arduino自带函数只能利用数字9、10接口。Arduino的驱动能力有限,所以当需要控制1个以上的舵机时需要外接电源。
代码:
#include<Servo.h> Servo myservo; //建立一个舵机对象myservo int pos = 0; void setup() { myservo.attach(9); //将引脚9上的舵机与舵机对象连接起来 } void loop() { for(pos = 0;pos<180;pos += 1) //若要控制增大转动速度,可将1改为更大的数值 { myservo.write(pos); //写角度到舵机 delay(15); } for(pos = 180;pos>=1;pos-=1) { myservo.write(pos); delay(15); } }
参考博客:http://m.elecfans.com/article/675881.html