您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > PWM调速+循迹--智能小车c代码-51单片机
//T0产生双路PWM信号,L298N为直流电机调速,接L298N时相应的管脚上最好接上10K的上拉电阻。/*晶振采用12M,产生的PWM的频率约为100Hz*/#includereg51.h#includemath.h#defineucharunsignedchar#defineuintunsignedintsbiten1=P3^4;/*L298的EnableA*/sbiten2=P3^5;/*L298的EnableB*/sbits1=P1^0;/*L298的Input1*/sbits2=P1^1;/*L298的Input2*/sbits3=P1^3;/*L298的Input3*/sbits4=P1^2;/*L298的Input4*/sbitR=P2^0;sbitC=P2^1;sbitL=P2^2;sbitkey=P1^4;uchart=0;/*中断计数器*/ucharm1=0;/*电机1速度值*/ucharm2=0;/*电机2速度值*/uchartmp1,tmp2;/*电机当前速度值*//*电机控制函数index-电机号(1,2);speed-电机速度(0-100)*/voidmotor(ucharindex,charspeed){if(speed=100){if(index==1)/*电机1的处理*/{m1=abs(speed);/*取速度的绝对值*/s1=1;s2=0;}if(index==2)/*电机2的处理*/{m2=abs(speed);/*电机2的速度控制*/s3=1;s4=0;}}}voidBack(void){s1=0;s2=1;s3=1;s4=0;}voidGO(void){s1=1;s2=0;s3=1;s4=0;}voidTL(void){s1=1;s2=0;s3=0;s4=1;}voidTR(void){s1=0;s2=1;s3=1;s4=0;}voidSTOP(void){s1=1;s2=1;s3=1;s4=1;}voiddelay(uintj)/*简易延时函数*/{for(j;j0;j--);}voidmain(){uchari=0,j=0;TMOD=0x02;/*设定T0的工作模式为2,8位自动重置定时器,没过几个机器周期,计数器加一*/TH0=0x9B;/*装入定时器的初值,计数100次溢出*/TL0=0x9B;/*装入时间常数*/EA=1;/*开中断*/ET0=1;/*定时器0允许中断*/TR0=1;/*启动定时器0*/while(1){if(key==1){/*电机实际控制演示*/if(i=100)//正转加速{motor(1,i);motor(2,i);delay(5000);i++;}else{GO();}}else{EA=0;while(1){if((L|C|R)==0)STOP();if(L&R)GO();if(L==0){while(C){TL();}}if(R==0){while(C){TR();}}}}}}voidtimer0()interrupt1/*T0中断服务程序*/{if(t==0)/*1个PWM周期完成后才会接受新数值*/{tmp1=m1;tmp2=m2;}if(ttmp1)en1=1;elseen1=0;/*产生电机1的PWM信号*/if(ttmp2)en2=1;elseen2=0;/*产生电机2的PWM信号*/t++;if(t=100)t=0;/*1个PWM信号由100次中断产生*/}
本文标题:PWM调速+循迹--智能小车c代码-51单片机
链接地址:https://www.777doc.com/doc-5529602 .html