单片机控制舵机的问题?

请教一下,如何使用AT89S52编写这样一个程序。
要求,单片机控制舵机,让舵机到中间位置后,左转15度,延迟2ms,右转15度。(度数不要求精确)。舵机为0.5~2.5ms。是舵机正反转 ,要C的,不要汇编 ,一定是应用定时器来控制脉冲的。
回答满意者,追加100分。

请教一下,如何使用AT89S52编写这样一个程序。
要求,单片机控制舵机,让舵机到中间位置后,左转15度,延迟2ms,右转15度。(度数不要求精确)。舵机为0.5~2.5ms。是舵机正反转 ,要C的,不要汇编 ,一定是应用定时器来控制脉冲的。
多少脉冲舵机转动1度?0.5ms到2.5ms是180度。0.5是起始值,0度,2.5是180度,也就是说1.5是90度

从你的题目中,也说了 0.5ms到2.5ms是180度。0.5是起始值,0度,2.5是180度,也就是说1.5是90度
这样,不管什么多少度,首先要有0.5ms初始脉冲时间,实现转180度只用了2ms,也就是说转1度只用2/180ms,那15度就是15*2/180=0.167ms,这样加上初始值,转15度不就是0.667ms吗?
由于要求清度不是太高,你可以采用一个定时器0.010ms中断一次,这样可以保证误差不超过1度,由于你是周期动作。动作时间约为0.670ms,停留时间为2ms,那周期不就是5.35,
这样问题就清楚了
定义一个计数器、一个动作状态,一个正反状态。并可实现了
当在动作状态时,计数器计到200时根据正反状态启动舵机,并初始计数器,变化正反状态和动作状态
当在非动作状态时,计数器计到67时停止舵机,变化动作状态,并初始计数器,
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-07
可以提供一些更加具体的情况吗,比如多少脉冲舵机转动1度等。要不提供舵机控制手册也行。
第2个回答  2013-12-07
晶振12M

#include<reg52.h>
unsigned int pwm;
unsigned char flag;
sbit p10=P1^0;
void timer0() interrupt 1 using 1
{
p10=!p10;
pwm=20000-pwm;
TH0=pwm/256;
Tl0=pwm%256;
flag++;
if(flag<10)flag++;
if(flag==10&&p10==0){pwm=1250;flag=11;}//保证回到90度在左转15;

}
void timer1() interrupt 3 using 1
{
ET1=0//2ms到关闭定时器1
ET0=0;
TR0=0;
pwm=1750
TH0=pwm/256;
TL0=pwm%256;
ET0=1;
TR0=1;
}
void int0 (void) interrupt 0 using 1
{
//判断左转到15,通过传感器判断或者其他信号判断 ,能正好保证刚左转15度,开始延时2ms
TR1=1;//定时器1开始计数
}
void main(void)
{
p10=1;
TMOD=0x11;
pwm=1500;//回90度
TH0=pwm/256;
TL0=pwm%256;
TH1=2000/256;
TH1=2000%256;
EA=1;
ET0=1;
ET11=1;
TR0=1;
while(1);
}本回答被网友采纳
第3个回答  2013-12-07
乱来,我晕,风吹叶落 你这人哪!.......
第4个回答  2013-12-07
shi 吗 ,有点懂了,但是不太了解