标题: 请教用51单片机编程的舵机如何实现循环运动 [打印本页]

作者: bjy320    时间: 2018-10-29 20:22
标题: 请教用51单片机编程的舵机如何实现循环运动
  通过采用51单片机设置定时和中断输出PWM波来控制舵机,能实现单次到指定位置,但要在循环之中实现持续来回运动重复动作却会在第一个位置就卡住不动了。希望能够解决这个问题,谢谢,程序如下:
#include <reg52.h>
unsigned char i=0,a,b,c;
sbit P17=P1^7;//舵机 1
sbit P16=P1^6;//舵机 2
sbit P15=P1^5;//舵机 3
unsigned char c1[]={77,75,77,75,77};
unsigned char c2[]={77,76,77,74,77};
unsigned char c3[]={77,74,77,76,77};

void delay(unsigned int j)
{
unsigned int x,y;
for(x=0;x<j;x++);
for(y=0;y<101;y++);
}

void main(void)
{
EA=1;
TMOD=0x01;
TH0=(65536-250)/256;
TL0=(65536-250)%256;
ET0=1;
TR0=1;
while(1)
{         a=c1[0];
          b=c2[0];
          c=c3[0];//通过数组就可以改变舵机的转角度
          delay(5000);//延时5s
          a=c1[1];
          b=c2[1];
          c=c3[1];
          delay(5000);
          a=c1[2];
          b=c2[2];
          c=c3[2];
          delay(5000);
          a=c1[3];
          b=c2[3];
          c=c3[3];
          delay(5000);
    }
}

void timer0_int() interrupt 1
{
   i++;
if(i==a) {P17=1;}//70--78
if(i==b) {P16=1;}//72--78
if(i==c) {P15=1;}//72--78
if(i==80) {P17=0;P16=0;P15=0;i=0; }//1=0.25ms
TH0=(65536-250)/256;
TL0=(65536-250)%256;
}


作者: bjy320    时间: 2018-10-31 15:29
顶一下!
作者: 逝默弑    时间: 2018-10-31 22:46
你的高低电平弄反了吧??从i=a开始到i=80都是高电平??
作者: 逝默弑    时间: 2018-10-31 22:48
高低电平弄反了,i=设定值时将电平拉低,i=80时将电平拉高就好了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1