您现在的位置是: 网站首页 > 程序设计  > 树莓派 

树莓派驱动直流电机,可变速

2021年6月1日 23:25 2193人围观

简介使用树莓派+L298N驱动电机B 站链接 https://www.bilibili.com/video/BV1mV411J7po/

一、L298N

二、接线

image-20210501183110842

注意:需要把树莓派的 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)