什么是舵机:
如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控制
用处:垃圾桶项目开盖用、智能小车的全比例转向、摄像头云台、机械臂等
常见的有0-90°、0-180°、0-360°
怎末控制电机?
像黄色信号线“灌入”PWM信号
PWM波的频率不能太高,大约50HZ,即周期=1/频率=1/50=0.02s,20ms左右
PWM波的频率不能太高,大约50HZ,即周期=1/频率=1/50=0.02s,20ms左右
数据:
0.5ms-------------0度; 2.5% 对应函数中占空比为250
1.0ms------------45度; 5.0% 对应函数中占空比为500
1.5ms------------90度; 7.5% 对应函数中占空比为750
2.0ms-----------135度; 10.0% 对应函数中占空比为1000
2.5ms-----------180度; 12.5% 对应函数中占空比为1250
这些数据是厂商靠苏我们的,我们只需要把定时器配置成最小的单位,然后进行成倍的操作
这样一直重复操作
编程控制舵机
#include "reg52.h"
sbit sg90_con = P1^1;
int jd;
int cnt;
void Delay2000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 15;
j = 2;
k = 235;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Timer0Init(void) //500微秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x66; //设置定时初值
TH0 = 0xEA; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
void main()
{
Time0Init(); //配置定时器
sg90_con = 1; // 令PWM信号 一开始在高电位
cnt = 0;
jd = 1; //转0度
while(1){
jd = 1;
cnt = 0;
Delay2000ms();
jd = 4;
cnt = 0;
Delay2000ms()
}
}
void Time0ZD () interrupet 1
{
cnt++;
//爆表后要重新配计时器
TL0 = 0x66; //设置定时初值
TH0 = 0xEA; //设置定时初值
if(cnt <jd){
sg90_con = 1;
}else{
sg90_con = 0;
}
if(cnt == 40){
cnt = 0;
sg90_con = 1; // 当一个周期弄完后,重新回到高电位。
}
}