找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1642|回復(fù): 3
收起左側(cè)

請教用51單片機編程的舵機如何實現(xiàn)循環(huán)運動

[復(fù)制鏈接]
ID:404268 發(fā)表于 2018-10-29 20:22 | 顯示全部樓層 |閱讀模式
  通過采用51單片機設(shè)置定時和中斷輸出PWM波來控制舵機,能實現(xiàn)單次到指定位置,但要在循環(huán)之中實現(xiàn)持續(xù)來回運動重復(fù)動作卻會在第一個位置就卡住不動了。希望能夠解決這個問題,謝謝,程序如下:
#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];//通過數(shù)組就可以改變舵機的轉(zhuǎn)角度
          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;
}

回復(fù)

使用道具 舉報

ID:404268 發(fā)表于 2018-10-31 15:29 | 顯示全部樓層
頂一下!
回復(fù)

使用道具 舉報

ID:418826 發(fā)表于 2018-10-31 22:46 | 顯示全部樓層
你的高低電平弄反了吧??從i=a開始到i=80都是高電平??
回復(fù)

使用道具 舉報

ID:418826 發(fā)表于 2018-10-31 22:48 | 顯示全部樓層
高低電平弄反了,i=設(shè)定值時將電平拉低,i=80時將電平拉高就好了
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表