您现在的位置是:
网站首页
> 程序设计 
> 树莓派 
树莓派驱动直流电机,可变速
简介使用树莓派+L298N驱动电机B 站链接 https://www.bilibili.com/video/BV1mV411J7po/
一、L298N
二、接线
注意:需要把树莓派的 GND 与 L298N 的 GND 连在一起,共地后 L298N 才能识别树莓派发送的 IN1、IN2 到底是高电平还是低电平,相当于就是对其低电位。
关于ENA和ENB键帽,拆下后ENA和ENB分别有两根线,与IN1-4平行的是ENA和ENB使能端,剩下的是5V电源针脚。由于必须在ENA或ENB处于高电平时,才能使相应的电机运转,所以通过键帽把它们默认接到5V电源上,使之默认为高电平。
故若只需控制电机的正反转,可以不用管键帽,只关心IN1-4即可。若要对电机进行调速,则需拆下键帽,对ENA和ENB使能端输入PWM脉冲,而剩下的5V电源针脚空闲即可。
不知道你买的是什么型号的L298N。有些型号标记了EA、EB和5V,就算没标记也没关系,自己实际试一下就知道了。
三、驱动代码
class MyGPIO():
init_count = 0
mode = GPIO.BCM
def __init__(self, idx, init_with_high):
if MyGPIO.init_count == 0:
GPIO.setmode(MyGPIO.mode)
MyGPIO.init_count += 1
self.idx = idx
initial = GPIO.HIGH if init_with_high else GPIO.LOW
GPIO.setup(self.idx, GPIO.OUT, initial=initial)
def __del__(self):
MyGPIO.init_count -= 1
if MyGPIO.init_count == 0:
GPIO.cleanup()
def high(self):
GPIO.output(self.idx, GPIO.HIGH)
def low(self):
GPIO.output(self.idx, GPIO.LOW)
class MyPWM(MyGPIO):
def __init__(self, idx, frequency):
super(MyPWM, self).__init__(idx, init_with_high=False)
self.pwma = GPIO.PWM(idx, frequency)
self.pwma.start()
def chanage(self, frequency):
self.pwma.ChangeFrequency(frequency)
class Wheel():
def __init__(self, p_idx, n_idx, enable_idx):
self.p = MyGPIO(p_idx, init_with_high=True)
self.n = MyGPIO(n_idx, init_with_high=True)
self.ctrl = MyPWM(enable_idx, frequency=100)
def forward(self):
self.p.high()
self.n.low()
self.self.ctrl(50)