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
Minha placa de driver é assim
eu tenho
IN1 => GPIO 4
IN2 => GPIO 17
IN3 => GPIO 23
IN4 => GPIO 24
Respostas:
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 !!
fonte
O artigo adafruit diz
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
fonte
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)?
fonte
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:
fonte
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.
fonte