Aide moteur pas à pas

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Répondre
Thomeche
Messages : 2
Enregistré le : jeu. 28 avr. 2022 14:58

Aide moteur pas à pas

Message par Thomeche » jeu. 28 avr. 2022 15:11

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)

piper
Raspinaute
Messages : 641
Enregistré le : sam. 5 juin 2021 18:57

Re: Aide moteur pas à pas

Message par piper » jeu. 28 avr. 2022 15:33

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 :

Code : Tout sélectionner

def Pas_a_pas(n):
def Step1():
Et vous appelez :

Code : Tout sélectionner

Pas_a_pas(512)
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.
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

Thomeche
Messages : 2
Enregistré le : jeu. 28 avr. 2022 14:58

Re: Aide moteur pas à pas

Message par Thomeche » jeu. 28 avr. 2022 15:56

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

piper
Raspinaute
Messages : 641
Enregistré le : sam. 5 juin 2021 18:57

Re: Aide moteur pas à pas

Message par piper » jeu. 28 avr. 2022 20:39

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)

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

MSG
Raspinaute
Messages : 119
Enregistré le : ven. 26 déc. 2014 18:31

Re: Aide moteur pas à pas

Message par MSG » ven. 15 juil. 2022 15:11

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

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]
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é .

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

>>>

Répondre

Retourner vers « Python »