L298N电机驱动版主要由两个核心组件构成
-
L298N 驱动芯片
-
78M05 稳压器
模块参数:
模块端口示意图:
其中这个板载5V使能的这个跳线帽比较的复杂,其与稳压模块有关
稳压模块能否生效完全取决于5V使能跳帽是否启用(拔掉禁用、插入启用,默认是板载连通的),这里分两种情况,接通和未接通:
板载跳帽:
当电源小于或等于12V时,内部电路由稳压器供电,并且5V引脚作为微控制器供电的输出引脚,即:VCC作为7805的输入,5V是7805的输出,从而可以为板载提供5v电压,为外部电路供电使用
拔掉跳帽:
当电源大于12V时,拔掉跳帽,并且应通过5V端子单独为内部供电,此时5V端为输入。即:VCC不作为7805的输入,而+5v由外部电路提供,此时就需要两个供电电源,VCC和+5V
注意事项:
**7V<U<12V:**当使用驱动电压(上图标识为12V,实际可以接受的输入范围是 7-12V)为7V-12V的时候,可以使能板载(就是图中板载5V使能)的5V逻辑供电,当使用板载5V供电之后,接口中的+5V供电不要输入电压,如果强行供电,有可能会烧坏右侧电容,但可以直接5V电压供外部使用,一般引出来直接给开发板供电,比如:Arduino,51单片机
ps:上次我用4节干电池没有驱动起来,原来是电压不够。
**12V<U<=24V:**芯片手册中提出可以支持到35v,但是按照经验一般298保守应用最大电压支持到24V已经很牛了,如果要驱动额定电压为18V的电机,首先必须拔除板载5V输出使能的跳帽,然后在5V输出端口外部接入5V电压对L298N内部逻辑电路供电。
对U的范围进行总结:
U<7V:12V端口输入电压供内部电路使用,缺点是12V输入的电压可能不足导致,电机转速不够
(这一种情况是我自己假设的,U<7V,理论上内部电路依旧是由稳压器供电,)
7V<U<12V:内部电路将由稳压器供电,5V端口为输出,不能强行供电
12V<U<=24V:12V端口输入高电压驱动电机,内部控制电路由外面从5V端口额外输入,板载5V使能跳线帽拔开,VCC不作为7805的输入。
电源引脚
VCC 外接直流电源引脚,电压范围在5~35V之间
GND GND是接地引脚,连接到电源负极
5V 驱动芯片内部逻辑供电引脚,如果安装了5V跳帽,则此引脚可输出5V电压,为微控板或其他电路提供电力供给,如果拔掉5V跳帽,则需要独立外接5V电源
控制引脚
-
IN1 & IN2 电机驱动器A的输入引脚,控制电机A转动及旋转角度
IN1输入高电平HIGH,IN2输入低电平LOW,对应电机A正转
IN1输入低电平LOW,IN2输入高电平HIGH,对应电机A反转
IN1、IN2同时输入高电平HIGH或低电平LOW,对应电机A停止转动
调速就是改变IN1、IN2高电平的占空比(需拔掉ENA处跳帽) -
IN3 & IN4 电机驱动器B的输入引脚,控制电机B转动及旋转角度
IN3输入高电平HIGH,IN4输入低电平LOW,对应电机B正转
IN3输入低电平LOW,IN4输入高电平HIGH,对应电机B反转
IN3、IN4同时输入高电平HIGH或低电平LOW,对应电机B停止转动
调速就是改变IN3、IN4高电平的占空比(需拔掉ENB处跳帽)
输出引脚
- OUT1 & OUT2 电机驱动器A的输出引脚,接直流电机A或步进电机的A+和A-
- OUT3 & OUT3 电机驱动器B的输出引脚,接直流电机B或步进电机的B+和B-
调速控制引脚
- ENA 电机A调速开关引脚,拔掉跳帽,使用PWM对电机A调速,插上电机A高速运行(占空比100%)
- ENB 电机B调速开关引脚,拔掉跳帽,使用PWM对电机B调速,插上电机B高速运行(占空比100%)
关于电机调速这块
采用PWM调速,其原理是就是开关管在一个周期内电的导通时间为t,周期T内,则电机两端的平均电压U=Vcc*(t/T)=a Vcc。其中a=t/T,也称占空比,Vcc是电源电压,电机的转速与电机两端的电压成正比,而电机两端的电压与控制波形的占空比成正比,因此电机的速度与占空比成比例,占空比越大,电机转速越快,详细可看文末:电机驱动原理调速PWM。
官方示例源码:
#include<reg52.h>
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit ENA=P1^2;
void delay(unsigned int z);
void delay_us(unsigned int aa);
/*******************Ö÷º¯Êý**************************/
void main()
{
while(1)
{
/******************°´Ò»¶¨Õ¼¿Õ±Èת¶¯************************/
//ת¶¯ÖÜÆÚΪ20
unsigned int i,cycle=0,T=2048;
IN1=1; //Õýת
IN2=0;
for(i=0;i<200;i++)
{
delay(10);//PWMÕ¼¿Õ±ÈΪ50%£¬ÐÞ¸ÄÑÓʱµ÷ÕûPWMÂö³å
ENA=~ENA;
}
//ת¶¯ÖÜÆÚΪ40
IN1=0; //·´×ª
IN2=1;
for(i=0;i<100;i++)
{
delay(20);//PWMÕ¼¿Õ±ÈΪ50%£¬ÐÞ¸ÄÑÓʱµ÷ÕûPWMÂö³å
ENA=~ENA;
}
/******************×Ô¶¯¼ÓËÙÕýת************************/
//ÿ¸öPWMÖÜÆÚΪ2048us
IN1=1;
IN2=0;
while(cycle!=T)
{ ENA=1;
delay_us(cycle++);
ENA=0;
delay_us(T-cycle);
}
IN1=0; //×Ô¶¯¼õËÙ·´×ª
IN2=1;
while(cycle!=T)
{ ENA=1;
delay_us(cycle++);
ENA=0;
delay_us(T-cycle);
}
}
}
/******************zÃëÑÓʱº¯Êý*************************/
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/****************΢ÃîÑÓʱ******************************/
void delay_us(unsigned int aa)
{
while(aa--);
}
参考博文:
想看更加详细L298N芯片说明,点击这里