视频讲解
简介
SG90 是一种常见的微型伺服电机(Servo Motor),广泛应用于机器人、遥控模型、自动化设备等领域。
SG90 是一种小型伺服电机,尺寸通常为 22.2mm x 11.8mm x 29.2mm。
重量约为 9 克,非常轻便,适合用于小型机器人或模型。
工作电压范围为 4.8V 至 6V,通常使用 5V 电源供电。
在 4.8V 电压下,SG90 的扭矩约为 1.6kg·cm。
在 6V 电压下,扭矩约为 1.8kg·cm。
SG90 通常有三个接口:
- 电源接口(VCC 和 GND):用于连接电源。
- 信号接口(Signal):用于接收控制信号。
SG90 的旋转角度通常为 0° 至 180°,可以通过控制信号精确控制。
SG90 使用 PWM(脉宽调制)信号进行控制。
标准的 PWM 信号周期为 20ms,脉宽在 0.5ms 至 2.5ms 之间变化,对应 0° 至 180° 的旋转角度。
也就是说在20ms的PWM周期中,我们给出0.5ms的高电平占空比,就可以控制舵机转动到0°,给出2.5ms的高电平占空比,舵机转动至180°,其中高电平占空比与舵机的角度是呈线性关系的,由于51单片机通常采用的是11.0592MHZ的晶振,所产生的1us定时器中断误差过大,不满足控制舵机的条件,所以我们退而求其次,产生500us的定时器中断来产生PWM波形,那么我们可以控制舵机的角度分辨率为45°,一共可以控制舵机转动五个档位:0°、45°、90°、135°、180°。
软件流程图
程序分析
Time.c
包含头文件
**********************************/
#include "Time.h"
/**********************************
变量定义
**********************************/
extern uint PWM_NUM;
/**********************************
函数定义
**********************************/
/****
*******定时器0初使化函数
*****/
void Timer0Init() //500us
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x98; //设置定时初始值
TH0 = 0xF1; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
EA = 1;
}
/****
*******T0计时中断函数
*****/
void Timer0() interrupt 1
{
static uint PWM;
TL0 = 0x98; //设置定时初始值
TH0 = 0xF1; //设置定时初始值
PWM++;
if(PWM >= 40)
PWM = 0;
if(PWM < PWM_NUM)
SG90 = 1;
else
SG90 = 0;
}
Time.h
#ifndef _TIME_H_
#define _TIME_H_
/**********************************
包含头文件
**********************************/
#include "main.h"
/**********************************
引脚定义
**********************************/
sbit SG90 = P3^3;
/**********************************
函数声明
**********************************/
void Timer0Init(); //定时器0初使化函数
#endif