视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
L298控制直流电机
2025-09-27 23:35:25 责编:小OO
文档
/* =======直流电机的PWM速度控制程序======== */ 

/* 晶振采用11.0592M,产生的PWM的频率约为91Hz */ 

#include

#include

#define uchar unsigned char 

#define uint unsigned int 

sbit en1=P1^0; /* L298的Enable A */ 

sbit en2=P1^1; /* L298的Enable B */ 

sbit s1=P1^2; /* L298的Input 1 */ 

sbit s2=P1^3; /* L298的Input 2 */ 

sbit s3=P1^4; /* L298的Input 3 */ 

sbit s4=P1^5; /* L298的Input 4 */ 

uchar t=0; /* 中断计数器 */ 

uchar m1=0; /* 电机1速度值 */ 

uchar m2=0; /* 电机2速度值 */ 

uchar tmp1,tmp2; /* 电机当前速度值 */ 

/* 电机控制函数 index-电机号(1,2); speed-电机速度(-100—100) */ 

void motor(uchar index, char speed) 

if(speed>=-100 && speed<=100)

if(index==1) /* 电机1的处理 */ 

m1=abs(speed); /* 取速度的绝对值 */ 

if(speed<0) /* 速度值为负则反转 */ 

s1=0; 

s2=1; 

else /* 不为负数则正转 */ 

s1=1; 

s2=0; 

if(index==2) /* 电机2的处理 */ 

m2=abs(speed); /* 电机2的速度控制 */ 

if(speed<0) /* 电机2的方向控制 */ 

s3=0; 

s4=1; 

else 

s3=1; 

s4=0; 

void delay(uint j) /* 简易延时函数 */ 

for(j;j>0;j--);

void main() 

uchar i; 

TMOD=0x02; /* 设定T0的工作模式为2 */ 

TH0=0x9B; /* 装入定时器的初值 */ 

TL0=0x9B; 

EA=1; /* 开中断 */ 

ET0=1; /* 定时器0允许中断 */ 

TR0=1; /* 启动定时器0 */ 

while(1) /* 电机实际控制演示 */ 

for(i=0;i<=100;i++) /* 正转加速 */ 

motor(1,i); 

motor(2,i); 

delay(5000); 

for(i=100;i>0;i--) /* 正转减速 */ 

motor(1,i); 

motor(2,i); 

delay(5000); 

for(i=0;i<=100;i++) /* 反转加速 */ 

motor(1,-i); 

motor(2,-i); 

delay(5000); 

for(i=100;i>0;i--) /* 反转减速 */ 

motor(1,-i); 

motor(2,-i); 

delay(5000); 

void timer0() interrupt 1 /* T0中断服务程序 */ 

if(t==0) /* 1个PWM周期完成后才会接受新数值 */ 

tmp1=m1; 

tmp2=m2; 

if(tif(tt++; 

if(t>=100) t=0; /* 1个PWM信号由100次中断产生 */ 

}

L298可驱动2个电机,OUTl、OUT2和OUT3、OUT4之间分别接2个电动机。5、7、10、12脚接输入控制电平,控制电机的正反转,ENA,ENB接控制使能端,控制电机的停转。1298的逻辑功能如表1所列。 

如图1所示,:Intel8253输出二组PWM波,每一组PWM波用来控制一个电机的速度.另外二个I/O口可以控制电机的正反转.控制方法与控制电路都比较简单。即P10、P11控制第一个电机的方向,输入的:PWMl控制第一个电机的速度;P12、P13控制第二个电机的方向,输入的PWM2控制第二个电机的速度。

由于电机在正常工作时对电源的干扰很大,只用一组电源时会影响单片机的正常工作。所以选用双电源供电。一组5V电源给单片机和控制电路供电,另外一组5V、9V电源给L298N的 VSS、 VS供电。在控制部分和电机驱动部分之间用光耦隔开,以免影响控制部分电源的品质。

图1就是一个实现智能小汽车的应用电路。D1、Q1是一对红外发射接收对管,与LM324构成光电传感检测电路。通过Intel8253和1298N可实现汽车的加速、减速、刹停,并可通过两个电机的不同转速实现左转和右转等功能。 

L298内部是一个三极管的H桥

VSS是逻辑电平参考电压输入,一般是5V或3.3V逻辑

VS是电机供电你是5V的电机就接5V的电压即可  

L298N芯片介绍

  L298N可接受标准TTL逻辑电平信号VSS,VSS可接4.5~7 V电压。4脚VS接电源电压,VS电压范围VIH为+2.5~46 V。输出电流可达2.5 A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动一台电动机。5,7,10,12脚接输入控制电平,控制电机的正反转。EnA,EnB接控制使能端,控制电机的停转。表1是L298N功能逻辑图。

  In3,In4的逻辑图与表1相同。由表1可知EnA为低电平时,输入电平对电机控制起作用,当EnA为高电平,输入电平为一高一低,电机正或反转。同为低电平电机停止,同为高电平电机刹停。

如果单片机还有其他大量的工作要做,请选择有PWM功能的,可以实现精确调速; 

如果要求不高,可以由软件模拟PWM输出调制: 

//P0.0,P0.1为电机驱动口 P0.3口为ENA口 

void pwm(uchar speed,uint gotime) 

uchar j; 

for (gotime;gotime>0;gotime--)

for (j=1;j<=100;j++)

if(j<=speed)

P0|=0x03; 

delay(5); //需要根据实际调节 

else 

P&=0xfc; 

delay(5); //需要根据实际调节 

void delay(uint time) 

do 

time--; 

while (time>1);

void main() 

while(1) 

P0|=0X08; 

pwm(30,1000); 

P0&=0Xfb; 

delay(10000); 

P0|=0X08; 

pwm(50,1000); 

P0&=0Xfb; 

delay(10000); 

P0|=0X08; 

pwm(80,1000); 

P0&=0Xfb; 

delay(10000); 

}下载本文

显示全文
专题