我最近采用树莓派4B开发,连接L298N对电机进行驱动,开始,我认为L298N上的三个跳帽都是没用的然后我直接拔了,然后我正常接线,IN1-4接4个通用的GPIO引脚,然后输出AB口接两个电机的(后来我尝试了,只要电压正常,是可以驱动四个电机的),12V电压接电源,GND接电源地线,然后5V接树莓派4B上的5V引脚,最后两个使能端给高电平。
测试用例:
import RPi.GPIO as GPIO
import time
#设置GPIO模式
GPIO.setmode(GPIO.BOARD)
#设置接口
IN1 = 11
IN2 = 12
IN3 = 13
IN4 = 15
#初始化接口
def init():
GPIO.setup(IN1,GPIO.OUT)
GPIO.setup(IN2,GPIO.OUT)
GPIO.setup(IN3,GPIO.OUT)
GPIO.setup(IN4,GPIO.OUT)
#前进
def forward(sleep_time):
GPIO.output(IN1,GPIO.LOW)
GPIO.output(IN2,GPIO.HIGH)
GPIO.output(IN3,GPIO.HIGH)
GPIO.output(IN4,GPIO.LOW)
time.sleep(sleep_time)
GPIO.cleanup()
#后退
def backward(sleep_time):
GPIO.output(IN1,GPIO.HIGH)
GPIO.output(IN2,GPIO.LOW)
GPIO.output(IN3,GPIO.LOW)
GPIO.output(IN4,GPIO.HIGH)
time.sleep(sleep_time)
GPIO.cleanup()
#左转
def turnleft(sleep_time):
GPIO.output(IN1,GPIO.LOW)
GPIO.output(IN2,GPIO.LOW)
GPIO.output(IN3,GPIO.HIGH)
GPIO.output(IN4,GPIO.LOW)
time.sleep(sleep_time)
GPIO.cleanup()
#右转
def turnright(sleep_time):
GPIO.output(IN1,GPIO.LOW)
GPIO.output(IN2,GPIO.HIGH)
GPIO.output(IN3,GPIO.LOW)
GPIO.output(IN4,GPIO.LOW)
time.sleep(sleep_time)
GPIO.cleanup()
init()
turnright(1)
就上面的过程而言,我开始是怎么想都没问题,但是我犯了以下错误:
第一,跳帽的去除,经过我查看大量的资料可知,使能a和使能b上的两个跳帽不去除时便相当于置于1使能状态,此时最好。由于我去除了这两个跳帽,导致我运行后的结果和真值表不同。
第二,树莓派的地线和L298N的GND要接,相对电压。没接的的结果就是,我直接将树莓派的5V电压接到L298N后只有一个轮子被驱动,但事实上如果此时电源给的电压足够,完全不需要接5V电压就可以驱动连个轮子。
总结一下,对于新学者而言,跳帽都可以不拔,记得相对电压的问题。
参考:
https://www.cnblogs.com/FBsharl/p/17215473.html
https://my.oschina.net/u/2340880/blog/5123429
https://blog.csdn.net/m0_47278454/article/details/117792924
https://blog.csdn.net/kallyshall/article/details/49982091
https://blog.csdn.net/weixin_41195886/article/details/128408743