跳到主要内容

使用8051单片机与直流电机接口

在本项目中,我们将学习L293D和L298N电机驱动器,并了解如何使用这两种驱动器与8051单片机实现直流电机接口。

当谈论控制机器人时,第一个想到的就是控制直流电机。将直流电机与单片机接口是机器人应用中的重要概念。通过将直流电机与单片机接口,我们可以实现许多功能,如控制电机转向和速度。本文将介绍如何使用AT89C51控制器(或任何8051单片机变体)控制直流电机。

alt text

1. 电路原理

单片机引脚的最大输出电流为15mA,电压为5V。但大多数直流电机的功率需求远超单片机的能力,而且电机产生的反电动势(EMF)可能损坏单片机。

因此,不建议将直流电机直接与控制器接口。我们需要在直流电机和单片机之间使用电机驱动电路。

我们使用L293D和L298N电机驱动IC来驱动直流电机。使用这些IC,可以同时驱动两个直流电机。L293D电机驱动器的电机供电范围为4.5V至36V,最大电流为600mA;L298N的电机供电最高可达46V,可提供3A电流。

1.1 L293D电机驱动简介

L293D是一款四路H桥电机驱动器,用于驱动直流电机。该IC基于H桥原理工作,H桥是一种允许电压双向控制电机方向的电路。

L293D有4个输入引脚,电机方向取决于施加在这些引脚上的逻辑输入。EN1和EN2必须为高电平才能驱动两个直流电机。

alt text

L293D电路逻辑表

输入电机状态
IN1=0, IN2=0Motor1 空闲
IN1=0, IN2=1Motor1 逆时针
IN1=1, IN2=0Motor1 顺时针
IN1=1, IN2=1Motor1 空闲
IN3=0, IN4=0Motor2 空闲
IN3=0, IN4=1Motor2 逆时针
IN3=1, IN4=0Motor2 顺时针
IN3=1, IN4=1Motor2 空闲

1.2 L298N电机驱动简介

L298N电机驱动模块是目前更常用的驱动IC,其电流和电压额定值高于L293D。

alt text

2. 使用L293D与8051单片机直流电机接口电路图

alt text

2.1 所需元件

  • AT89C51(8051单片机)
  • 8051编程器
  • 编程电缆
  • 12V直流电池或适配器
  • L293D电机驱动器
  • 直流电机
  • 电解电容 – 10μF
  • 陶瓷电容 – 33pF x 2
  • 电阻 10kΩ (1/4W) x 4
  • 按键 x 3
  • 连接线

2.2 电路设计

主要元件为AT89C51单片机和电机驱动器。电机驱动器输入引脚IN1、IN2分别连接到P3.0和P3.1,用于控制电机方向。直流电机连接到L293D输出端,EN1引脚连接到5V以驱动电机。

开关通过下拉配置连接到单片机的P2.0和P2.1。第一个开关使电机顺时针旋转,第二个开关使电机逆时针旋转。电机驱动器的8、16脚连接到+5V电源。

2.3 算法

  1. 将P2.0和P2.1声明为输入,将P3.0和P3.1声明为输出。
  2. 检查第一个按钮是否按下,按下则向P3.0发送逻辑1。
  3. 检查第二个按钮是否按下,按下则向P3.1发送逻辑1,否则向端口3发送0。

2.4 代码

#include<reg51.h>
sbit switch1=P2^0;
sbit switch2=P2^1;
sbit clk=P3^0;
sbit anticlk=P3^1;

void main()
{
switch1=switch2=1; // P2.0和P2.1设为输入
switch1=switch2=0;
clk=anticlk=0;
while(1)
{
if((switch1))
clk=1;
else if((switch2))
anticlk=1;
else
P3=0x00;
}
}

3. 使用L298N与8051单片机直流电机接口电路图

alt text

3.1 所需元件

  • AT89C51(8051单片机)
  • 8051编程器
  • 编程电缆
  • 12V直流电池或适配器
  • L298N电机驱动模块
  • 12V直流电机
  • 电解电容 – 10μF
  • 陶瓷电容 – 33pF x 2
  • 电阻 10kΩ (1/4W)
  • 电阻 1kΩ (1/4W) x 3
  • 电阻包 1kΩ x 8
  • 按键 x 4
  • 连接线

3.2 电路设计

类似前述电路,L298N输入引脚IN1、IN2分别连接到单片机端口P0.0和P0.1,12V直流电机连接到输出端OUT1、OUT2。

通过三个按键控制电机旋转方向,按键连接到端口P0.5、P0.6、P0.7。

3.3 算法

  1. 将P0.5、P0.6设为输入,P0.0、P0.1设为输出。
  2. 检查第一个按键是否按下,按下则P0.0=1,P0.1=0,使电机正转。
  3. 检查第二个按键是否按下,按下则P0.1=1,P0.0=0,使电机反转。

3.4 代码

#include<reg51.h>

sbit mot1 = P0^0;
sbit mot2 = P0^1;
sbit forward = P0^5;
sbit backward = P0^6;
sbit stop = P0^7;

void main()
{
mot1=0;
mot2=0;
forward=1;
backward=1;
stop=1;
while(1)
{
if(forward==0)
{
mot1=1;
mot2=0;
while(forward==0);
}
else if(backward==0)
{
mot1=0;
mot2=1;
while(backward==0);
}
else if(stop==0)
{
mot1=0;
mot2=0;
while(stop==0);
}
}
while(1);
}

4. 操作步骤

  1. 将程序烧录到8051单片机。
  2. 按照电路图接线。
  3. 确保电池不要直接连接到控制器。
  4. 开启电源,电机处于静止状态。
  5. 按下第一个按钮,电机顺时针旋转。
  6. 按下第二个按钮,电机逆时针旋转。
  7. 关闭电源。
alt text

5. 应用

  • 在机器人中用于控制运动方向
  • 控制直流电机速度
  • 驱动高压电机的场合