图1 L298驱动直流电机
在上一实例中,我们使用H桥驱动直流电机实现正转、反转。但是自己搭建电机驱动电路存在两个问题:电路复杂;分立元器件的电性能需要严格一致并且稳定、可靠。在本实例中,我们用专用的电机驱动芯片L298来驱动直流电机。
在本例中,使用专用的电机驱动芯片L298来驱动控制直流电机,这样做可以大大简化电路设计,并且电路性能更为可靠和稳定。
电机专用驱动芯片L298从原理上来说,也是H桥驱动电路。它的输出功率大,输出电流最大可达4A,最高工作电压可到50V。用来驱动一般的大功率直流电机完全没有问题。更为重要的是,L298的输入控制端可以直接连到单片机的管脚上,因而非常适合单片机控制。
L298的内部结构如下图所示。
图2 L298内部结构
从图中可以看出,引脚IN1~IN4是逻辑电平输入引脚:如果接直流电机的话,IN1、IN2这两个脚控制一个直流电机;IN3、IN4这两个脚控制另一个直流电机。例如IN1输入高电平1,IN2输入低电平0,对应OUT1、OUT2两个引脚上接的直流电机正转;IN1输入低电平0,IN2输入高电平1,对应电机反转。
ENA、ENB:L298的使能端(高电平有效),可通过这两个端口实现PWM调速。
下图是L298直接驱动两路直流电机的电路图。
图中的D1~D8是8个续流二极管。
图3 L298驱动两路直流电机
这里说到了续流二极管,我们顺便来了解一下续流二极管是什么,起什么作用?
严格来说,续流二极管并不是一种真正严格意义上的电子元器件,一般快速恢复二极管或者肖特基二极管都可以作为续流二极管,由此可见“续流二极管”并不是一个实质的元件,它只不过是一个在电路中起到“续流”作用的二极管罢了。
“续流二极管”在电路中一般用来保护元件不被感应电压击穿或烧坏,以并联的方式接到产生感应电动势的元件两端,并与其形成回路,使其产生的高电动势在回路以续电流方式消耗,从而起到保护电路中的元件不被损坏的作用。而电机一般都是感性负载,所以在电机驱动电路中,续流二极管是少不了的。
图1是本实例的电路图。电路中,L298的IN1和IN2分别接VCC和GND,这种接法可以使直流电机正转,如果反过来接,则直流电机反转。
OUT1和OUT2接直流电机两端。D1~D4这四个二极管是续流二极管。
L298的使能端ENA接单片机的一个I/O口,当该端口输出高电平时,L298被使能,电机开始转动。反之,电机停止转动。
本实例程序代码如下。
#include <AT89x52.h>
sbit MotoENA = P2^3; //使能引脚
unsigned char MotoState=0;
int main(void)
{
IE=0x85;//外部中断配置
TCON=0x00;
while(1)
{
if(MotoState==1)//启动按键按下,电机开始转动
MotoENA=1;
if(MotoState==0)//停止按键按下,电机停止转动
MotoENA=0;
}
}
//外部中断0服务程序,中断发生,控制电机转动
void int1(void) interrupt 0
{
MotoState=1;
}
//外部中断1服务程序,中断发生,控制电机停转
void int2(void) interrupt 2
{
MotoState=0;
}
本程序中,直流电机的启动、停止根据两个按键的状态决定,这两个按键连接在单片机的两个外部中断引脚上。当然,也可以不使用外部中断功能,直接用普通I/O口的输入检测功能就可判断按键的状态,但是考虑到对按键事件的响应速度,使用外部中断更为合适。
编写程序代码,编译生成HEX文件,将HEX文件装载到proteus电路的单片机中,开始仿真,通过按下不同的按键观察电机的运行状态。需要注意的是,当停止开关按下后,电机由于惯性的作用,不会立即停止转动,而是转速慢慢下降,直至停转。
通过本实例,我们学习了电机驱动芯片L298的电路设计和编程实现。同时也顺便了解了续流二极管的作用和使用方法。