欢迎来到天天文库
浏览记录
ID:59121050
大小:303.50 KB
页数:4页
时间:2020-09-15
《PWM舵机基于单片机的调控.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、基本原理介绍演示机构采用的是舵机,每个需要一路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、此时其他五路无输出,相当于输出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
3、,正脉冲时间为0.5-2.5ms此算法在50Hz(20ms)频率的限制下,最多可输出8路PWM波形(8*2.5ms=20ms)二、 实际程序 程序如下:#include #include #define uchar unsigned char #define uint unsigned int sbit Out1=P2^0; sbit Out2=P2^1; sbit Out3=P2^2; sbit Out4=P2^3; sbit Out5=P2^4; void PWM(u
4、int a, uint b,uint c, uint d,uint e) { uchar A,B,C,D,E; uint M=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 { O
5、ut2 = 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() {
6、 uchar a,b,c,d,e; uint m; a=170; b=149; c=d=e=149; SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1TMOD = 0x20; //定时器工作方式2PCON = 0x80; //TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592) TH1 = 0xF3; // //baud*2 /* 波特率4800、数据位8、停止
7、位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; else a=a+1; } if(m==2) { if(a>=180)a=a-3; else a=a-1; } if(m==3) b=b
8、+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>=2
此文档下载收益归作者所有