如何为步进电机接线?


10

我最近购买了这些 步进电机和驱动器板中的一个 -我找不到如何将其连接到Raspberry Pi的任何文档-我正尝试使用 AdaFruit教程,尽管我已将所有连接正确地建立了。已连接gpio引脚(驱动板上的LED正常点亮,电动机不起作用)。

有谁知道我可能在哪里寻找有关如何将树莓派连接到步进电机的更多信息?

更新:2013年11月15日我的程序代码是这个

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

#enable_pin = 18
coil_A_1_pin = 4
coil_A_2_pin = 17
coil_B_1_pin = 23
coil_B_2_pin = 24

#GPIO.setup(enable_pin, GPIO.OUT)
GPIO.setup(coil_A_1_pin, GPIO.OUT)
GPIO.setup(coil_A_2_pin, GPIO.OUT)
GPIO.setup(coil_B_1_pin, GPIO.OUT)
GPIO.setup(coil_B_2_pin, GPIO.OUT)

#GPIO.output(enable_pin, 1)

def forward(delay, steps):  
  for i in range(0, steps):
    setStep(1, 0, 1, 0)
    setStep(0, 1, 1, 0)
    setStep(0, 1, 0, 1)
    setStep(1, 0, 0, 1)

def backwards(delay, steps):  
  for i in range(0, steps):
    setStep(1, 0, 0, 1)
    setStep(0, 1, 0, 1)
    setStep(0, 1, 1, 0)
    setStep(1, 0, 1, 0)


def setStep(w1, w2, w3, w4):
  GPIO.output(coil_A_1_pin, w1)
  GPIO.output(coil_A_2_pin, w2)
  GPIO.output(coil_B_1_pin, w3)
  GPIO.output(coil_B_2_pin, w4)

while True:
  delay = raw_input("Delay between steps (milliseconds)?")
  steps = raw_input("How many steps forward? ")
  forward(int(delay) / 1000.0, int(steps))
  steps = raw_input("How many steps backwards? ")
  backwards(int(delay) / 1000.0, int(steps))

我的面包板看起来像这样 在此处输入图片说明

我的驱动板看起来像这样 在此处输入图片说明

我有

IN1 => GPIO 4

IN2 => GPIO 17

IN3 => GPIO 23

IN4 => GPIO 24


LED是否以0.5秒的延迟按正确的顺序点亮?
John La Rooy

希望我可以多次投票。
Loko 2013年

它们以延迟的正确顺序点亮。
史蒂夫·法国

Answers:


6

您需要3.3伏至5伏的总线驱动器。您购买的电机套件是用于Arduino的,它使用5伏特gpio,rpi使用3.3伏特,足以使LED跳闸,但不起作用。您还可以得到一个接受3.3伏控制线的电动机控制器。

切记请务必检查您的电压额定值!!


[小伙子头]我没想到-有什么方法可以让电机控制器工作,您可以想到-我知道我在这里要求一些奇迹,还是只是运气不好?
史蒂夫·法国

@SteveFrench这就是为什么他们制造双电压总线驱动器来在电压之间缓冲的原因,我几个月前在ebay上买了一些,但是不记得有没有。它们很常见并且随时可用
hildred

但是照片中的红色连接到5V引脚,而不是3.3引脚。那不应该吗?我自己没有使用过,但是我认为有一些警告
。–

1
@goldilocks取决于控制器芯片,但可能并非如此。我没有查找控制器芯片的数据表,但是当vcc连接到3.3v时,大多数双电压芯片都使用3.3v io。但是在尝试确定它是双电压芯片之前,大多数都是单电压。也有宽电压芯片,但最重要的是检查芯片的数据表。
hildred

0

adafruit文章说

尽管以下代码提到了GPIO连接器的引脚18用作使能引脚,但这仅在使用L293D时才需要。

如果LED点亮,并且您再次检查红色导线上是否有5V电压,那么该是时候怀疑电动机有故障了。

在断开电动机连接的情况下,使用万用表检查每根电线和红色电线之间的电阻。他们应该都差不多


我已注释掉enable_pin并使用了其他马达,但无济于事。我今天正在尝试使用分光计方法-谢谢您的帮助
Steve French

我检查了抵抗力-抵抗力没有区别-非常困惑。
史蒂夫·法国

在红线上测试5v的好方法是什么?我尝试过直接将万用表放在那里,但是脉冲似乎持续的时间不足以记录任何东西。
史蒂夫·法国

0

首先,您使用什么电源?在我看到的配置中,相同的Vcc用于驱动RPi,电机和电路板(跳线短路)。我很惊讶没有重置Raspberry(从+ 5V汲取太多电流会这样做),但是我真的不知道电机的特性-也许吧?

通过将电源的+ 5V连接到电动机的Red并将GND依次连接到其余4个端子,您能否使步进器运动(至少单步)?

如果LED指示灯亮起,并且电动机不运转,则看起来好像没有足够的电流。如果是这种情况,请获得更强的电源,或者(建议)添加一个单独的PSU为电动机供电-卸下跳线,并将其Vcc连接至最外面的引脚,然后将GND连接至面包板上的同一条线路, “-”线(公用接地,请勿断开已经存在的那根线。)

(极有可能是电路板也有问题。您能否提供电路板背面的好照片?(焊接侧)?


我可以使步进电机直接移动-我现在正在尝试另一种方法。
史蒂夫·法国

刚刚尝试了vcc方法-相同的结果。也许由于某些原因,这些板子不能与pi一起使用。
史蒂夫·法国

如果LED正确点亮,则说明该板工作正常。电动机有故障或没有足够的电流(或者电动机侧的接线/连接器损坏的可能性很小。)是否尝试过在不使用电路板的情况下电动机运动而仅将电源直接连接至其触点?
SF。

0

查看AdaFruit代码和您自己的代码,似乎步骤顺序是错误的,特别是似乎您需要同时驱动两个引脚,而不仅仅是驱动一个。

我认为以下序列应基于AdaFruit代码工作:

# Define simple sequence
StepCount1 = 4
Seq1 = []
Seq1 = range(0, StepCount1)
Seq1[0] = [1,0,1,0]
Seq1[1] = [0,1,1,0]
Seq1[2] = [0,1,0,1]
Seq1[3] = [1,0,0,1]

我必须复制了错误的代码,程序的实际顺序就是您所拥有的顺序。
史蒂夫·法国

0

我一直在这里遵循指南http://www.raspberrypi-spy.co.uk/2012/07/stepper-motor-control-in-python/,对GPIO引脚进行了很好的分组,但是由于电机什么也没做。除了它。每次拾起LED时,我都会感到很小的“心跳”,我将WaitTime参数从0.5更改为越来越小的值,直到0.001允许在8.5秒内完全旋转。

但是我确实将顺序类型更改为2(制造商),因为即使在“心跳”正常工作的情况下,类型1似乎也会偶尔停止电动机。

我更改了代码,以便可以测试完整旋转的步骤数,并构建了一个命令行开关以顺时针或逆时针旋转。

在WaitTime为0.001的情况下运行测试CW,然后使用相同数量的步骤,CCW会产生少量错误,即它未在开始位置对齐。

将WaitTime设置为0.01,使我可以显示重复执行4100个步骤,无论CW还是CCW总是在同一点结束。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.