Boujour à tous,
je solicite aujourd'hui votre aide car nous sommes dans une impasse.
Nous devons faire tourner un moteur pas à pas dans les 2 sens pour notre projet de TIPE. Le code que nous utilisons est ci contre, mais ne permets pas de le faire touner dans les 2 sens. Il ne tourne que dans le sens horaire. Pourriez vous nous aider en nous proposant un pogamme ?
Cela nous sauverait notre projet
En esperant que vous pouurez m'aider.
from time import sleep
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
# PIN-Assignment
A=18
B=23
C=24
D=25
time = 0.001
# defining the PINs
GPIO.setup(A,GPIO.OUT)
GPIO.setup(B,GPIO.OUT)
GPIO.setup(C,GPIO.OUT)
GPIO.setup(D,GPIO.OUT)
GPIO.output(A, False)
GPIO.output(B, False)
GPIO.output(C, False)
GPIO.output(D, False)
# driving the motor
def Pas_a_pas(n):
def Step1():
GPIO.output(D, True)
sleep (time)
GPIO.output(D, False)
def Step2():
GPIO.output(D, True)
GPIO.output(C, True)
sleep (time)
GPIO.output(D, False)
GPIO.output(C, False)
def Step3():
GPIO.output(C, True)
sleep (time)
GPIO.output(C, False)
def Step4():
GPIO.output(B, True)
GPIO.output(C, True)
sleep (time)
GPIO.output(B, False)
GPIO.output(C, False)
def Step5():
GPIO.output(B, True)
sleep (time)
GPIO.output(B, False)
def Step6():
GPIO.output(A, True)
GPIO.output(B, True)
sleep (time)
GPIO.output(A, False)
GPIO.output(B, False)
def Step7():
GPIO.output(A, True)
sleep (time)
GPIO.output(A, False)
def Step8():
GPIO.output(D, True)
GPIO.output(A, True)
sleep (time)
GPIO.output(D, False)
GPIO.output(A, False)
# start one complete turn
for i in range (n):
Step1()
Step2()
Step3()
Step4()
Step5()
Step6()
Step7()
Step8()
GPIO.cleanup()
Pas_a_pas(512)
Aide moteur pas à pas
Modérateurs : Francois, Manfraid
Re: Aide moteur pas à pas
Bonjour,
Comment est connecté le Raspberry, vous utiliser un pilote de moteur ? à base de transistor ULN2003 ? c'est branché comment ?
Votre code est incompréhensible parce que Python exploite les indentations pour définir les blocs d'instructions. Pourriez vous utiliser le bouton "</>" du forum pour mettre le code (il sert à ça).
Enfin, tel que je vois votre code, vous avez mis ceci :
Et vous appelez :
C'est à dire une fonction qui ne fait rien
S'il se passe quelque chose ce ne peut-être que parce qu'il y a du code sans indentation donc exécuté systématiquement (et invisible pour nous puisqu'on ne voit pas les indentations)
Sinon, il y a un article ici en Français.
https://www.aranacorp.com/fr/pilotez-un ... spberrypi/
le programme n'est pas "joli" mais ça fonctionne, en appelant steps avec un nombre >0, le moteur tourne dans le sens horaire et avec un nombre <0 dans le sens anti-horaire.
Comment est connecté le Raspberry, vous utiliser un pilote de moteur ? à base de transistor ULN2003 ? c'est branché comment ?
Votre code est incompréhensible parce que Python exploite les indentations pour définir les blocs d'instructions. Pourriez vous utiliser le bouton "</>" du forum pour mettre le code (il sert à ça).
Enfin, tel que je vois votre code, vous avez mis ceci :
Code : Tout sélectionner
def Pas_a_pas(n):
def Step1():
Code : Tout sélectionner
Pas_a_pas(512)
S'il se passe quelque chose ce ne peut-être que parce qu'il y a du code sans indentation donc exécuté systématiquement (et invisible pour nous puisqu'on ne voit pas les indentations)
Sinon, il y a un article ici en Français.
https://www.aranacorp.com/fr/pilotez-un ... spberrypi/
le programme n'est pas "joli" mais ça fonctionne, en appelant steps avec un nombre >0, le moteur tourne dans le sens horaire et avec un nombre <0 dans le sens anti-horaire.
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32
Re: Aide moteur pas à pas
Bonjour,
nous utilisons un contrôleur (référence ULN2003) ainsi que le programme fourni avec (que vous pouvez trouver sur le lien suivant)
https://www.joy-it.net/en/products/SBC-Moto1
La fonction pas à pas a été crée afin de pouvoir insérer le programme, et n'a donc aucune valeur ajoutée
nous utilisons un contrôleur (référence ULN2003) ainsi que le programme fourni avec (que vous pouvez trouver sur le lien suivant)
https://www.joy-it.net/en/products/SBC-Moto1
La fonction pas à pas a été crée afin de pouvoir insérer le programme, et n'a donc aucune valeur ajoutée
Re: Aide moteur pas à pas
Ce programme n'est bien que pour faire une petite démo.
Bref, la réponse à votre question est simple : il suffit de refaire les étapes dans l'autre sens :
Si vous voulez faire un une fonction dans laquelle vous pourrez choisir de combien de degrés vous voulez faire la rotation et dans quel sens, il faudra faire autrement (le lien que j'ai fournis est pas mal, il utilise des tableaux de valeurs , ça semble plus compliqué au 1er abord mais en faire à l'usage c'est beaucoup plus souple et simple)
Bref, la réponse à votre question est simple : il suffit de refaire les étapes dans l'autre sens :
Si vous voulez faire un une fonction dans laquelle vous pourrez choisir de combien de degrés vous voulez faire la rotation et dans quel sens, il faudra faire autrement (le lien que j'ai fournis est pas mal, il utilise des tableaux de valeurs , ça semble plus compliqué au 1er abord mais en faire à l'usage c'est beaucoup plus souple et simple)
Code : Tout sélectionner
# SENS HORAIRE
for i in range (512):
Step1()
Step2()
Step3()
Step4()
Step5()
Step6()
Step7()
Step8()
# SENS ANTI-HORAIRE
for i in range (512):
Step8()
Step7()
Step6()
Step5()
Step4()
Step3()
Step2()
Step1()
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32
Re: Aide moteur pas à pas
Bonjour ,
J'arrive certainement trop tard pour vous aider .
Les pas se suivant , il est préférable de les intégrer dans un tableau et de les appeler par la suite .
Source : https://www.positron-libre.com/electron ... -a-pas.php
Pour faire l'appel du pas correspondant à une valeur donnée , il faut utiliser l'opérande modulo représenté par le symbole % .
Cette opération retourne le reste d'une division . Donc si je fais l'opération n % 8 , le résultat obtenu est une valeur comprise de 0 à 7 .
Pour tourner dans un sens , on incrémente n , et pour tourner dans l'autre , il suffit de le décrémenter .
Avec un déplacement n de + ou - 2 , on peut alors passer les pas A, C, B, D ou A+C, B+C, B+D, A+D .
J'ai codé ça vite fait pour avoir un visuel sur console .
il suffit de jouer avec les fonctions Avance et Recule pour lui faire effectuer n pas dans le sens souhaité .
>>> Avance(4)
Step Init
Step 5 x=125
A=False
B=True
C=False
D=True
Step 6 x=126
A=False
B=False
C=False
D=True
Step 7 x=127
A=True
B=False
C=False
D=True
Step 0 x=128
A=True
B=False
C=False
D=False
Step 1 x=129
A=True
B=False
C=True
D=False
extinction sorties
A=False
B=False
C=False
D=False
]>>> Recule(8)
Step Init
Step 1 x=129
A=True
B=False
C=True
D=False
Step 0 x=128
A=True
B=False
C=False
D=False
Step 7 x=127
A=True
B=False
C=False
D=True
Step 6 x=126
A=False
B=False
C=False
D=True
Step 5 x=125
A=False
B=True
C=False
D=True
Step 4 x=124
A=False
B=True
C=False
D=False
Step 3 x=123
A=False
B=True
C=True
D=False
Step 2 x=122
A=False
B=False
C=True
D=False
Step 1 x=121
A=True
B=False
C=True
D=False
extinction sorties
A=False
B=False
C=False
D=False
>>>
J'arrive certainement trop tard pour vous aider .
Les pas se suivant , il est préférable de les intégrer dans un tableau et de les appeler par la suite .
Source : https://www.positron-libre.com/electron ... -a-pas.php
Code : Tout sélectionner
#!/usr/bin/python3
# Bits de Commande PAP
A = 0b0001
B = 0b0010
C = 0b0100
D = 0b1000
# création du tableau des pas
pas = 8 * [0]
pas[0] = A
pas[1] = A+C
pas[2] = C
pas[3] = B+C
pas[4] = B
pas[5] = B+D
pas[6] = D
pas[7] = A+D
# pas vaut alors [1, 5, 4, 6, 2, 10, 8, 9]
Cette opération retourne le reste d'une division . Donc si je fais l'opération n % 8 , le résultat obtenu est une valeur comprise de 0 à 7 .
Pour tourner dans un sens , on incrémente n , et pour tourner dans l'autre , il suffit de le décrémenter .
Avec un déplacement n de + ou - 2 , on peut alors passer les pas A, C, B, D ou A+C, B+C, B+D, A+D .
J'ai codé ça vite fait pour avoir un visuel sur console .
il suffit de jouer avec les fonctions Avance et Recule pour lui faire effectuer n pas dans le sens souhaité .
Code : Tout sélectionner
#!/usr/bin/python3
from time import sleep
# Bits de Commande PAP
A = 0b0001
B = 0b0010
C = 0b0100
D = 0b1000
# création du tableau des pas
pas = 9 * [0]
pas[0] = A
pas[1] = A+C
pas[2] = C
pas[3] = B+C
pas[4] = B
pas[5] = B+D
pas[6] = D
pas[7] = A+D
# pas[8] = 0 # extinction des sorties , déjà défini par défaut
# pas vaut alors [1, 5, 4, 6, 2, 10, 8, 9, 0]
x = 125 # variable de positionnement dans l'espace
pause = 0.1 # en secondes
# Commade des sorties , n=8 si non renseigné
def Step (n=8):
if n<8: print ("Step %i x=%i" %(n, x))
else: print ("extinction sorties")
print ("A=%s" %(bool(pas[n] & A)))
print ("B=%s" %(bool(pas[n] & B)))
print ("C=%s" %(bool(pas[n] & C)))
print ("D=%s" %(bool(pas[n] & D)))
print ()
sleep(pause)
return
def Avance (n): # n = nombre de pas à effectuer
global x
print ("Step Init")
Step(x%8) # %(modulo) soit le reste de la division x par 8
while n:
x += 1
n -= 1
Step(x%8) # %(modulo)
Step() # extinction des sorties
return
def Recule (n): # n = nombre de pas à effectuer
global x
print ("Step Init")
Step(x%8) # %(modulo)
while n:
x -= 1
n -= 1
Step(x%8) # %(modulo)
Step() # extinction des sorties
return
Step Init
Step 5 x=125
A=False
B=True
C=False
D=True
Step 6 x=126
A=False
B=False
C=False
D=True
Step 7 x=127
A=True
B=False
C=False
D=True
Step 0 x=128
A=True
B=False
C=False
D=False
Step 1 x=129
A=True
B=False
C=True
D=False
extinction sorties
A=False
B=False
C=False
D=False
]>>> Recule(8)
Step Init
Step 1 x=129
A=True
B=False
C=True
D=False
Step 0 x=128
A=True
B=False
C=False
D=False
Step 7 x=127
A=True
B=False
C=False
D=True
Step 6 x=126
A=False
B=False
C=False
D=True
Step 5 x=125
A=False
B=True
C=False
D=True
Step 4 x=124
A=False
B=True
C=False
D=False
Step 3 x=123
A=False
B=True
C=True
D=False
Step 2 x=122
A=False
B=False
C=True
D=False
Step 1 x=121
A=True
B=False
C=True
D=False
extinction sorties
A=False
B=False
C=False
D=False
>>>