13.1 SG90舵机的简单介绍
SG90舵机由直流电机、减速装置和位置反馈装置组成。它的减速装置通过一组齿轮系统将电机的高速旋转转换为较低速度的输出轴转动。位置反馈装置通常是一个电位器,用于测量输出轴的角度。舵机是一种位置(角度)伺服的驱动器,适用那些需要角度不断变化并可以保持的控制系统。舵机只是一种通俗的叫法,其实质是一个伺服马达。
①:信号线:接收来自微控制器的控制信号;
②:电位器:可以测量输出轴的位置量,属于整个伺服机构的反馈部分;
③:内部控制器:处理来自外部控制的信号,驱动电机以及处理反馈的位置信号,是整个伺服机构的核心;
④:电机:作为执行机构,输出多少转速,转矩,位置;
⑤:传动机构/舵机系统:该机构根据一定传动比,将电机输出的行程缩放到最终输出的角度上。
SG90舵机的工作电压一般为4.8V至6V,工作电流较低,通常在100mA左右。它的输出扭矩较小,一般在1.5kg/cm左右。需要注意的是,SG90舵机的工作温度范围一般在0摄氏度到55摄氏度之间。
注意事项:
- 避免超过额定工作电压,以免损坏舵机。
- 避免过载,以免损坏减速装置。
- 控制信号的脉冲宽度和周期要符合舵机的要求,否则可能导致不正常工作或损坏舵机。
13.2 舵机的工作原理
引脚定义
sg90有三个引脚,分别是红线(VCC),棕线(GND)和橙线(信号线)。通常使用5V供电,信号线接单片机引脚,用老来接收单片机发送的PWM。
PWM控制
PWM信号:PWM(脉冲宽度调制)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。那么什么叫PWM信号呢,笔者就简单的谈一下自己的看法,我们都知道,我们所使用的单片机都是数字电路,它的I/O口只有两种状态,那就是高电平(1),低电平(0)。知道了这些之后,我们通过控制微处理器输出1-0-1-0-1-0-1-0……如此循环往复,就成为下图1所示的情况,这就是PWM信号。
舵机内部有一个基准电压,微处理器产生的PWM信号通过信号线进入舵机产生直流偏置电压,与舵机内部的基准电压作比较,获得电压差输出。电压差的正负输出到电机驱动芯片上,从而决定正反转。当舵机开始旋转的时候,舵机内部通过级联减速齿轮带动电位器旋转,使得电压差为零,电机停止转动。
重点:作为一个单片机编写者,具体的原理,我们不必要搞清楚,我们只需知道如何控制它即可,以下将讲解如何控制舵机运转。
我们需要使用单片机产生周期为20ms,高电平t等于0.5ms-2.5ms之间的这样一个方波。定时器+中断产生这样的方波。
高电平在一个周期(20ms)的持续时间对应的舵机角度,如下图所示。
舵机转动的角度是通过调节PWM信号的占空比来实现的。标准的PWM信号的周期固定为20ms,理论上脉宽分布应该在1ms到2ms之间,实际上在0.5ms到2.5ms之间,脉宽与转角0°——180°相对应。不同厂家不同型号的舵机也会有所差异。
13.3 定时器驱动SG90舵机的程序
/**********************************
包含头文件
**********************************/
#include "steer.h"
/**********************************
定义变量
**********************************/
uchar steercontol=0;//控制舵机转动
/*******************************************************************************
* 函 数 名 : Timer0_Init
* 函数功能 : 定时器0的初始化,定时500us
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Timer0_Init(void) //500微秒@11.0592MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x33; //设置定时初始值
TH0 = 0xFE; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
EA=1;
}
/*******************************************************************************
* 函 数 名 : Timer0_Isr
* 函数功能 : 定时器0的中断函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Timer0_Isr(void) interrupt 1
{
static char time_num;
TL0 = 0x33; //设置定时初始值
TH0 = 0xFE; //设置定时初始值
time_num++;
if(time_num >= 40) //定义一个周期,T = 20ms清零
{
time_num = 0;
}
if(time_num < steercontol) //调节占空比
STEIO = 1;
else
STEIO = 0;
}
13.4 拓展:360°舵机
除了上面介绍的180°舵机之外,还有一种360°舵机。与180°舵机不同的是,360°舵机是无法控制角度的,它只能控制旋转方向和旋转速度。360°的舵机也是由脉冲宽度为20ms的PWM控制。高电平持续时间与舵机转向和转速的对应关系如下
主题授权提示:请在后台主题设置-主题授权-激活主题的正版授权,授权购买:RiTheme官网