舵机是一种位置「角度」伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具、航模、机器人中已经得到普遍使用。舵机是一种俗称,其实是一种伺服马达。本篇通过官方驱动库来实现舵机控制。
一. 舵机介绍
1、结构组成
舵机实际上是一种位置伺服的驱动器,主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。
内部结构
2、工作原理
舵机内部有一个基准电路,产生周期为20ms、宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。经过电路板IC方向判断,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回信号,判断是否已经到位。
舵机转动的角度是通过调节PWM「脉冲宽度调制」信号的占空比来实现的。标准的PWM信号的周期固定为20ms,理论上脉宽分布应该在1ms到2ms之间,实际上可由0.5ms到2.5ms之间,脉宽与转角0°—180°相对应。不同厂家不同型号的舵机也会有所差异。
PWM控制
3、外部接线
舵机一般都外接三根线,分别用棕、红、橙三种颜色进行区分,由于品牌不同,颜色也会有所差异,棕色为接地线,红色为电源正极线,橙色为信号线。
控制线
由于Arduino的驱动能力有限,当需要控制多个舵机时,需要外接电源以及使用专用的舵机控制板。
二. 实验材料
Arduino Uno开发板
配套USB数据线
配套连接线
舵机
三. 实验步骤
. 根据原理图搭建电路。
线路连接非常简单,舵机红色线接开发板5V,棕色线接开发板GND,橙色信号线接开发板数字引脚9。
实验原理图如下图所示:
实验原理图
1、实物连接图如下图所示:
实物连接图
三. 编写代码、连接开发板,设置好对应端口号和开发板类型,进行程序下载。
/*
servo类下有以下成员函数
attach()//连接舵机
write()//角度控制
read()//读上一次舵机转动角度
detach()//断开舵机连接
*/#include <Servo.h> //调用Servo类
Servo myservo; //创建一个舵机控制对象// 使用Servo类最多可以控制8个舵机
int pos = 0; // 该变量用与存储舵机角度位置void setup()
{ myservo.attach(9); // 该舵机由arduino第九脚控制
} void loop()
{ myservo.write(0); // 复位for(pos = 0; pos <= 180; pos ++) // 从0度到180度运动,每次步进一度{ myservo.write(pos); // 指定舵机转向的角度delay(10); // 等待10ms让舵机到达指定位置} for(pos = 180; pos >= 0; pos --) //从180度到0度运动 { myservo.write(pos); // 指定舵机转向的角度 delay(10); // 等待10ms让舵机到达指定位置 }
}
四. 实验现象
舵机在0°和180°间不断转动。
五. 库函数介绍
用Arduino控制舵机一般有两种方法:
1.通过Arduino的普通数字引脚产生占空比不同的方波,模拟产生PWM信号进行舵机控制。
2.直接利用Arduino自带的Servo库进行控制。
Servo库常用函数:
Attach(接口)—设定舵机接口。
Write(角度)—用于设定舵机旋转的角度,可设定范围0°—180°。
Read()—用于读取舵机角度的语句,可理解为读取最后一条write()命令中的值。