Arduino扩展板 舵机 调试程序
Arduino扩展板使用之舵机篇扩展板使用之舵机篇扩展板使用之舵机篇 扩展板使用之舵机篇 [ 2008/10/7 22:03:00 | By: wxxmickey ]
4 推荐
舵机,又称伺服马达,是一种具有闭环控制系统的机电结构。舵机主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由控制器发出PWM(脉冲宽度调制)信号给舵机,经电路板上的IC处理后计算出转动方向,再驱动无核心马达转动,透过减速齿轮将动力传至摆臂,同时由位置检测器(电位器)返回位置信号,判断是否已经到达设定位置,一般舵机只能旋转180度。
舵机有3根线,棕色为地,红色为电源正,橙色为信号线,但不同牌子的舵机,线的颜色可能不同,请大家注意。
舵机的转动位置是靠控制PWM(脉冲宽度调制)信号的占空比来实现的,标准PWM(脉冲宽度调制)信号的周期固定为20ms,占空比0.5~2.5ms 的正脉冲宽度和舵机的转角-90°~90°相对应。注意,由于舵机牌子不同,其控制器解析出的脉冲宽度也不同,所以对于同一信号,不同牌子的舵机旋转的角度也有所差别。
A::::B数字口电源切换跳线,当A跳线短路帽插上时,这时B数字口电源使用的是Arduino上的5V供电,仅提供800mA电流;当B数字口用于驱动大电流器件时(如舵机),由于舵机电流较大,这时就需要外部电源供电,由K电源接线柱接入,A跳线短路帽需要拔掉;当Arduino需要5V电池供电时,可以由K电源接线柱接入,A跳线短路帽插上。
B::::数字扩展口,插针定义从上至下为:数字IO口,5V,地(符合舵机线序)。 C::::串口选择跳线,当需要使用RS485功能时,3个短路帽插到上面;当需要使用APC220无线数传时,3个短路帽插到下面;当需要下载程序时,请拔掉短路帽。
D::::RS485串口接口,C串口选择跳3个短路帽插到上面时有效。 E::::模拟扩展口,插针定义从上至下为:5V,地,数字IO口(符合GP2D12线序)。 F::::复位按钮。
G::::5个VIN电源口,与Arduino的VIN相通。 H::::电源指示灯。 I:APC220无线数传接口,C串口选择跳3个短路帽插到下面时有效。
J::::6个PWM接口,将数字口上的6个PWM单独引出来,插针定义从上至下为:PWM,地,5V。
K::::大电流器件独立电源接口,当接入电源时,请拔掉A跳线短路帽。 本实验需要扩展板一个,舵机3只。由于只是做演示用,舵机5v电源就暂时使用Arduino上的,但不可长时间使用,因为多个舵机转动时电流比较大,Arduino上的电源芯片可能会因过热而保护甚至损坏,Arduino电源选择跳线需要接到外部供电,不可使用USB供电。这时就需要从K数字端口外部电源输入端供电,电源电压为5V,拔掉A跳线短路帽。可以使用5V开关电源供电或4-5节充电电池供电。
Arduino 0012-0016版本的IDE内会自带一个舵机库文件,不过该库文件只能使Pin9和Pin10控制舵机,如舵机连接到Pin9上:
演示代码:
#include
Servo myservo; // 定义舵机对象, intpos = 0; void setup() {
myservo.attach(9); //舵机接到Pin9上 } void loop() {
for(pos = 0; pos< 180; pos += 1) //从0度转到180度,步进1度 {
myservo.write(pos); //改变舵机度数 delay(15); // 延时 }
for(pos = 180; pos>=1; pos-=1) //从180度转到1度,步进1度 {
myservo.write(pos); //改变舵机度数 delay(15); // 延时 } }
使用Arduino 0017-0018可以让Arduino控制器的Pin2-13端口控制12个舵机。如上图连接。
演示代码:
#include
servo1.attach(8); //定义舵机1控制口为Pin8 servo2.attach(9); //定义舵机2控制口为Pin9 servo3.attach(10); //定义舵机3控制口为Pin10 Serial.begin(19200);//设置波特率 Serial.print(\ }
void loop() {
staticint v = 0; if ( Serial.available()) {
char ch = Serial.read(); //读取串口数据 switch(ch) { case '0'...'9':
v = v * 10 + ch - '0'; //字符换算成10进制 break;
case 'a': //如果数据后带a,则表示是servo1的数据,比如串口发送85a servo1.write(v);
v = 0; break; case 'b': //如果数据后带b,则表示是servo2的数据,比如串口发送90b servo2.write(v);
v = 0; break; case 'c': //如果数据后带c ,则表示是servo3的数据,比如串口发送180c servo3.write(v);
v = 0; break; } } }
程序功能:通过IDE中的串口助手,发送舵机度数控制舵机转动的角度,比如发送字符85a表示舵机1转动85度,发送字符180c表示舵机3转动180度。

