Como conectar um motor de passo?


10

Recentemente, comprei uma dessas placas de motor e motor de passo - e não consigo encontrar nenhuma documentação sobre como conectá-la ao Raspberry Pi - estou tentando usar o tutorial do AdaFruit e enquanto obtive todas as conexões corretas. pinos gpio conectados (os leds na placa do motorista acendem corretamente, o motor não faz nada).

Alguém sabe onde eu posso procurar mais informações sobre como conectar o raspberry pi a um motor de passo?

Atualização: 15 de novembro de 2013 O código do meu programa é este

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))

Minha placa de ensaio fica assim insira a descrição da imagem aqui

Minha placa de driver é assim insira a descrição da imagem aqui

eu tenho

IN1 => GPIO 4

IN2 => GPIO 17

IN3 => GPIO 23

IN4 => GPIO 24


Os LEDs estão acendendo na sequência correta, com o atraso de 0,5 s?
John La Rooy

Gostaria de poder votar várias vezes.
Loko

Eles estão acendendo na seqüência correta com o atraso.
Steve francesa

Respostas:


6

Você precisa de drivers de barramento de 3,3 a 5 volts. O kit de motor que você comprou foi para o Arduino, que usa 5 volts gpio, o rpi usa 3,3 volts, apenas o suficiente para disparar os leds, mas não funciona. você também pode obter um controlador de motor que aceite linhas de controle de 3,3 volts.

Lembre-se sempre de verificar suas classificações de voltagem !!


[Smacks cabeça] Eu não pensei nisso - existe alguma maneira de fazer o controlador do motor funcionar - você percebe que estou pedindo algo milagroso aqui, ou estou sem sorte?
Steve francesa

@SteveFrench é por isso que eles produzem drivers de barramento de dupla voltagem que amortecem entre tensões, eu comprei alguns no ebay meses atrás, mas não me lembro da parte não. eles são comuns e prontamente disponível
Hildred

Mas o vermelho na foto está conectado ao pino de 5V, não ao 3.3. Isso não deveria estar bem? Eu não usei isso mesmo, mas eu acho que existem algumas ressalvas ..
goldilocks

11
@ goldilocks depende do chip do controlador, mas provavelmente não. Não procurei a folha de dados do chip do controlador, mas a maioria dos chips de dupla voltagem usa 3.3v io quando o vcc está conectado ao 3.3v. mas, antes de tentar fazer com que o shure seja um chip de dupla voltagem, a maioria é de voltagem única. também existem chips de voltagem ampla, mas o resultado final é verificar a folha de dados do seu chip.
Hildred 21/11

0

O artigo adafruit diz

Embora o código abaixo mencione o pino 18 do conector GPIO sendo usado como um pino de ativação, isso é necessário apenas ao usar o L293D.

Se os LEDs estiverem acesos e você tiver verificado duas vezes se possui 5V no fio vermelho, é hora de suspeitar que o motor está com defeito.

Com o motor desconectado, use um multímetro para verificar a resistência entre cada fio e o fio vermelho. Eles devem ser todos iguais


Eu comentei o enable_pin e usei um motor diferente, tudo sem sucesso. Eu estou tentando a abordagem mutimeter hoje - obrigado por sua ajuda
Steve francesa

Eu verifiquei a resistência - sem diferença na resistência - muito desconcertante.
Steve francesa

Qual seria uma boa maneira de testar 5v no fio vermelho? Tentei apenas colocar o multímetro diretamente, mas o pulso não parece durar o suficiente para que qualquer coisa seja registrada.
Steve French

0

Primeiro, qual fonte de alimentação você está usando? Na configuração que vejo, o mesmo Vcc é usado para acionar o RPi, o motor e a placa (jumper em curto). Estou surpreso que não redefina o Raspberry (extrair muito de + 5V tende a fazer isso), mas realmente não conheço as características do motor - então, talvez?

Você pode fazer com que o stepper se mova (minimamente, etapas simples) conectando + 5V da fonte de alimentação ao Red do motor e GND aos 4 terminais restantes em sequência?

Se os LEDs acenderem e o motor não se mover, realmente parece que não está recebendo corrente suficiente. Se for esse o caso, obtenha uma fonte de alimentação mais forte ou (recomendado) adicione uma fonte de alimentação separada para alimentar o motor - remova o jumper e, em seu lugar, conecte Vcc ao pino mais externo e conecte GND à mesma linha na placa de ensaio que o fio "-" (terra comum, não desconecte o que já está lá).

(existe uma pequena possibilidade de que haja algo errado com a placa também. Você poderia fornecer uma boa foto do verso da placa? (lado da solda)?


Posso fazer com que o motor deslizante se mova diretamente - agora estou tentando o outro método.
Steve francesa

Apenas tentei o método vcc - mesmo resultado. Talvez essas placas não possam ser usadas com o pi por algum motivo.
Steve francesa

Se os LEDs acenderem corretamente, a placa funcionará corretamente. O motor está com defeito ou não recebe corrente suficiente (ou é improvável que a fiação / conectores do lado do motor estejam danificados.) Você já tentou se o motor se move sem usar a placa, apenas conectando a energia diretamente aos contatos?
SF.

0

Olhando para o código AdaFruit e o seu, parece que a sequência de etapas está errada; em particular, parece que você precisa acionar dois pinos ao mesmo tempo e não apenas um.

Eu acho que a seguinte sequência deve funcionar com base no código 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]

Devo ter copiado que, por engano, a sequência real do programa é a sequência que você possui.
Steve francesa

0

Tenho seguido o guia aqui http://www.raspberrypi-spy.co.uk/2012/07/stepper-motor-control-in-python/ , bom agrupamento dos pinos GPIO, mas acabei em stackexchange porque o o motor não estava fazendo nada. Exceto que era. Quando atendido, senti um pequeno "batimento cardíaco" toda vez que o LED mudou, alterei o parâmetro WaitTime de 0,5 para valores cada vez menores até 0,001 permitir uma rotação completa em 8,5 segundos.

Mas mudei o tipo de sequência para 2 (fabricantes), pois o tipo 1 parecia ocasionalmente parar o motor, mesmo com um "batimento cardíaco" em funcionamento.

Alterei o código para poder testar o número de etapas que uma rotação completa tomou e construí uma opção de linha de comando para girar no sentido horário ou anti-horário.

Com o WaitTime em 0,001, executando um teste CW e, em seguida, usando o mesmo número de etapas, o CCW produziu uma pequena quantidade de erro, ou seja, não foi alinhado onde havia iniciado.

Definir o WaitTime para 0,01 permitiu-me mostrar a execução repetida de 4100 etapas, tanto no sentido horário quanto no sentido horário, sempre terminavam no mesmo ponto.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.