上一篇文章已经讲解了直流电机的驱动,怎么使它正转,反转和停止,并详细的说了一下H桥原理。今天这里写一下怎么用单片机控制直流电机的速度。本文引用地址:http://www.eepw.com.cn/article/201611/321344.htm 直流调速器就是调节直流电动机速度的设备,上端和交流电源连接,下端和直流电动机连接,直流调速器将交流电转化成两路输出直流电源,一路输入给直流电机砺磁(定子),一路输入给直流电机电枢(转子),直流调速器通过控制电枢直流电压来调节直流电动机转速。同时直流电动机给调速器一个反馈电流,调速器根据反馈电流来判断直流电机的转速情况,必要时修正电枢电压输出,以此来再次调节电机的转速。 直流电机的调速方案一般有下列3种方式: 1、改变电枢电压; 2、改变激磁绕组电压; 3、改变电枢回路电阻。

使用单片机来控制直流电机的变速,一般采用调节电枢电压的方式,通过单片机控制PWM1,PWM2,产生可变的脉冲,这样电机上的电压也为宽度可变的脉冲电压。根据公式 U=aVCC 其中:U为电枢电压;a为脉冲的占空比(0 电动机的电枢电压受单片机输出脉冲控制,实现了利用脉冲宽度调制技术(PWM)进行直流电机的变速。 
因为在H桥电路中,只有PWM1与PWM2电平互为相反时电机才能驱动,也就是PWM1与PWM2同为高电平或同为低电平时,都不能工作,所以上图中的实际脉冲宽度为B,
我们把PWM波的周期定为1ms,占空比分100级可调(每级级差为10%),这样定时器T0每0.01ms产生一次定时中断,每100次后进入下一个PWM波的周期。上图中,占空比是60%,即输出脉冲的为0.6ms,断开脉冲为0.4ms,这样电枢电压为5*60%=3V。 我们讨论的是可以正转反转的,如果只按一个方向转,我们就只要把PWM1置为高电平或低电平,只改变另一个PWM2电平的脉冲变化即可,,如下图(Q4导通,Q3闭合,电机只能顺时针调整转动速度) 
C语言代码: #include #define uchar unsigned char #define uint unsigned int sbit K5=P1^4; sbit K6=P1^5; sbit PWM1=P1^0; sbit PWM2=P1^1; sbit FMQ=P3^6; uchar ZKB1,ZKB2;
void delaynms(uint aa) { uchar bb; while(aa--) { for(bb=0;bb<115;bb++) //1ms基准延时程序 { ; } }
} void delay500us(void) { int j; for(j=0;j<57;j++) { ; } }
void beep(void) { uchar t; for(t=0;t<100;t++) { delay500us(); FMQ=!FMQ; //产生脉冲 } FMQ=1; //关闭蜂鸣器 delaynms(300); } void main(void) { 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) //确定按键按下 { 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;
} } void time0(void) interrupt 1 { static uchar N=0; 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, //电机反方向旋转以最高速度
|