L298N电机驱动版主要由两个核心部件组成
-
L298N 驱动芯片
-
78M05 稳压器
模块参数:
模块端口示意图:
这个板载5V与稳压模块有关的复杂,与稳压模块有关
稳压模块能否生效完全取决于5V能跳帽是否启用(取下禁用,插入启用,默认为板载连接),这里有两种情况,连接和不连接:
当电源12V时,,并且5V引脚作为微控制器供电的,即:VCC作为7805的输入,5V它是7805的输出,可以为板载提供5v电压用于外部电路供电
当,,并且应通过5V端子单独为内部供电,。即:VCC不作为7805的输入, 5v由外部电路提供,此时需要两个电源,VCC和 5V
注意事项:
**7V<U<12V:**使用驱动电压时(上图为12V,)为7V-12V可使能板载(即图中板载5)V使能)的5V逻辑电源,当使用板载5V供电之后,,但可以直接5V电压供外部使用,一般直接引出开发板供电,如:Arduino,51单片机
ps:上次没有用四节干电池驱动,原来电压不够。
**12V<U<=24V:**芯片手册提出支持35v,但根据经验,298保守应用最大电压支持到244V它已经很棒了。如果要驱动额定电压为18V的电机,首先必须拔除板载5V输出使能跳帽,然后在5V输出端口外接入5V电压对L298N内部逻辑电路供电。
U<7V:12V端口输入电压用于内部电路,缺点是12V输入电压可能不足,电机转速不足
(这种情况是我自己假设的,U<7V,理论上,内部电路仍由稳压器供电,)
7V<U<12V:内部电路由稳压器供电,5V端口为输出,不能强制供电
12V<U<=24V:12V端口输入高压驱动电机,内部控制电路由外向5V额外输入端口,板载5V拉开跳线帽,VCC不作为7805的输入。
VCC 电压范围为5~35V之间 GND GND是连接到电源负极的接地引脚 5V 如果安装了5个驱动芯片内部逻辑电源引脚V跳帽,这个引脚可以输出5V如果拔下5个电压,为微控板或其他电路提供电源V跳帽需要独立外接5V电源
-
IN1 & IN2 电机驱动A的输入引脚控制电机A的旋转和旋转角度 IN1输入高电平HIGH,IN2输入低电平LOW,对应电机A正转 IN1输入低电平LOW,IN2输入高电平HIGH,对应电机A反转 IN1、IN同时输入高电平HIGH或低电平LOW,停止转动相应的电机A 调速就是改变IN1、IN2高电平占空比(需要拔掉)ENA处跳帽)
-
IN3 & IN4 电机驱动器B的输入引脚控制电机B的旋转和旋转角度 IN3输入高电平HIGH,IN4输入低电平LOW,对应电机B正转 IN3输入低电平LOW,IN4输入高电平HIGH,对应电机B反转 IN3、IN同时输入高电平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); /*******************?÷oˉêy**************************/ void main() {
while(1) {
/******************°′ò??¨???±è×a?ˉ************************/ //×a?ÖÜÆÚΪ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芯片说明,点击这里