×
单片机 > 单片机程序设计 > 详情

51单片机PWM直流电机调速

发布时间:2020-06-08 发布时间:
|

直流电动机转速N的表达式为:N=U-IR/Kφ


由上式可得,直流电动机的转速控制方法可分为两类:调节励磁磁通的励磁控制方法和调节电枢电压的电枢控制方法。其中励磁控制方法在低速时受磁极饱和的限制,在高速时受换向火花和换向器结构强度的限制,并且励磁线圈电感较大,动态响应较差,所以这种控制方法用得很少。现在,大多数应用场合都使用电枢控制方法。


对电动机的驱动离不开半导体功率器件。在对直流电动机电枢电压的控制和驱动中,对半导体器件的使用上又可分为两种方式:线性放大驱动方式和开关驱动方式。


线性放大驱动方式是使半导体功率器件工作在线性区。这种方式的优点是:控制原理简单,输出波动小,线性好,对邻近电路干扰小;但是功率器件在线性区工作时由于产生热量会消耗大部分电功率,效率和散热问题严重,因此这种方式只用于微小功率直流电动机的驱动。绝大多数直流电动机采用开关驱动方式。开关驱动方式是使半导体器件工作在开关状态,通过脉宽调制PWM来控制电动机电枢电压,实现调速。


在PWM调速时,占空比α是一个重要参数。以下3种方法都可以改变占空比的值。


(1)定宽调频法


这种方法是保持t1不变,只改变t2,这样使周期T(或频率)也随之改变。


(2)调频调宽法


这种方法是保持t2不变,只改变t1,这样使周期T(或频率)也随之改变。


(3)定频调宽法


这种方法是使周期T(或频率)保持不变,而同时改变t1和t2。


前两种方法由于在调速时改变了控制脉冲的周期(或频率),当控制脉冲的频率与系统的固有频率接近时,将会引起振荡,因此这两种方法用得很少。目前,在直流电动机的控制中,主要使用定频调宽法。


直流电动机双极性驱动可逆PWM控制系统


双极性驱动则是指在一个PWM周期里,作为在电枢两端的脉冲电压是正负交替的。


双极性驱动电路有两种,一种称为T型,它由两个开关管组成,采用正负电源,相当于两个不可逆控制系统的组合。但由于T型双极性驱动中的开关管要承受较高的反向电压,因此只用在低压小功率直流电动机驱动。


另一种称为H型。


H型双极性驱动


1.  电动机控制电路模块


H桥电动机驱动电路的工作原理:


A:当单片机的P0.0脚输出高电平,而P0.1脚输出低电平时,通过光电耦合器后仍然输出为高电平,使Q4管导通,此时Q1也处于导通状态,但Q2管的基极的电位被强行拉低,Q2管处于截止状态。由于单片机的P0.1脚输出低电平,


Q8处于截止状态,而此时Q7因为Q5的截止而处于导通状态,从而使电动机形成回路,电机正常工作。


B:同理可得,当P0.0脚输出低电平,而P0.1脚输出高电平时,三极管的状态与上述相反,电机同样处于正常工作状态。


C:当P0.0脚和P0.1同时为高电平或低电平,由于Q4与Q8和Q3与Q7的工作状态相同,同时处于导通或截止,使电机两断电位相同,无法使电机形成闭和回路,电机不工作,着就是所谓本设计所提及的刹车状态。


由于电路中在驱动功率管的发射极各添加了一个小电感,目的是为了使电机驱动电压更加稳定,得到较为平滑的驱动电压,从而增加了刹车时动作的准确性,减少电机的在起动和停止的瞬间产生过大的电压对功率管的冲击,导致功率管的损坏。同时也提高了电机的刹车控制可靠性和准确性,不至于因惯性而导致控制上产生较大的误差。


