您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > PWM舵机基于单片机的调控
一、基本原理介绍演示机构采用的是舵机,每个需要一路PWM波和两路电源输入。电源输入标准为5V1-8A,采用带输入和输出保护的50w开关电源供电;PWM波为50Hz,正脉冲时间为0.5-2.5ms,对应-90°至90°(实际使用中为了保护机械,为0.7-2.3ms,舵机旋转范围为-70°至70°)。由于系统对于输出的频率有5Hz的限制,因此使用软件延迟来实现最多八路的的PWM波输出。PWM波由MCU通过软件延时产生,算法概述如下(流程图见附件):1.A路输出2.5ms脉冲(输出正脉冲,不足时间由低电平补至2.5ms),此时其他五路无输出,相当于输出2.5ms低电平;2.B路输出2.5ms脉冲(同A路,不足时间由低电平补齐),此时包括A路的其他五路无输出,相当于输出2.5ms低电平;3.同理,输出C,D,E,F路4.此时,1-3步总时间为2.5*6=15ms,其中每路由一个小于2.5ms的正脉冲和低电平时间组成。由于输出周期为20ms,故应再输出20ms-15ms=5ms低电平时间,使得各路频率为50Hz。重复1-3步,得到输出波形如下图:(仅以4路为例,使用Proteus仿真示波器,图2.2.2)可以看到,此时各路输出均为50Hz,正脉冲时间为0.5-2.5ms此算法在50Hz(20ms)频率的限制下,最多可输出8路PWM波形(8*2.5ms=20ms)二、实际程序程序如下:#includestdio.h#includeREG52.h#defineucharunsignedchar#defineuintunsignedintsbitOut1=P2^0;sbitOut2=P2^1;sbitOut3=P2^2;sbitOut4=P2^3;sbitOut5=P2^4;voidPWM(uinta,uintb,uintc,uintd,uinte){ucharA,B,C,D,E;uintM=984;A=250-a;B=250-b;C=250-c;D=250-d;E=250-e;do{Out1=1;}while(a--);do{Out1=0;}while(A--);do{Out2=1;}while(b--);do{Out2=0;}while(B--);do{Out3=1;}while(c--);do{Out3=0;}while(C--);do{Out4=1;}while(d--);do{Out4=0;}while(D--);do{Out5=1;}while(e--);do{Out5=0;}while(E--);do{}while(M--);}main(){uchara,b,c,d,e;uintm;a=170;b=149;c=d=e=149;SCON=0x50;//REN=1允许串行接受状态,串口工作模式1TMOD=0x20;//定时器工作方式2PCON=0x80;//TH1=0xFD;//baud*2/*reloadvalue19200、数据位8、停止位1。效验位无(11.0592)TH1=0xF3;////baud*2/*波特率4800、数据位8、停止位1。效验位无(12M)TL1=0xF3;TR1=1;ES=1;//开串口中断EA=1;//开总中断while(1){if(RI){RI=0;m=SBUF-48;if(m==1){if(a=120)a=a+3;elsea=a+1;}if(m==2){if(a=180)a=a-3;elsea=a-1;}if(m==3)b=b+1;if(m==4)b=b-1;if(m==5)c=c+1;if(m==6)c=c-1;if(m==7)d=d+1;if(m==8)d=d-1;if(m==9)e=e+1;if(m==0)e=e-1;if(a=69)a=69;if(a=229)a=228;if(b=69)b=69;if(b=229)b=228;if(c=69)b=69;if(c=229)b=228;if(d=69)b=69;if(d=229)b=228;if(e=69)b=69;if(e=229)b=228;}else{PWM(a,b,c,d,e);}}}
本文标题:PWM舵机基于单片机的调控
链接地址:https://www.777doc.com/doc-2847549 .html