技术热线: 4007-888-234

直流电机调速的PWM实现方法

更新时间: 2019-01-05
阅读量:1258

PWM在控制中使用非常广泛,可以以数字量对模拟电路进行控制。这里对PWM的原理进行讲述,并举例说明PWM的重要应用。

1、PWM简介

采样控制理论中有一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。PWM控制技术就是以该结论为理论基础,对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率。

PWM控制的基本原理很早就已经提出,但是受电力电子器件发展水平的制约,在上世纪80年代以前一直未能实现。直到进入上世纪80年代,随着全控型电力电子器件的出现和迅速发展,PWM控制技术才真正得到应用。随着电力电子技术、微电子技术和自动控制技术的发展以及各种新的理论方法,如现代控制理论、非线性系统控制思想的应用,PWM控制技术获得了空前的发展。通俗的说PWM是采用数字量对模拟量进行合成的方法。

数字量是怎么样对模拟量进行合成的呢?请看下例:

用PWM波代替正弦冲半波:

上图中用一系列等幅不等宽的脉冲来代替一个正弦半波,正弦半波N等分,看成N个相连的脉冲序列,宽度相等,但幅值不等;用矩形脉冲代替,等幅,不等宽,中点重合,面积(冲量)相等,宽度按正弦规律变化。这两种波作用于电路时,所产生的效果基本相同。

2、PWM的应用

基于面积相等的原理实际上可以对任意波形进行合成,再如下图:

图中a波形作用于LED上,表现为光强的递增变化,b波形采用PWM对a进行合成。在某一段时间内两种波形的面积是相同的,因此b作用于LED上时,效果与a是相同的。b波以一定频率的等幅不等宽的脉冲序列出现,脉冲宽度递增。

PWM的单片机实现如下:

#include

 #define uchar unsigned char

/*—————————————————————————————-

以程序用于说明PWM的实现

——————————————————————————————-*/

/**

程序思路说明:

关于频率和占空比的确定,对于12M晶振,

假定PWM输出频率为1KHZ,这样定时中断次数 *

设定为C=10,即0.01MS中断一次,则TH0=FF,TL0=F6;

由于设定中断时间为0.01ms,这样*

可以设定占空比可从1-100变化。即0.01ms*100=1ms

*/

/**

TH0和TL0是计数器0的高8位和低8位计数器,

计算办法:TL0=(65536-C)%256;

TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;

TMOD是计数器*

工作模式选择,0X01表示选用模式1,它有16位计数器,

最大计数脉冲为65536,最长时 间

为1ms*65536=65.536ms

**/

#define V_TH0  0XFF                  

#define V_TL0  0XF6                  

#define V_TMOD 0X01                  

void init_sys(void); /系统初始化函数/

void Delay5Ms(void);

unsigned char ZKB1,ZKB2;

void delay(unsigned int time)

{

while(time—);

}

void main (void)

{

init_sys();

ZKB1=40; /占空比初始值设定/

ZKB2=60; /占空比初始值设定/

while(1)

{

if (!P1_1) //如果P1.1为低电平,增加占空比

{

delay(50000);

if(!P1_1)

 {

  ZKB1++;

  ZKB2=100-ZKB1;

 }

}

if(!P1_2) //如果P1.2为低电平,减少占空比

{

delay(50000);

if (!P1_2)

{

 ZKB1--;

 ZKB2=100-ZKB1;

}

}

/对占空比值限定范围/

if (ZKB1>99) ZKB1=1;

if (ZKB1<1) ZKB1=99;

}

}

/系统初始化函数/

void init_sys(void)

{

/定时器初始化/

TMOD=V_TMOD;

TH0=V_TH0;

TL0=V_TL0;

TR0=1;

ET0=1;

EA=1;

}

/中断函数/

void timer0(void) interrupt 1 using 2

