欢迎来到天天文库
浏览记录
ID:38416374
大小:28.50 KB
页数:5页
时间:2019-06-12
《单片机产生PWM信号控制直流电机调速的源代码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、单片机产生PWM信号控制直流电机调速的源代码本例程利用2051的T0产生双路PWM信号,推动L293D或L298N为直流电机调速,程序已通过调试。接L298N时相应的管脚上最好接上10K的上拉电阻。有什么不对的地方欢迎大家批评指正!/*=======直流电机的PWM速度控制程序========*//*晶振采用11.0592M,产生的PWM的频率约为91Hz*/#include#include#defineucharunsignedchar#defineuintunsignedin
2、tsbiten1=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;/*电机当前速度值*//*电机控制函数
3、index-电机号(1,2);speed-电机速度(-100—100)*/voidmotor(ucharindex,charspeed){if(speed>=-100&&speed<=100){if(index==1)/*电机1的处理*/{m1=abs(speed);/*取速度的绝对值*/if(speed<0)/*速度值为负则反转*/{s1=0;s2=1;}else/*不为负数则正转*/{s1=1;s2=0;}}if(index==2)/*电机2的处理*/{m2=abs(speed);/*电机2的速度控制*/if
4、(speed<0)/*电机2的方向控制*/{s3=0;s4=1;}else{s3=1;s4=0;}}}}voiddelay(uintj)/*简易延时函数*/{for(j;j>0;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++)/*正转加
5、速*/{motor(1,i);motor(2,i);delay(5000);}for(i=100;i>0;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;i>0;i--)/*反转减速*/{motor(1,-i);motor(2,-i);delay(5000);}}}voidtimer0()interrupt1/*T0中
6、断服务程序*/{if(t==0)/*1个PWM周期完成后才会接受新数值*/{tmp1=m1;tmp2=m2;}if(t=100)t=0;/*1个PWM信号由100次中断产生*///4级速度可调:0、1、2、3;对应占空比:0、1/4、2/4、3/4#includesbitkey=P3^6;sbitmotor=P2^4;uns
7、ignedcharkey_scan(void);voidmotor_set(unsignedcharv);voidmotor_init(void);unsignedcharPWM_H=0,n=0,i=0;voidmain(){motor_init();while(1){if(key_scan()==1){motor_set(i%4);}}}//电机转动voidmotor_run()interrupt3{if(n=4)n=0;}//速度控制,4
8、级速度可调:0、1、2、3;对应占空比:0、1/4、2/4、3/4voidmotor_set(unsignedcharv){if(v>3)v=3;if(v==0)TR1=0;else{TR1=1;PWM_H=v;}}//电机初始化voidmotor_init(void){EA=1;ET1=1;TMOD=TMOD&0X0F
9、0x20;}//扫描按键unsignedchark
此文档下载收益归作者所有