该桥的优点是电路的原理简单、易控制、功耗低带负载能力强、刹车的精度很高而且价格低廉。在驱动电路的控制信号输入断采用了光电隔离技术,减小H桥电机驱动电路对单片机的干扰,实现模拟电路与数字电路的隔离。在单片机的配合下,通过PWM调节脉宽的方法,实现了对驱动电机的轻松调速,通过键盘的配置可以对体的参数进行修改,可以使电机适应各种不同的工作状态,而实现智能控制的目的。正因为采取了PWM该技术,使我们完成基本要求的过程变得简单易行。


在电路中所采取的功率管为中功率管,其中将驱动功率管设计为灵活替换方式,可以根据实际驱动电路的需要,从而调整功率管的型号而不用另行更改电路,就可以满足电路控制的要求


 


2、软件模块部分


在速度控制方面,一般是能通过改变加在电机两端的电压来实现的,可以是连续改变(加直流电压),也可以是断续改变(加脉冲电压)。为了简单用,我们采用了脉宽调速,脉宽的变化可以通过硬件或软件来实现。


方案一    硬件实现是通过改变振荡电路中RC参数来调整充放电时间。若用硬件电路来实现,在稳定性方面得不到保证。


方案三    用软件的作法是通过设置高电平及低电平的保持时间来达到PWM的脉宽调制目的。


就比较而言,软件调整量化指标更高、调整更可靠、更方便、更准确。因此在设计时,常考虑方案二。


脉冲频率对电机转机也有影响,脉冲频率高连续性好,但带负载能力差,频率低则反之。经实验发现,脉冲频率在15━20HZ效果最佳。在本设计中采用了20HZ进行设计。


脉冲调速实质上是调节加在电机两端的平均功率,通过计算可发现电机的速度与脉宽成正比。


软件编程的考虑是设置脉宽这个变量。在P0.0,P0.1的输出控制信号来产生20HZ可调脉宽方波。


下面是51单片机的实验程序


#include < reg51.h >

#include < intrins.h >

 

sbit  K1 =P1^4 ;                    //增加键

sbit  K2 =P1^5 ;                    //减少键

sbit  P00 =P0^1;

sbit  BEEP =P3^7 ;                //蜂鸣器

unsigned char PWM=0xe7;   //赋初值

 

void Beep();

void delayms(unsigned char ms);

void delay(unsigned char t);

 

/*********************************************************/

void main()

{

 

     P1=0xff;

    TMOD=0x21 ;

    TH0=0xff ;             //50us延时常数

    TL0=0xce ;            //频率调节

 

    TH1=PWM ;            //脉宽调节

    TL1=0 ;

 

     EA=1;

     ET0=1;

     ET1=1;

    

     TR0=1 ;

 

   while(1)

   {

     do{

            if(PWM!=0xff)

           {PWM++ ;delayms(10);}

           else Beep() ;

         }

     while(K1==0);

 

     do{

           if(PWM!=0xce)

          {PWM-- ;delayms(10);}

           else Beep() ;

          }

     while(K2==0);

   }

}

 

void timer0() interrupt 1

{

    TR1=0 ;

    TH0=0xff ;

    TL0=0xce ;

    TH1=PWM ;

    TR1=1 ;

    P00=0 ;      //启动输出

}

 

 

void timer1() interrupt 3

{

    TR1=0 ;

    P00=1 ;     //结束输出

}

 

/*********************************************************/

//蜂鸣器子程序

/*********************************************************/

 

void Beep()   

  {

      unsigned char i  ;

      for (i=0  ;i<100  ;i++)

        {

          delay(100)  ;

          BEEP=!BEEP  ;                //Beep取反

        }

     BEEP=1  ;                            //关闭蜂鸣器

     delayms(100);

  }

 

/*********************************************************/

// 延时子程序

/*********************************************************/

void delay(unsigned char t)

 {

    while(t--)   ;

 }

 

/*********************************************************/

// 延时子程序

/*********************************************************/

void delayms(unsigned char ms)

 

{

    unsigned char i ;

    while(ms--)

     {

        for(i = 0 ; i < 120 ; i++) ;

     }

}

 

/*********************************************************/


关键字:51单片机  PWM  直流电机  调速 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
用NTC电阻测温并显示在TM1637数码管