最近在用树莓派做点东西,用到了L298N模块,有一些坑记录下来
我用的差不多长这个样子
先简要介绍一下L298N模块
L298N模块是一个电机驱动模块,干啥用的呢,就是我们如果要让电机转动,我们知道,需要给电机加上合适的电压就可以了,但是如果我们驱动多个电机,或者要使用单片机或者树莓派等用程序去控制电机的话,不可能是我们用插拔电源来实现,我们理所应当的选择“开关”来实现,然后利用真值表约定高低电平,来告诉开关啥时候打开,啥时候关闭。用来做这件事情的中间件我们叫电机驱动模块,L298N是常用的一款
L2898N有4个用来接收高低电平的输入端,如下图
电源输入端
当然,光有信号的接收端可是不能正常工作的,L298N用两个电源输入端,如下图,理论上输入的是7-12v,我测试过,低于大于6v而小于7v,供应一路输入是没问题的,只是电机转的有点费劲。如果电压高于12v,这个按照淘宝店的说法是要接一个外界分压电路,我没试过。输入输出端的旁边那个是一个5v的输出端,使用这个输出端的时候需要将该接口上方那个跳线帽拔下来
然后是输出
我们有四个输入端分别是 in1,in2,in3,in4对应左右两个输出端,out1,out2,out3,out4,他们两两在一起。然后真值表就很简单了
一高一低,这样存在电势差,就会正常工作
转速
L298N的功能不只是控制啥时候启动,还可以控制转速,通过pwm的方法
这是干啥的,具体原理我也不太清楚。简单知道一点怎么用,我们知道数电上学那个叫方波的周期函数了,pwm就是通过改变一个周期里面高电平的占空比,就是高电平占整个周期的时间,来实现具体的转速的改变,内部的实现细节我就不清楚了。如何使用这个pwm功能。只要把in端旁边的跳线帽去掉然后接到控制端就行了。我们控制2个输出,所以有两个pwm的控制端,在输入的左右两侧
然后是树莓派实现的一些代码
import RPi.GPIO as GPIO
import time
#设置gpio端口编码方式
GPIO.setmode(GPIO.BOARD)
#设置不显示警告
GPIO.setwarnings(False)
#gpio端口定义,方便以后改接线方式
#pwm控制端定义
int1=11
int2=12
int3=13
#初始化函数
GPIO.setup(int2,GPIO.OUT)
GPIO.setup(int3,GPIO.OUT)
GPIO.setup(int1,GPIO.OUT)
#普通输出方式,此时pwm口应该接跳线帽,不然不工作
GPIO.output(int2,GPIO.HIGH)
GPIO.output(int3,GPIO.LOW)
time.sleep(10)
#定义pwm输出model,第一个参数是gpio口,第二个是频率
pwm=GPIO.PWM(int1,80)
pwm.start(90)
while True:#改变占空比输出,此时为90pwm.ChangeDutyCycle(90)time.sleep(10)#此时为30pwm.ChangeDutyCycle(30)time.sleep(10)
#此函数用来释放端口资源,不然电机会一直转下去
#GPIO.cleanup()
下面是一些坑
1)树莓派需要和L298N共地,这也好理解,就是你不共地的话,谁知道那个电平是低电平那个电平是高电平啊,共地的方式很简单,就是树莓派的gpio的gnd和电源负极接在一起就好了
2)使用pwm的话拔下来跳线帽,如果不用,一定要把跳线帽接回去,不然无法正常工作
3)出现问题怎么办,我的办法是用万能表,先测树莓派的gpio的输出,再测电机,这样很快就能确定问题出在哪了