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
Ma carte de conducteur ressemble à ceci
j'ai
IN1 => GPIO 4
IN2 => GPIO 17
IN3 => GPIO 23
IN4 => GPIO 24
Réponses:
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 !!
la source
L'article d'Adafruit dit
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
la source
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)?
la source
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:
la source
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.
la source