您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > PWM信号控制直流电机调速的源代码
单片机利用PWM信号控制直流电机调速的源代码直流电动机转速n=(U-IR)/Kφ其中U为电枢端电压,I为电枢电流,R为电枢电路总电阻,φ为每极磁通量,K为电动机结构参数。直流电机转速控制可分为励磁控制法与电枢电压控制法。励磁控制法是控制磁通,其控制功率小,低速时受到磁饱和限制,高速时受到换向火花和换向器结构强度的限制,而且由于励磁线圈电感较大动态响应较差,所以这种控制方法用得很少。大多数应用场合都使用电枢电压控制法。随着电力电子技术的进步,改变电枢电压可通过多种途径实现,其中PWM(脉宽调制)便是常用的改变电枢电压的一种调速方法。PWM调速控制的基本原理是按一个固定频率来接通和断开电源,并根据需要改变一个周期内接通和断开的时间比(占空比)来改变直流电机电枢上电压的占空比,从而改变平均电压,控制电机的转速。在脉宽调速系统中,当电机通电时其速度增加,电机断电时其速度减低。只要按照一定的规律改变通、断电的时间,即可控制电机转速。而且采用PWM技术构成的无级调速系统.启停时对直流系统无冲击,并且具有启动功耗小、运行稳定的特点。设电机始终接通电源时,电机转速最大为Vmax,且设占空比为D=t/T,则电机的平均速度Vd为:Vd=VmaxD由公式可知,当改变占空比D=t/T时,就可以得到不同的电机平均速度Vd,从而达到调速的目的。严格地讲,平均速度与占空比D并不是严格的线性关系,在一般的应用中,可将其近似地看成线性关系。在直流电机驱动控制电路中,PWM信号由外部控制电路提供,并经高速光电隔离电路、电机驱动逻辑与放大电路后,驱动H桥下臂MOSFET的开关来改变直流电机电枢上平均电压,从而控制电机的转速,实现直流电机PWM调速。单片机产生PWM信号控制直流电机调速的源代码本例程利用2051的T0产生双路PWM信号,推动L293D或L298N为直流电机调速,程序已通过调试。接L298N时相应的管脚上最好接上10K的上拉电阻。/*=======直流电机的PWM速度控制程序========*//*晶振采用11.0592M,产生的PWM的频率约为91Hz*/#includereg51.h#includemath.h#defineucharunsignedchar#defineuintunsignedintsbiten1=P1^0;/*L298的EnableA*/sbiten2=P1^1;/*L298的EnableB*/sbits1=P1^2;/*L298的Input1*/sbits2=P1^3;/*L298的Input2*/sbits3=P1^4;/*L298的Input3*/sbits4=P1^5;/*L298的Input4*/uchart=0;/*中断计数器*/ucharm1=0;/*电机1速度值*/ucharm2=0;/*电机2速度值*/uchartmp1,tmp2;/*电机当前速度值*//*电机控制函数index-电机号(1,2);speed-电机速度(-100—100)*/voidmotor(ucharindex,charspeed){if(speed=-100&&speed=100){if(index==1)/*电机1的处理*/{m1=abs(speed);/*取速度的绝对值*/if(speed0)/*速度值为负则反转*/{s1=0;s2=1;}else/*不为负数则正转*/{s1=1;s2=0;}}if(index==2)/*电机2的处理*/{m2=abs(speed);/*电机2的速度控制*/if(speed0)/*电机2的方向控制*/{s3=0;s4=1;}else{s3=1;s4=0;}}}}voiddelay(uintj)/*简易延时函数*/{for(j;j0;j--);}voidmain(){uchari;TMOD=0x02;/*设定T0的工作模式为2*/TH0=0x9B;/*装入定时器的初值*/TL0=0x9B;EA=1;/*开中断*/ET0=1;/*定时器0允许中断*/TR0=1;/*启动定时器0*/while(1)/*电机实际控制演示*/{for(i=0;i=100;i++)/*正转加速*/{motor(1,i);motor(2,i);delay(5000);}for(i=100;i0;i--)/*正转减速*/{motor(1,i);motor(2,i);delay(5000);}for(i=0;i=100;i++)/*反转加速*/{motor(1,-i);motor(2,-i);delay(5000);}for(i=100;i0;i--)/*反转减速*/{motor(1,-i);motor(2,-i);delay(5000);}}}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信号控制直流电机调速的源代码
链接地址:https://www.777doc.com/doc-2853990 .html