构建Raspberry Pi电机驱动器HAT的教程分享

构建Raspberry Pi电机驱动器HAT的教程分享,第1张

  Raspberry Pi HAT 是 Raspberry Pi 的附加板,尺寸与 Pi 相同。它可以直接安装在 Raspberry Pi 的顶部,不需要任何进一步的连接。市场上有许多 Raspberry Pi HAT。在本教程中,我们将构建一个Raspberry Pi 电机驱动器 HAT来驱动直流和步进电机。此电机驱动器 HAT 包含一个 L293D 电机驱动器 IC、16*2 LCD 显示模块、四个按钮和用于 SIM800 模块的额外引脚和一个 3.3V 稳压器。这个 Raspberry Pi HAT 将在构建机器人项目时派上用场。

  Raspberry Pi 电机驱动器 HAT 所需的组件

  树莓派

  L293D集成电路

  4 个按钮

  贴片电阻(1×10K、12×1K)

  1×10K电位器

  4× SMD LED

  LM317 稳压器

  2×螺丝端子

  16*2液晶模组

  L293D电机驱动IC

  L293D 是一种流行的 16 引脚电机驱动器 IC。顾名思义,它用于控制单极、双极步进电机、直流电机,甚至伺服电机。单个 L293D IC 可以同时驱动两个直流电机。此外,这两个电机的速度和方向可以独立控制。该 IC 带有两个电源输入引脚,即“Vcc1”和“Vcc2”。Vcc1 用于为内部逻辑电路供电,应为 5V,Vcc2 引脚用于为电机供电,可为 4.5V 至 36V。

构建Raspberry Pi电机驱动器HAT的教程分享,poYBAGLs0j-AfeX7AADQHauogZc192.png,第2张

  L293D 规格:

  电机电压 Vcc2 (Vs):4.5V 至 36V

  最大峰值电机电流:1.2A

  最大持续电机电流:600mA

  Vcc1(VSS) 的电源电压:4.5V 至 7V

  转换时间:300ns(在 5V 和 24V 时)

  自动热关断可用

  Raspberry Pi 电机驱动器 HAT 的电路图

  下图显示了带有 Raspberry Pi 的 L293D 电机驱动器的完整原理图。原理图是使用 EasyEDA 绘制的。

构建Raspberry Pi电机驱动器HAT的教程分享,poYBAGLs0jmAbVeLAAIF9kVQPSE370.png,第3张

  该 HAT 由 L293D 电机驱动 IC、16*2 LCD 显示模块和四个按钮组成。我们还为带有 3.3V 稳压器的 SIM800 模块提供了引脚,该稳压器使用 LM317 可变稳压器设计用于未来的项目。Raspberry Pi 电机驱动器 HAT 将直接安装在 Raspberry Pi 顶部,从而更容易使用 Raspberry Pi 控制机器人。

  为 Raspberry Pi 电机驱动器 HAT 制造 PCB

  原理图完成后,我们可以继续布置 PCB。您可以使用您选择的任何 PCB 软件来设计 PCB。我们已经使用 EasyEDA 为这个项目制造 PCB。您可以通过从“层”窗口中选择层来查看 PCB 的任何层(Top、Bottom、Topsilk、bottomsilk 等)。除此之外,还提供了 PCB 的 3D 模型视图,了解它在制造后的外观。下面是 Pi Motor Driver HAT PCB 顶层和底层的 3D 模型视图。

构建Raspberry Pi电机驱动器HAT的教程分享,poYBAGLs0jaAb9COAAb5CQQ_qY4792.png,第4张

  组装Raspberry Pi 电机驱动器 HAT PCB

  几天后,我们收到了整齐包装的 PCB,PCB 质量一如既往地好。板子的顶层和底层如下图所示:

构建Raspberry Pi电机驱动器HAT的教程分享,poYBAGLs0jKAccLSAAW3YU-NlCI636.png,第5张

  在确保轨道和脚印是正确的之后。我继续组装PCB。此处的图像显示了完全焊接电路板的外观。

构建Raspberry Pi电机驱动器HAT的教程分享,poYBAGLs0i-AeCRhAAZoN9tytOs135.png,第6张

树莓派设置

在对 Raspberry Pi 进行编程之前,我们必须安装所需的库。为此,首先,使用以下命令更新 Raspberry Pi OS:

 

sudo apt-get 更新
sudo apt-get 升级

 

现在为 LCD 模块安装Adafruit_CharLCD 库。该库适用于 Adafruit LCD 板,但也适用于其他品牌的 LCD 板。

 

sudo pip3 安装 Adafruit-CharLCD

 

树莓派电机驱动代码说明

在这个项目中,我们正在对 Raspberry Pi 进行编程,以在两秒的时间间隔内同时驱动正向、反向、向左和向右方向的两个直流电机。电机的方向将显示在 LCD 上。完整的代码在文档末尾给出。在这里,我们将解释代码的一些重要部分。

像往常一样,通过导入所有必需的库来启动代码。RPi.GPIO 模块用于使用 Python 访问 GPIO 引脚。模块时间用于将程序暂停一段预定义的时间。

 

导入 RPi.GPIO 作为 GPIO
进口时间
进口板
导入 Adafruit_CharLCD 作为 LCD

 

之后,为 L293D 电机驱动器 IC 和 LCD 显示器分配 GPIO 引脚。

 

液晶显示器 = 0
液晶显示器 = 5
lcd_d4 = 6
电机 1A = 4
电机 1B = 17
电机 1E = 12

 

现在,将 6 个电机引脚设置为输出引脚。接下来的四个是输出引脚,其中前两个用于控制右侧电机,接下来的两个用于控制左侧电机。接下来的两个引脚是左右电机的启用引脚。

 

GPIO.setup(Motor1A,GPIO.OUT)
GPIO.setup(Motor1B,GPIO.OUT)
GPIO.setup(Motor1E,GPIO.OUT)
GPIO.setup(Motor2A,GPIO.OUT)
GPIO.setup(Motor2B,GPIO.OUT)
GPIO.setup(Motor2E,GPIO.OUT)

 

在 while 循环内,以两秒的间隔同时向前、向后、向左和向右移动两个直流电机。

 

GPIO.输出(电机 1A,0)
                GPIO.输出(电机 1B,0)
                GPIO.输出(电机 2A,1)
                GPIO.输出(Motor2B,0)
                lcd.message ('左')
                打印(“左”)
                睡觉(2)
       #向前
                GPIO.输出(电机 1A,1)
                GPIO.输出(电机 1B,0)
                GPIO.输出(电机 2A,1)
                GPIO.输出(Motor2B,0)
                lcd.message ('转发')
                打印(“转发”)
…………………………………………

 

  测试 Raspberry Pi 电机驱动器 HAT

  完成 PCB 组装后,将电机驱动器 HAT 安装在 Raspberry Pi 上,然后启动代码。如果一切正常,连接到 Raspberry Pi 的直流电机将每两秒同时向左、前、右和反向移动,电机方向将显示在 LCD 显示屏上。

构建Raspberry Pi电机驱动器HAT的教程分享,pYYBAGLs0imAPr6xAAbNQHBfaV0681.png,第7张

导入 RPi.GPIO 作为 GPIO
从时间导入睡眠
进口板
导入 Adafruit_CharLCD 作为 LCD
# 树莓派引脚设置
液晶显示器 = 0
液晶显示器 = 5
lcd_d4 = 6
lcd_d5 = 19
lcd_d6 = 26
液晶显示器 = 21
液晶背光 = 2
#定义 16x2 LCD 的 LCD 列和行大小。
lcd_columns = 16
lcd_rows = 2
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight)
# 电机驱动器输入引脚
电机 1A = 4
电机 1B = 17
电机 1E = 12
电机 2A = 27
电机 2B = 22
电机 2E = 13
GPIO.setwarnings(假)
GPIO.setmode(GPIO.BCM)
GPIO.setup(Motor1A,GPIO.OUT)
GPIO.setup(Motor1B,GPIO.OUT)
GPIO.setup(Motor1E,GPIO.OUT)
GPIO.setup(Motor2A,GPIO.OUT)
GPIO.setup(Motor2B,GPIO.OUT)
GPIO.setup(Motor2E,GPIO.OUT)
GPIO.setup(14, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.输出(电机 1E,1)
GPIO.输出(Motor2E,1)
而真:
input_state = GPIO.input(14)
打印(输入状态)
如果 input_state == False:
#剩下
GPIO.输出(电机 1A,0)
GPIO.输出(电机 1B,0)
GPIO.输出(电机 2A,1)
GPIO.输出(Motor2B,0)
lcd.clear()
lcd.set_cursor(6,0)
lcd.message ('左')
打印(“左”)
睡觉(2)
#向前
GPIO.输出(电机 1A,1)
GPIO.输出(电机 1B,0)
GPIO.输出(电机 2A,1)
GPIO.输出(Motor2B,0)
lcd.clear()
lcd.set_cursor(4,0)
lcd.message ('转发')
打印(“转发”)
睡觉(2)
#正确的
GPIO.输出(电机 1A,1)
GPIO.输出(电机 1B,0)
GPIO.输出(Motor2A,0)
GPIO.输出(Motor2B,0)
lcd.clear()
lcd.set_cursor(5,0)
lcd.message ('对')
打印(“右”)
睡觉(2)
#撤销
GPIO.输出(电机 1A,0)
GPIO.输出(电机 1B,1)
GPIO.输出(Motor2A,0)
GPIO.输出(Motor2B,1)
lcd.clear()
lcd.set_cursor(4,0)
lcd.message ('反向')
打印(“反向”)
睡觉 (2)
#停止
GPIO.输出(电机 1A,0)
GPIO.输出(电机 1B,0)
GPIO.输出(Motor2A,0)
GPIO.输出(Motor2B,0)
lcd.clear()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/3001070.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存