目录
概述
1 认识舵机
1.1 舵机分类
1.2 舵机结构
1.3 舵机工作原理
1.4 舵机控制原理
1.5 舵机工作参数介绍
1.5.1 基本参数
1.5.2 舵机扭矩
2 系统硬件
2.1 硬件模块介绍
2.1.1 SG90 9G 360°舵机
2.1.2 SG90 9G 180°舵机
2.1.3 Arduino UNO 主板
2.2 整体结构
3 软件设计
3.1 功能介绍
3.1.1 舵机控制分析
3.1.2 实现要求
3.2 代码实现
3.2.1 开发环境编写代码
3.2.2 详细代码
4 测试
概述
本文主要介绍舵机的实现原理,控制方法,并使用Arduino UNO板卡设计一个案例,控制舵机按照预定的规则工作。
1 认识舵机
舵机可以在程序的控制下,在一定范围内连续改变输出轴角度并且可以保持住。 其最早被用在航模和船模等遥控模型中,控制各种舵面的转动。现在这种电机大量的运用在各种机器人、机械臂的关节以及智能小车的转向机构中。
1.1 舵机分类
1)按照舵机的控制电路可以分为:模拟舵机和数字舵机。模拟舵机和数字舵机的机械结构可以说是完全相同的, 模拟舵机的控制电路为纯模拟电路,需要一直发送目标信号,才能转到指定的位置,响应速度较慢,无反应区较大; 数字舵机内部控制电路则加上了微控制器,只需要发送一次目标信号,即可到达指定位置,速度比模拟舵机更快,无反应区也更小。
2)按照使用对象的不同,可以分为:航模舵机、车模舵机、船模舵机和机器人舵机。航模舵机一般要求速度快、精度高, 而车模和船模用的舵机一般要求具有大扭矩和防水性好。
3)按照内部机械材质,又可分成:塑料齿舵机和金属齿舵机。塑料齿舵机内部的传动齿轮是塑料的,重量轻价格便宜, 但是扭矩一般较小无法做大;金属齿舵机的扭矩更大,舵机更结实耐用,但是相比塑料齿更重也更贵。
4)按照外部接口和舵机的控制方式,又可分为:PWM舵机和串行总线舵机。
1.2 舵机结构
舵机主要由以下几个部分组成:外壳、舵盘、直流电机、减速齿轮组、角度传感器、控制驱动电路和接口线缆等。常见的舵机内部结构如下图所示。
角度传感器负责舵机的位置反馈,直接装在舵机的主输出轴上,将轴旋转后产生的角度变化变成电压信号发回控制电路,当前轴角度; 控制驱动电路用来接收外部接口传来的信号和角度传感器反馈的电压值,以及驱动直流电机旋转; 减速齿轮组则是降低直流电机的转速并且放大扭矩。
1.3 舵机工作原理
以模拟舵机为例介绍舵机工作原理:模拟舵机内部的控制驱动电路板从外界接收控制信号, 经过处理后变为一个直流偏置电压,在控制板内部有一个基准电压,这个基准电压由电位器产生并反馈到控制板。将外部获得的直流偏置电压与电位器的电压进行比较获得电压差, 并输出到电机驱动芯片驱动电机,电压差的正负决定电机的正反转,大小决定旋转的角度,电压差为0时,电机停止转动。大致原理框图如下图所示。
1.4 舵机控制原理
舵机pin引脚介绍:
中间的红色线:电源正极
咖啡色线: 电源负极
橙色线: 控制线号线
舵机的控制通常采用PWM信号,例如需要一个周期为20ms的脉冲宽度调制(PWM), 脉冲宽度部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。 当脉冲宽度为1.5ms时,舵机旋转至中间角度,大于1.5ms时 舵机旋转角度增大,小于1.5ms时舵机旋转角度减小。舵机分90°、180°、270°和360°舵机。 以180°的舵机为例来看看脉冲宽度与角度的关系:
舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。
1.5 舵机工作参数介绍
1.5.1 基本参数
1)舵机速度的单位:sec/60°,就是舵机转过60°需要的时间。
2)和控制脉冲关系:变化宽度大,变化速度快, 舵机就有可能在一次脉冲的变化过程中还没有转到目标 角度时,而脉冲就再次发生了变化, 舵机的转动速度一般有0.16sec/60°、0.12sec/60°等,0.16sec/60°就是舵机转动60°需要0.16秒的时间。
3)和工作电压关系:在允许的电压范围内,电压越大速度越快,反之亦然。
1.5.2 舵机扭矩
舵机扭矩的单位是KG*CM,这是一个扭矩的单位,可以理解为在舵盘上距离舵机轴中心水平距离1CM处, 舵机能够带动的物体重量,如下图所示。
2 系统硬件
2.1 硬件模块介绍
2.1.1 SG90 9G 360°舵机
本系统使用的舵机型号为SG90,其具体参数如下:
注意:
1) 360°舵机只能控制正转、停止、反转,不能控制其转到具体角度
2)0~90° 顺时针旋转, 90° 停止转动, 90~180 逆时针旋转
2.1.2 SG90 9G 180°舵机
180°舵机,可以自由控制角度,角度范围: 0~180°,具体操作方法如下:
2.1.3 Arduino UNO 主板
系统使用Arduino UNO作为主控板,舵机信号引脚和有PWM功能的引脚相连。
2.2 整体结构
舵机和Arduino UNO 主板关系图
模块引脚 | Arduino UNO引脚 | 注释 |
舵机-信号引脚-IO | pin-3 | 控制舵机转角 |
3 软件设计
3.1 功能介绍
3.1.1 舵机控制分析
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms,在该该电平范围角度控制脉冲部分。以180度角度伺服为例,其对应的控制关系如下:
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;
3.1.2 实现要求
应用舵机,使其旋转的角度分别为: 45°,90°,135°,180°,225°,270°,360°。
3.2 代码实现
3.2.1 开发环境编写代码
3.2.2 详细代码
#include <Servo.h> //调用舵机库
Servo myservo; // 定义舵机对象
void setup()
{
myservo.attach(3); // 设置舵机控制针脚接数字7引脚
}
void loop()
{
myservo.write(45);
delay(3000); //占空比为1.0ms的PWM信号旋转约3秒时间
myservo.write(90);
delay(1000); //占空比为1.5ms的PWM信号停止1秒
myservo.write(0);
delay(3000); //占空比为0.5ms的PWM信号旋转约3秒时间
myservo.write(90);
delay(1000); //占空比为1.5ms的PWM信号停止1秒
myservo.write(135);
delay(3000); //占空比为2.0ms的PWM信号旋转约3秒时间
myservo.write(90);
delay(1000); //占空比为1.5ms的PWM信号停止1秒
myservo.write(180);
delay(3000); //占空比为2.5ms的PWM信号旋转约3秒时间
myservo.write(90);
delay(1000); //占空比为1.5ms的PWM信号停止1秒
}
4 测试
旋转90°
旋转18°
旋转45°