L298N是一款双路直流电机驱动器模块,实现较高电压、较大电流的电机驱动要求。
L298N电机驱动模块有两个供电,一个是逻辑部分的5V供电,一个是电机的供电。当5V是能有效时(Jumper连接),逻辑部分的5V供电通过内置的78M05通过驱动电源部分(电机的供电)获取,同时也可以对外提供5V供电(+5V),但为了避免稳压芯片的损坏,当电机供电大于12V时,板上5V使能(Jumper)务必断开,使用外接5V供电。电机的供电电压范围较大,一般5V ~ 35V,要看具体模块的产品规格。
L298N电机驱动模块可以驱动两路直流电机,使能端ENA、ENB为高电平时有效,控制方式及之久电机状态表如下: 使能A(ENA)
ENA
IN1
IN2
Motor
0
x
x
停止
1
0
0
制动(brake)
1
0
1
正转
1
1
0
反转
1
1
1
制动
使能B(ENb)
ENb
IN3
IN4
Motor
0
x
x
停止
1
0
0
制动(brake)
1
0
1
正转
1
1
0
反转
1
1
1
制动
本文将介绍如何使用树莓派3B+来控制电机的正、反转,以及通过PWM来控制转速。本例使用两节18650作为电机的驱动电压,同时提供板上5V使能(jumper连接)。如下是树莓派和L298N的电路连接图,通过ENA控制一路电机转动,ENA连接树莓派的GPIO25(物理针脚22),IN1和IN2分别连接树莓派GPIO23和GPIO24(物理针脚16和18):
以下是python代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 import RPi.GPIO as GPIO from time import sleep in1 = 23 in2 = 24 ena = 25 temp1=1 GPIO.setmode(GPIO.BCM) GPIO.setup(in1,GPIO.OUT) GPIO.setup(in2,GPIO.OUT) GPIO.setup(ena,GPIO.OUT) GPIO.output(in1,GPIO.LOW) GPIO.output(in2,GPIO.LOW) p=GPIO.PWM(ena,1000) p.start(25) print("\n") print("The default speed & direction of motor is LOW & Forward.....") print("r-run s-stop f-forward b-backward l-low m-medium h-high e-exit") print("\n") while(1): x=input() if x=='r': print("run") if(temp1==1): GPIO.output(in1,GPIO.HIGH) GPIO.output(in2,GPIO.LOW) print("forward") x='z' else: GPIO.output(in1,GPIO.LOW) GPIO.output(in2,GPIO.HIGH) print("backward") x='z' elif x=='s': print("stop") GPIO.output(in1,GPIO.LOW) GPIO.output(in2,GPIO.LOW) x='z' elif x=='f': print("forward") GPIO.output(in1,GPIO.HIGH) GPIO.output(in2,GPIO.LOW) temp1=1 x='z' elif x=='b': print("backward") GPIO.output(in1,GPIO.LOW) GPIO.output(in2,GPIO.HIGH) temp1=0 x='z' elif x=='l': print("low") p.ChangeDutyCycle(15) x='z' elif x=='m': print("medium") p.ChangeDutyCycle(50) x='z' elif x=='h': print("high") p.ChangeDutyCycle(75) x='z' elif x=='e': GPIO.cleanup() break else: print("<<< wrong data >>>") print("please enter the defined data to continue.....")
r: 电机开始运行
s: 电机停止运行
f: 向前
b:向后
l: 低速
m: 中速
h: 高速
e: 退出
参考: