我的小型机器人有两个由L293D控制的电机,并由Raspberry Pi控制。他们都会前进,但是只有一个会倒退。

我尝试了不同的电动机,并尝试了面包板上的不同插座,但是没有运气。 L293D的芯片坏了(但是随后它就无法前进了),或者我将其接线错误。

我完全按照教程使用Raspberry Pi使用Python控制DC电动机。

这里有很多有用的东西。假设2个电机分别为A和B:

,当我使用python脚本(请参阅文章结尾)时,两个电机都“前进”。当我更改Python脚本中的值时,因此将设置为HIGH的引脚和设置为LOW的引脚互换了,这是可以预期的,电机A将“向后移动”。但是,电机B完全不会移动。

如果我随后交换两个电动机的接线,则原始的python脚本将使两个电动机都向后移动,但是交换代码中的引脚将使电动机A向前移动,但电动机B不会移动。

因此,基本上,电动机A会根据python代码前进或后退,但只能通过物理上改变电线来改变电动机B。

这是forwards.py

import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BOARD)

Motor2A = 23
Motor2B = 21
Motor2E = 19

Motor1A = 18
Motor1B = 16
Motor1E = 22

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)

print("ON")
GPIO.output(Motor1A, GPIO.HIGH)
GPIO.output(Motor1B, GPIO.LOW)
GPIO.output(Motor1E, GPIO.HIGH)

GPIO.output(Motor2A, GPIO.HIGH)
GPIO.output(Motor2B, GPIO.LOW)
GPIO.output(Motor2E, GPIO.HIGH)


这就是backwards.py

import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BOARD)

Motor2A = 21
Motor2B = 23
Motor2E = 19

Motor1A = 16
Motor1B = 18
Motor1E = 22

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)

print("ON")
GPIO.output(Motor1A, GPIO.HIGH)
GPIO.output(Motor1B, GPIO.LOW)
GPIO.output(Motor1E, GPIO.HIGH)

GPIO.output(Motor2A, GPIO.HIGH)
GPIO.output(Motor2B, GPIO.LOW)
GPIO.output(Motor2E, GPIO.HIGH)


如果您看到此差异https://www.diffchecker.com/skmx6084,可以看到区别:





下面是一些图片。您可以使用电缆的颜色在图片之间链接它们


在此处输入图像说明



评论

您的代码中有错误,或者检查Raspi与L293D之间的接线。其他所有内容都毫无意义。

@TobiasK我已经检查过接线,并且代码是相同的代码,但是GPIO相反(因此,HIGH现在是LOW)

也许一个引脚不起作用,L293D正在将浮动引脚读为低电平,因此可以正确切换它。从raspi上交换两根控制器电线(并启用),然后观察电动机现在是否只能向后驱动。

@TobiasK是的,现在只向后退

@Greenonline我到家后会发布代码。我基本上使用了本教程中的代码,将1E和2E设置为HIGH(启用PINS),并分别用2B和1B在2A和1A之间切换。这使电动机1向后退,但电动机2什么也没做。当我更换物理导线时,发生了相同的情况,但是相反的情况是,它们会向后挪动,但只有一个会向前冲。

#1 楼

您声明使用的电机驱动器芯片L293D是“四倍半H驱动器”。这意味着,您将拥有四个只能在一个方向上驱动电动机的半个H电路,而不是两个可以驱动电动机正反转的全H电路。

您甚至在您的帖子中猜测,


L293D的芯片坏了(但是后来它没办法继续前进),或者我将其接线错误。


我想您没有将电动机正确连接到驱动器芯片。不过,这只是一个猜测,因为您尚未发布图片或接线图。

在查看芯片示意图时,看起来容易出错的地方似乎是将导线连接到芯片上的接地引脚,而不是连接到电机输出之一。



在上图中,从数据表(上方链接)中可以看到,“散热器和接地”引脚在驱动器输出引脚旁边。如果您碰巧将一根电动机导线连接到了引脚4、5、12或13而不是3、6、11或14,那么电动机仍会向一个方向旋转(从高到低),但不会旋转另一个方向(从低到低),因为它没有连接到应为高电平的驱动器引脚。

同样,纯粹是我的猜测,但这似乎可以解释您的所有症状。请为您的接线照相,并编辑您的问题以将其包括在内。

:编辑:

在图片中很难说清楚,我看不到芯片的定位方向,但看起来像:


金线为Vcc
蓝绿色线为19针,您可以将其用作“ Motor 2E”-或启用Motor 2,但是,它没有插入(3,4EN)或L293D芯片上的(1,2EN)引脚。它们分别是引脚9和1,它们位于芯片的角上。看来它可能已插入4A(或2A,再次无法确定芯片的方向)。
紫色(可能带有白色条纹)是Pin 23,您将其列为“ Motor 2B”,但那条线连接到芯片的一角,即马达启用位置。

所以对我来说,当您设置“ Motor 2E”以启用电动机2时,实际上并没有启用电动机2,而是在您的计算机中设置了您称2A码。然后,当您认为要“前进”时,将“ 2A”设为“低”,将“ 2B”设为“高”-实际上,您所说的“ 2B”是电机使能,这就是为什么它会打开。 br />当您尝试以另一种方式转向时,您似乎将“ 2A”设置为“高”而将“ 2B”设置为“低”,但是您所说的“ 2B”实际上是电机使能引脚,因此禁用电动机。

尝试在代码中交换2B和2E(交换23和19)。

如果这不起作用,请发布更清晰的图片,我们可以对其他问题进行排查。特别是,我希望看到芯片的方向以及进入Raspberry Pi的导线的更好(更清晰和更亮)的拍摄。另外,您有3条白色电线或非常浅的灰色,很难分辨它们的去向。

评论


$ \ begingroup $
Ive添加了图片
$ \ endgroup $
–汉扎·马利克(Hamzah Malik)
16年2月2日在20:00

$ \ begingroup $
我将列出连接到哪个引脚的列表
$ \ endgroup $
–汉扎·马利克(Hamzah Malik)
16-2-3在7:26

$ \ begingroup $
开关2A和E固定了它。谢谢您的帮助
$ \ endgroup $
–汉扎·马利克(Hamzah Malik)
16年3月3日在8:14

#2 楼

有一些测试可以在这种情况下提供帮助。请尝试以下两种方法之一。

测试1.获得一个逻辑探头(一个可以为您服务多年的简单低成本设备!),并在L293D上小心使用它。测试两个使能引脚中的每个引脚和四个输入引脚中的每个引脚,并确保每个引脚都按预期读取高电平或低电平。这是确定连接不良或接线错误的最确定的方法。

(关于逻辑探针的注意:始终确保将探针尖端居中且牢固地放置在要测试的IC引脚上;如果您侧滑并且使探针的两个针脚之间的“短路”,则视情况而定,可能会损坏Raspberry Pi的输出针。)

测试2.首先完全断开Raspberry Pi放在一边取走连接到电动机控制器输入的电线,然后将它们分别物理连接到电源(零伏或VCC连接)。您实际上是在手动发送信号,而不是通过软件发送信号。如果电动机现在可以正常工作,则说明您的Raspberry Pi的输出引脚已损坏。如果不是,则可能是您误解了驱动程序存在连接问题。

(由于您可能没有逻辑证明,因此我建议您至少首先尝试测试2 。仅此一项可能会有所帮助。)

评论


$ \ begingroup $
我现在不在家,但是我在Pi上尝试了不同的针脚(并且显然更改了我的代码以反映这一点),并且在同一面包板上尝试了不同的针脚。
$ \ endgroup $
–汉扎·马利克(Hamzah Malik)
16年2月2日在14:27

$ \ begingroup $
另一种可能性是仅尝试一台电动机-在控制器的一侧尝试,检查两个方向。然后将同一台电动机交换到另一侧,并在那里双向尝试。 (以查看驱动器芯片或其中一台电机是否有问题...)
$ \ endgroup $
–安迪
16-2-2在14:32

$ \ begingroup $
我已经为问题添加了图片。我会尝试您所说的。我也意识到可能是电缆,所以我也将其弄乱
$ \ endgroup $
–汉扎·马利克(Hamzah Malik)
16年2月2日在20:00

$ \ begingroup $
很难准确地从图片中找出问题所在,但是我看不到任何明显的问题。我建议重新布线以仅连接一半的驱动器-仅驱动一台电动机。然后将其全部撕下,然后再为另一半重新接线,也就是只有一台电动机。在每种情况下,请检查前进/后退操作...
$ \ endgroup $
–安迪
16-2-3在7:47

$ \ begingroup $
另外,如果使用细电线和面包板,有时电流会受到限制,并且一对中的一个电机似乎只能正常工作...因此,如果您还没有尝试过,我强烈建议您仅尝试使用一个电机。 (正如我之前提到的。)此测试确实值得...
$ \ endgroup $
–安迪
16-2-3在7:51