Comment câbler un moteur pas à pas?

10

J'ai récemment acheté l'une de ces cartes de moteur pas à pas et de pilote - et je ne trouve aucune documentation sur la façon de la connecter au Raspberry Pi - j'essaie d'utiliser le tutoriel AdaFruit et pendant que j'ai obtenu toutes les connexions établies avec le bon broches gpio connectées (les leds de la carte driver s'allument correctement, le moteur ne fait rien).

Est-ce que quelqu'un sait où je pourrais chercher plus d'informations sur la façon de connecter le Raspberry Pi à un moteur pas à pas?

Mise à jour: 15 novembre 2013 Mon code de programme est le suivant

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

Ma planche à pain ressemble à ceci entrez la description de l'image ici

Ma carte de conducteur ressemble à ceci entrez la description de l'image ici

j'ai

IN1 => GPIO 4

IN2 => GPIO 17

IN3 => GPIO 23

IN4 => GPIO 24

Steve French
la source
Les LED s'allument-elles dans le bon ordre, avec un retard de 0,5 s?
John La Rooy
J'aimerais pouvoir voter plusieurs fois.
Loko
Ils s'allument dans le bon ordre avec le retard.
Steve French

Réponses:

6

Vous avez besoin de pilotes de bus de 3,3 volts à 5 volts. Le kit moteur que vous avez acheté était pour Arduino qui utilise 5 volts gpio, le rpi utilise 3,3 volts, juste assez pour déclencher les leds, mais ne fonctionne pas. vous pouvez également obtenir un contrôleur de moteur qui accepte les lignes de contrôle de 3,3 volts.

N'oubliez pas de toujours vérifier vos cotes de volt !!

hildred
la source
[Smacks head] Je n'y ai pas pensé - y a-t-il un moyen de faire fonctionner le contrôleur de moteur auquel vous pouvez penser - je me rends compte que je demande quelque chose de miraculeux ici, ou suis-je simplement par hasard?
Steve French
@SteveFrench c'est pourquoi ils font des pilotes de bus à double tension qui tamponnent entre les tensions, j'en ai acheté sur Ebay il y a des mois, mais je ne me souviens pas de la pièce non. ils sont communs et facilement disponibles
hildred
Mais le rouge sur la photo est connecté à la broche 5V, pas au 3.3. Cela ne devrait-il pas être correct ?? Je ne l'ai pas utilisé moi-même, mais je pense qu'il y a quelques mises en garde ..
goldilocks
1
@goldilocks cela dépend de la puce du contrôleur, mais probablement pas. Je n'ai pas consulté la fiche technique de la puce du contrôleur, mais la plupart des puces à double tension utilisent 3.3v io lorsque vcc est connecté à 3.3v. mais avant d'essayer de faire en sorte que ce soit une puce à double tension, la plupart sont à simple tension. il existe également des puces de tension larges, mais l'essentiel est de vérifier la fiche technique de votre puce.
hildred
0

L'article d'Adafruit dit

Bien que le code ci-dessous mentionne la broche 18 du connecteur GPIO utilisée comme broche d'activation, cela n'est requis que lors de l'utilisation du L293D.

Si les LED s'allument et que vous avez vérifié deux fois que vous avez 5 V sur le fil rouge, il est temps de soupçonner que le moteur est défectueux.

Le moteur étant déconnecté, utilisez un multimètre pour vérifier la résistance entre chaque fil et le fil rouge. Ils devraient tous être à peu près les mêmes

John La Rooy
la source
J'ai commenté le enable_pin et ai utilisé un moteur différent, tout cela en vain. J'essaie l'approche mutimètre aujourd'hui - merci pour votre aide
Steve French
J'ai vérifié la résistance - aucune différence de résistance - très perplexe.
Steve French
Quelle serait une bonne façon de tester le 5v sur le fil rouge? J'ai essayé de mettre le multimètre directement dessus, mais l'impulsion ne semble pas durer assez longtemps pour que quoi que ce soit puisse être enregistré.
Steve French
0

Tout d'abord, quelle alimentation utilisez-vous? Dans la config que je vois, le même Vcc est utilisé pour piloter le RPi, le moteur et la carte (cavalier court-circuité). Je suis surpris que cela ne réinitialise pas le Raspberry (tirer trop de + 5V a tendance à le faire) mais je ne connais vraiment pas les caractéristiques du moteur - alors, peut-être?

Pouvez-vous faire avancer le moteur pas à pas (au minimum, étapes simples) en connectant + 5V de l'alimentation au rouge du moteur et GND aux 4 bornes restantes dans l'ordre?

Si les LED s'allument et que le moteur ne bouge pas, il semble vraiment que le courant ne soit pas suffisant. Si tel est le cas, obtenez une alimentation plus puissante ou (recommandé) ajoutez une alimentation séparée pour alimenter le moteur - retirez le cavalier et à sa place, fixez Vcc à la broche la plus externe et connectez GND à la même ligne sur la planche à pain que le fil "-" (masse commune, ne débranchez pas celui qui est déjà là.)

(il y a une petite possibilité qu'il y ait quelque chose de mal avec la carte aussi. Pourriez-vous fournir une bonne photo de la face arrière de la carte? (côté soudure)?

SF.
la source
Je peux faire bouger le moteur pas à pas directement - j'essaie maintenant l'autre méthode.
Steve French
Je viens d'essayer la méthode vcc - même résultat. Peut-être que ces cartes ne peuvent tout simplement pas être utilisées avec le pi pour une raison quelconque.
Steve French
Si les LED s'allument correctement, la carte fonctionne correctement. Soit le moteur est défectueux, soit il ne reçoit pas suffisamment de courant (ou, plutôt improbable, les câbles / connecteurs du côté moteur sont endommagés.) Avez-vous essayé si le moteur se déplace sans utiliser la carte, en connectant simplement l'alimentation directement à ses contacts?
SF.
0

En regardant le code AdaFruit et le vôtre, il semblerait que la séquence d'étapes soit incorrecte, en particulier il semble que vous ayez besoin de piloter deux broches en même temps, pas une seule.

Je pense que la séquence suivante devrait fonctionner sur la base du code 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]
PiBorg
la source
Je dois avoir copié que par erreur la séquence réelle du programme est la séquence que vous avez.
Steve French
0

J'ai suivi le guide ici http://www.raspberrypi-spy.co.uk/2012/07/stepper-motor-control-in-python/ , joli regroupement des broches GPIO, mais je me suis retrouvé à stackexchange parce que le le moteur ne faisait rien. Sauf que c'était le cas. Une fois capté, je pouvais sentir un petit "battement de coeur" chaque fois que la LED changeait, j'ai changé le paramètre WaitTime de 0,5 à des valeurs de plus en plus petites jusqu'à ce que 0,001 permette une rotation complète en 8,5 secondes.

Mais j'ai changé le type de séquence en 2 (fabricants) car le type 1 semblait parfois arrêter le moteur même avec un "battement de coeur" qui fonctionnait.

J'ai modifié le code afin de pouvoir tester le nombre d'étapes nécessaires à une rotation complète et j'ai créé un commutateur de ligne de commande pour tourner dans le sens horaire ou antihoraire.

Avec le WaitTime à 0,001 exécutant un test CW puis utilisant le même nombre d'étapes CCW a produit une petite quantité d'erreur c'est-à-dire qu'il ne s'est pas aligné là où il avait commencé.

La définition du WaitTime à 0,01 m'a permis de montrer l'exécution répétée de 4100 étapes CW ou CCW finissait toujours au même point.

Rob
la source