欢迎来到天天文库
浏览记录
ID:52777566
大小:173.00 KB
页数:6页
时间:2020-03-30
《单片机PWM控制直流电机的速度.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、用单片机控制直流电机的速度 直流调速器就是调节直流电动机速度的设备,上端和交流电源连接,下端和直流电动机连接,直流调速器将交流电转化成两路输出直流电源,一路输入给直流电机砺磁(定子),一路输入给直流电机电枢(转子),直流调速器通过控制电枢直流电压来调节直流电动机转速。同时直流电动机给调速器一个反馈电流,调速器根据反馈电流来判断直流电机的转速情况,必要时修正电枢电压输出,以此来再次调节电机的转速。直流电机的调速方案一般有下列3种方式:·1、改变电枢电压;·2、改变激磁绕组电压;·3、改变电枢回路电阻。使用单片机来控制直流电机的变速,一般采用调节电枢电压的方式,通过单片机控
2、制PWM1,PWM2,产生可变的脉冲,这样电机上的电压也为宽度可变的脉冲电压。根据公式U=aVCC其中:U为电枢电压;a为脉冲的占空比(03、PWM波的周期。上图中,占空比是60%,即输出脉冲的为0.6ms,断开脉冲为0.4ms,这样电枢电压为5*60%=3V。我们讨论的是可以正转反转的,如果只按一个方向转,我们就只要把PWM1置为高电平或低电平,只改变另一个PWM2电平的脉冲变化即可,,如下图(Q4导通,Q3闭合,电机只能顺时针调整转动速度)C语言代码:#include#defineucharunsignedchar#defineuintunsignedintsbitK5=P1^4;sbitK6=P1^5;sbitPWM1=P1^0;sbitPWM2=P1^1;sbitFMQ=P3^64、;ucharZKB1,ZKB2;voiddelaynms(uintaa){ ucharbb; while(aa--) { for(bb=0;bb<115;bb++) //1ms基准延时程序 { ; } } }voiddelay500us(void){ intj; for(j=0;j<57;j++) { ; }}voidbeep(void){ uchart; for(t=0;t<100;t++) { delay500us(); FMQ=!FMQ; //产生脉冲 } FMQ=1; //关闭蜂鸣器 delaynms(300);}voidmain(vo5、id){ TR0=0; //关闭定时器0 TMOD=0x01; //定时器0,工作方式1 TH0=(65526-100)/256; TL0=(65526-100)%256; //100us即0.01ms中断一次 EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器T0 ZKB1=50; //占空比初值设定 ZKB2=50; //占空比初值设定 while(1) { if(!K5) { delaynms(15); //消抖 if(!K5) //确定按键按下 { 6、beep(); ZKB1++; //增加ZKB1 ZKB2=100-ZKB1; //相应的ZKB2就减少 } } if(!K6) { delaynms(15); //消抖 if(!K6) //确定按键按下 { beep(); ZKB1--; //减少ZKB1 ZKB2=100-ZKB1; //相应的ZKB2增加 } } if(ZKB1>99) ZKB1=1; if(ZKB1<1) ZKB1=99; }}voidtime0(void)interrupt1{ staticucharN=07、; TH0=(65526-100)/256; TL0=(65526-100)%256; N++; if(N>100) N=0; if(N<=ZKB1) PWM1=0; else PWM1=1; if(N<=ZKB2) PWM2=0; else PWM2=1;}//显现:电机转速到最高后,也就是N为1或99时,再按一下,就变到99或1,//电机反方向旋转以最高速度
3、PWM波的周期。上图中,占空比是60%,即输出脉冲的为0.6ms,断开脉冲为0.4ms,这样电枢电压为5*60%=3V。我们讨论的是可以正转反转的,如果只按一个方向转,我们就只要把PWM1置为高电平或低电平,只改变另一个PWM2电平的脉冲变化即可,,如下图(Q4导通,Q3闭合,电机只能顺时针调整转动速度)C语言代码:#include#defineucharunsignedchar#defineuintunsignedintsbitK5=P1^4;sbitK6=P1^5;sbitPWM1=P1^0;sbitPWM2=P1^1;sbitFMQ=P3^6
4、;ucharZKB1,ZKB2;voiddelaynms(uintaa){ ucharbb; while(aa--) { for(bb=0;bb<115;bb++) //1ms基准延时程序 { ; } } }voiddelay500us(void){ intj; for(j=0;j<57;j++) { ; }}voidbeep(void){ uchart; for(t=0;t<100;t++) { delay500us(); FMQ=!FMQ; //产生脉冲 } FMQ=1; //关闭蜂鸣器 delaynms(300);}voidmain(vo
5、id){ TR0=0; //关闭定时器0 TMOD=0x01; //定时器0,工作方式1 TH0=(65526-100)/256; TL0=(65526-100)%256; //100us即0.01ms中断一次 EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器T0 ZKB1=50; //占空比初值设定 ZKB2=50; //占空比初值设定 while(1) { if(!K5) { delaynms(15); //消抖 if(!K5) //确定按键按下 {
6、beep(); ZKB1++; //增加ZKB1 ZKB2=100-ZKB1; //相应的ZKB2就减少 } } if(!K6) { delaynms(15); //消抖 if(!K6) //确定按键按下 { beep(); ZKB1--; //减少ZKB1 ZKB2=100-ZKB1; //相应的ZKB2增加 } } if(ZKB1>99) ZKB1=1; if(ZKB1<1) ZKB1=99; }}voidtime0(void)interrupt1{ staticucharN=0
7、; TH0=(65526-100)/256; TL0=(65526-100)%256; N++; if(N>100) N=0; if(N<=ZKB1) PWM1=0; else PWM1=1; if(N<=ZKB2) PWM2=0; else PWM2=1;}//显现:电机转速到最高后,也就是N为1或99时,再按一下,就变到99或1,//电机反方向旋转以最高速度
此文档下载收益归作者所有