直流电机驱动模块--第四组

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

直流电机驱动模块

一、摘要

本直流电机采用集成芯片L298和由分立元件构成的驱动电路模块来驱动,控制端连接51单片机,由51单片机控制输出PWM 脉冲控制L298和分立元件驱动电路模块的输出和PWM 脉冲输出的方向,从而控制直流电机的转速大小和正反转。本次测试采用51最小系统板、L298驱动电路和分立元件驱动电路模块,对单片机进行编程间接控制直流电机的启停、转速大小和正反转。

关键字:直流电机、L298N 、AT89C51、PWM

二、L298芯片介绍

L298是SGS 公司的产品,比较常见的是15脚Multiwatt 封装的L298N ,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。

图为L298驱动芯片

L298N 可接受标准TTL 逻辑电平信号V SS ,V SS 可接4.5~7 V 电压。4脚V S 接电源电压,V S 电压范围V IH 为+2.5~46 V 。输出电流可达2.5 A ,可驱动电

感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验模块中我们选用驱动两台电动机。5,7,10,12脚接输入

控制电平,由单片机控制,控制电机的启停、正反转和速度大小。E nA ,E nB 接控

制使能端,可控制电机的停转,本实验模块中让其接电源正极使L298处于导通状态。

L298内部原理图

三、硬件设计

IN1

IN2

ENA OUT1OUT2OUT3OUT4

IN3IN4ENB

6V 动力电源

+5V:芯片电压5V。

VCC:电机电压,最大可接50V。

GND:共地接法。

输出端:接电机。

EN1、EN2:高电平有效,EN1、EN2分别为IN1和IN2、IN3和IN4的使能端。

IN1~ IN4:输入端,输入端电平和输出端电平是对应的。

四、程序设计

#include

#define TH0_TL0 (65536-1000)//设定中断的间隔时长

unsigned char count0 = 50;//低电平的占空比

unsigned char count1 = 0;//高电平的占空比

bit Flag = 1;//电机正反转标志位,1正转,0反转

sbit Key_add=P2 ^ 0; //电机减速

sbit Key_dec=P2 ^ 1; //电机加速

sbit Key_turn=P2 ^ 2; //电机换向

sbit PWM1=P2^6;//PWM 通道1,反转脉冲

sbit PWM2=P2^7;//PWM 通道2,正转脉冲

unsigned char Time_delay;

/************函数声明**************/

void Delay(unsigned char x);

void Motor_speed_high(void);

void Motor_speed_low(void);

void Motor_turn(void);

void Timer0_init(void);

/****************延时处理**********************/

void Delay(unsigned char x)

{

Time_delay = x;

while(Time_delay != 0);//等待中断,可减少PWM输出时间间隔}

/*******按键处理加pwm占空比,电机加速**********/

void Motor_speed_high(void)//

{

if(Key_add==0)

{

Delay(10);

if(Key_add==0)

{

count0 += 5;

if(count0 >= 100)

{

count0 = 100;

}

}

while(!Key_add);//等待键松开

}

}

/******按键处理减pwm占空比,电机减速*****/

void Motor_speed_low(void)

{

if(Key_dec==0)

Delay(10);

if(Key_dec==0)

{

count0 -= 5;

if(count0 <= 0)

{

count0 = 0;

}

}

while(!Key_dec );

}

}

/************电机正反向控制**************/ void Motor_turn(void)

{

if(Key_turn == 0)

{

Delay(10);

if(Key_turn == 0)

{

Flag = ~Flag;

}

while(!Key_turn);

}

}

/***********定时器0初始化***********/ void Timer0_init(void)

{

TMOD=0x01; //定时器0工作于方式1

TH0=TH0_TL0/256;

TL0=TH0_TL0%256;

TR0=1;

ET0=1;

EA=1;

}

/*********主函数********************/

void main(void)

{

Timer0_init();

相关文档
最新文档