您的位置 首页 资料

单片机操控 舵机 参阅程序

51单片机的资源都差不多,这里采用STC89C52作为控制芯片,上位机的输出控制信号,利用串口接收控制舵机。理论上,只用一个定时器就可以产…

 51单片机的资源都差不多,这儿选用STC89C52作为操控芯片,上位机的输出操控信号,使用串口接纳操控舵机。理论上,只用一个定时器就可以发生无限多路PWM波输出,但事实上,PWM输出越多,定时器中止里边操作的句子就越多,很冗杂,单片机的运转速度会变得很慢,以致于输出PWM波周期大于一般舵机的操控周期20ms,或许频率发生差错,导致舵机的哆嗦。所以,只使用一个定时器输出PWM有必定约束,路数不能太多,假如需求操控的舵机数量太多,主张替换带有PWM输出的单片机。下面是单片机操控三路舵机的程序。

#include

sbit duoji1=P3^2;//PWM输出口1

sbit duoji2=P2^4;//PWM输出口2

sbit duoji3=P2^5;//PWM输出口3

intt,xinhao[3],flag;//xinhao[3]是上位机传来的三个操控信号

void main()

{

EA=1;

flag=0;

for(t=0;t<3;t++)

xinhao[t]=15;//初始化操控信号

t=0;

TMOD=0x21;//设置定时器1的工作方式为3,用于发生波特率, //接纳串口的数据,设置定时器0的工作方式为1, //用于操控舵机的PWM波输出

TH1=0xfd;//设置串口波特率为9600

TL1=0xfd;

TR1=1;

ES=1;

REN=1;

SM0=0;

SM1=1;

PCON=0x00;

TH0=(65536-40)/256;//定时器0每40奇妙发生一次中止,留意: //中止发生的频率越高,单片机运转速度也//会越慢,但操控信号宽度会变宽,操控也//越精准,需求各位自己权衡

TL0=(65536-40)%256;

ET0=1;

TR0=1;

while(1);

}

void timer0() interrupt 1//PWM波输出操控

{

TH0=(65536-40)/256;

TL0=(65536-40)%256;

t++;

if(t==xinhao[0])

duoji1=0;

if(t==xinhao[1])

duoji2=0;

if(t==xinhao[2])

duoji3=0;

if(t==500)//

{

t=0;

duoji1=1;

duoji2=1;

duoji3=1;

}

}

void serial() interrupt 4//接纳上位机的操控数据

{

if(flag==0)

{

xinhao[0]=SBUF;

flag=1;

RI=0;

}

else if(flag==1)

{

xinhao[1]=SBUF;

flag=2;

RI=0;

}

else if(flag==2)

{

xinhao[2]=SBUF;

flag=0;

RI=0;

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/266842.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部