{

static uchar click=0; /中断次数计数器变量/

TH0=V_TH0; /恢复定时器初始值/

TL0=V_TL0;

++click;

if (click>=100) click=0;

if (click<=ZKB1)

/当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整/

P1_3=0;

else

P1_3=1;

if (click<=ZKB2)

P1_4=0;

else

P1_4=1;

}

以上是PWM的简单应用,用得更多的是采用它进行直流电机调速,其实就是把波形作用于电机驱动电路的使用端,有必要对电机驱动电路进行介绍。

1)H桥式电机驱动电路:

  上图所示为一个典型的直流电机控制电路。电路得名于“H桥式驱动电路”是因为它的形状酷似字母H。4个三极管组成H的4条垂直腿,而电机就是H中的横杠(上图及随后的两个图都只是示意图,而不是完整的电路图,其中三极管的驱动电路没有画出来)。电路中,H桥式电机驱动电路包括4个三极管和一个电机。要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。

要使电机运转,必须使对角线上的一对三极管导通。例如,如上图所示,当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极。按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。当三极管Q1和Q4导通时,电流将从左至右流过电机,从而驱动电机按特定方向转动(电机周围的箭头指示为顺时针方向)。

上图所示为另一对三极管Q2和Q3导通的情况,电流将从右至左流过电机。 当三极管Q2和Q3导通时,电流将从右至左流过电机,从而驱动电机沿另一方向转动(电机周围的箭头表示为逆时针方向)。

2)使能控制与方向逻辑

驱动电机时,保证H桥上两个同侧的三极管不会同时导通非常重要。如果三极管Q1和Q2同时导通,那么电流就会从正极穿过两个三极管直接回到负极。此时,电路中除了三极管外没有其他任何负载,因此电路上的电流就可能达到最大值(该电流仅受电源性能限制),甚至烧坏三极管。基于上述原因,在实际驱动电路中通常要用硬件电路方便地控制三极管的开关。上图所示就是基于这种考虑的改进电路,它在基本H桥电路的基础上增加了4个与门和2个非门。4个与门同一个“使能”导通信号相接,这样,用这一个信号就能控制整个电路的开关。而2个非门通过提供一种方向输人,可以保证任何时候在H桥的同侧腿上都只

有一个三极管能导通。(与前面的示意图一样,上图所示也不是一个完整的电路图,特别是图中与门和三极管直接连接是不能正常工作的。)

具有使能控制和方向逻辑的H桥电路采用以上方法,电机的运转就只需要用三个信号控制:两个方向信号和一个使能信号。如果DIR-L信号为0,DIR-R信号为1,并且使能信号是1,那么三极管Q1和Q4导通,电流从左至右流经电机(如上图所示);如果DIR-L信号变为1,而DIR-R信号变为0,那么Q2和Q3将导通,电流则反向流过电机。

实际使用的时候,用分立件制作H桥式是很麻烦的,好在现在市面上有很多封装好的H桥集成电路,接上电源、电机和控制信号就可以使用了,在额定的电压和电流内使用非常方便可靠。比如常用的L293D、L298N、TA7257P、SN754410等。

3)L298电机驱动芯片介绍
L298是一种高电压,高电流电机驱动集成电路,内置双路全桥驱动,可以同时驱动两个直流电机,通过外部控制信号与PWM,可以实现电机的调向与调速,也可以驱动一个步进电机。

  1. 芯片封装

  2. 引脚定义

编号

名称

功能描述

1,15

Sense A Sense B

在此引脚与地之间接采样电阻,用来调节负载电流

2,3

Out1 Out2

桥式电路A的的输出端,接电机

4

Vs

输出端电源供给

5,7

Input 1 Input2

桥式电路A的控制端

6,11

Enable A Enable B

桥式电路A与B的使能端

8

GND

9

VSS

逻辑控制地

10,12

Input 3 Input4

桥式电路B的控制端

13,14

Out3 Out4

桥式电路B的的输出端,接电机

NC

不接

将上面的PWM例程产生的波形作用于电机的使能端上,就可以实现电机的调速。至于方向的控制,只需两个IO接于控制端即可。