目录
一、什么是舵机?
可以简单理解为可通过改变输脉冲信号的不同占空比来得到不同转动角度的电机
二、伺服控制
1.了解PWM信号:
2.输出占空比不同的PWM信号控制舵机角度:
对于180度和270度舵机来说都是一种占空比对应一个角度,角度分别从0°到180°或270°
- 180°舵机:高电平变化范围:t = 0.5ms——>t = 2.5ms,变化最小间隔:0.5ms
- 270°舵机,高电平变化范围:t = 0.5ms——>t = 2.5ms,变化最小间隔:0.1ms
3.舵机需要了解的参数:
- 额定电压:小于额定电压会使舵机无法工作,大于额定电压可能会使电机出现抖动,甚至会烧坏电机
- 高电平变化范围及其变化最小间隔
4.参考代码 :
#include <reg52.h>
#include <intrins.h>
sbit PWM = P3^7; //设定PWM输出的I/O端口
sbit KEY_OPEN = P2^0;
sbit KEY_CLOSE = P2^1;
sbit led = P2^7;
unsigned char count = 0;
unsigned char timer1 ;
/*
对于180°舵机
t = 0.5ms——————-舵机会转动 0 °
t = 1.0ms——————-舵机会转动 45°
t = 1.5ms——————-舵机会转动 90°
t = 2.0ms——————-舵机会转动 135°
t = 2.5ms——————-舵机会转动180
*/
/*定时器T0初始化*/
void Timer0_Init()
{
TMOD = 0x01; //定时器T0设置成方式1
TH0 = 0xff; //定时常数 0.1ms 晶振为11.0592MHz
TL0 = 0xa4;
ET0 = 1;
TR0 = 1;
EA=1;
}
/*T0中断初始化*/
void Time0_Init() interrupt 1
{
TR0 = 0;
TH0 = 0xff; // 0.1ms
TL0 = 0xa4;
if(count <= timer1) //5==0° 15==90°
{
PWM = 1;
}
else
{
PWM = 0;
}
count++;
if(count >= 200) //T = 20ms清零
{
count = 0;
}
TR0 = 1; //开启T0
}
void main()
{
Timer0_Init();
while(1)
{
if(!KEY_OPEN)
{
if(!KEY_OPEN)
{
timer1 =5;//舵机恢复到0°的位置
count=0;//让定时器重新计数
}
while(!KEY_OPEN)led=0;
led=1;
}
if(!KEY_CLOSE)
{
if(!KEY_CLOSE)
{
timer1 =10;//舵机恢复到0°的位置
count=0;//让定时器重新计数
}
while(!KEY_CLOSE)led=0;
led=1;
}
}
}