树莓派 3 + L298N模块 驱动直流电机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树莓派 3 + L298N模块 驱动直流电机相关的知识,希望对你有一定的参考价值。

参考技术A 单片机或树莓派一般使用 L298n 模块来驱动电机 。L298N的实物图如下。

12V power:L298n 的电源正极,尽管标的 12V,但你可以使用 7V ~ 35V 的电源。

GND:  L298n 的电源地,树莓派的 GND 引脚也要接到这里,即 L298N 和 树莓派需要共地。

5V power:  L298n 输出的 5v 电源,是用来给单片机或树莓派供电的。如果你的树莓派是单独供电,那么这个引脚悬空。

Output 的两个引脚接直流电机的两脚,而板上有 Output A 和 Output B,分别驱动电机 A 和电机 B。

A Enable :  电机 A 使能,接 GPIO 口 。可以用PWM 来调速。

Logic Input :  接 4 个 GPIO 口。 上面两个脚 Input1 、Input2 (靠近 A Enable )控制电机 A ; 下面两个脚 Input3、Input4 (靠近 B Enable)控制电机 B。

B Enable : 电机 B 使能,接 GPIO 口。 可以用 PWM 来调速。

总结一下就是 A Enable 、Input1、Input2 控制电机 A 的运行,B Enable、Input3、Input4 控制电机 B 的运行。

如何控制的呢? 下面是对电机 A 进行控制的真值表,电机 B 同理。

驱动一下试试吧!

下面是控制电机 A 的电路图:

把 L289N 的直流电源接好,然后把树莓派的 GND 与 L298N 的 GND 连在一起,因为共地后 L298N 才能识别树莓派发送的 IN1、IN2 到底是高电平还是低电平。   

树莓派的 2、3、4 脚分别连到 A Enable、IN1 、IN2 。(把 Enable 上的短接帽拿掉)

由控制表可知给 2 脚高电平,3 脚高电平,4 脚低电平,电机就会正转。

编写程序:

前面提到过 A Enable 和 B Enable 可以用 pwm 控制来调速,下面是相应程序。

接线不变!这个程序可以让电机 A 以不同的速度正转。

在树莓派中运行程序后,可以看到电机的转速会随着占空比的改变而变化。

程序源码在:  github

树莓派驱动步进电机

步进电机一般由电机、驱动器构成,树莓派连接驱动器控制电机。

一、接线

DIR+/- 用于控制方向,PUL+/- 用于控制转动;

正极 DIR+ 和 PUL+ 接到GPIO口,两个负极接到GPIO口或地线均可,控制的时候不使用。

实验中,DIR+ 接35口,PUL+ 接38口。

树莓派4B GPIO口如图所示

远离树莓派USB的一侧 是 1、2、3号口

二、驱动

DIR控制方向,使用高电平或低电平控制;

PUL控制转动,使用脉冲驱动。

三、代码

import RPi.GPIO as GPIO
import time
 
TERMINAL1 = 38 # PUL +
TERMINAL2 = 35 # DIR +
 
def setup():
    # 初始化
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(TERMINAL1, 0)
    GPIO.setup(TERMINAL2, 0)

def start(pulse_terminal):
    # 开启脉冲
    pulse_terminal.start(0)
    pulse_terminal.ChangeDutyCycle(50) # 设置脉冲带宽 0~100

def stop(pulse_terminal):
    # 停止脉冲
    pulse_terminal.stop()

def set_direction(direction=1):
    GPIO.output(TERMINAL2, direction) # 设置高低电平
 
if __name__ == '__main__':     # Program start from here
    setup()

    pulse_terminal = GPIO.PWM(TERMINAL1, 1000) # 脉冲带宽调制

    set_direction(1)
    start(pulse_terminal)
    time.sleep(3)
    stop(pulse_terminal)
    time.sleep(3)
    set_direction(0)
    start(pulse_terminal)
    time.sleep(3)

    GPIO.cleanup()

以上是关于树莓派 3 + L298N模块 驱动直流电机的主要内容,如果未能解决你的问题,请参考以下文章

Arduino L298N模块驱动有刷直流电机或 步进电机

树莓派——步进电机+驱动器 篇

stm32+TB6612驱动直流电机

直流电机+L298N电机驱动模块

L298N 驱动电机的线路连接图

树莓派小车树莓派小车和红外线模块连接(多图)