Commande simultanée de 2 moteurs pas-à-pas avec un Picaxe 20M2

PC_Automation

New member
Les instructions Table et Readtable permettent de simuler une PROM fusible ou un PLA ,
ce qui se rapproche fortement d'une logique combinatoire cablée et accélère grandement les automatismes.
On peut ainsi contrôler simultanément 2 moteurs pas-à-pas à l'aide d'un seul Picaxe 20M2 et par exemple
orienter une caméra avec un simple joystick. Le lien ci-dessous vous fournira le schéma et le programme.
https://automationpc.blogspot.com/search/label/PICAXE - Contrôle simultané de 2 moteurs pas-à-pas avec un PICAXE. Bonne découverte et merci d'avance de laisser un avis sur le blog.
 

PieM

Senior Member
Bonjour,
Je ne suis personnellement pas certain qu'utiliser un µC de cette façon, apporte un avantage, comparé aux possibilités offertes par un langage interprété comme celui du Picaxe.
Quand vous écrivez readtable pinsC,action pour connaître l'état d'une entrée, c'est ce que fait par définition le microcontrôleur durant son cycle de scrutation des registres internes !
Le gain en rapidité est inexistant, et la lisibilité du programme est fortement compromise. Car remplacer 8 entrées TOR par une table de 256 valeurs alors que ces entrées peuvent être clairement définies par des "mot1-fin_course" "Cam-droite" etc, n'aide pas la lecture !
Il n'y a aucune difficulté à faire fonctionner plusieurs moteur PaP avec un picaxe. On peut faire tourner 4 PaP avec un 28X2.
Le problème est éventuellement de gérer des vitesses différentes comme déjà évoqué dans certains posts, faute de vrai multitâche.
sinon 2 moteurs avec un 18M2 est ici , avec des vitesses contrôlées et des commandes indépendantes pour chaque moteur.
Voir également commande-moteur-pas-a-pas
 

PieM

Senior Member
L'exercice est donc de commander 2 moteurs pas à pas en continu en fonction de l'action sur un joystick à contacts TOR.
Une limitation est faite via 4 fins de course TOR.

La première solution qui vient est de mettre, câblés en série, les FdC en NF avec les contacts joystick en NO.
Seules 4 entrées sont ainsi nécessaires sur le Picaxe avec cette simple logique câblée.
Ensuite, l'état de ces entrées viennent incrémenter ou décrémenter un compteur par 8 pour chaque moteur.
Ce compteur est donc l'index de lecture de la phase de commande du PaP , située en EEprom. (*)
La séquence pour chaque moteur est indépendante et peut être appliquée sur le port de sortie que l'on veut. (4 moteurs PaP sur un 28X2 par exemple)
Ici les deux séquences sont mises sur le même port par un décalage gauche de 4 bit d'une séquence.

Le programme de base pour cette appli peut donc se résumer à : (33 bytes vs 151 du pg initial et un gain important de vitesse de scrutation)
Rich (BB code):
#picaxe 20M2
;sequence demi pas en EEprom
eeprom 0,(%0001,%0011,%0010,%0110,%0100,%1100,%1000,%1001)
symbol Seq_MotV = b5 ; sorties B4 ... B7
symbol Seq_MotH = b6 ; sorties B0 ... B3
symbol compteurV = b7
symbol compteurH = b8
symbol Cde_Haut = pinC.0
symbol Cde_Bas = pinC.1
symbol Cde_Droite = pinC.2
symbol Cde_Gauche = pinC.3

dirsB = $FF ; port B en sortie

do
;on incremente ou decremente un compteur sur 8 selon l'entree active
      compteurV = compteurV + Cde_Haut - Cde_Bas // 8
      compteurH = compteurH + Cde_Droite - Cde_Gauche // 8
; lecture des sequences moteur en EEprom
      read compteurV, Seq_MotV
      read compteurH, Seq_MotH 

;on affecte les 2x 4 bits des sorties sur le port B apres decalage:
      pinsB = Seq_MotH*16 + Seq_MotV
      'pause 10 ; si necessaire
loop
Si on veut pour une raison particulière, maintenir la gestion des FdC par le µC le programme peut devenir :
Rich (BB code):
do
      
'on neutralise par un ET logique les entrees du joystick (C.0 ? C.3)par l'etat des FdC (C.4 a C.7) si non realise par cablage direct !
      b0 = not pinsC /16 and pinsC ' Si les FdC sont NO
      'b0 = pinsC /16 and pinsC ' Si les FdC sont NF (ce qui est preferabe en automatisme).
      
;on incremente ou decremente un compteur sur 8 selon l'image b0 de l'entree active
      compteurV = compteurV + bit0 - bit1 // 8
      compteurH = compteurH + bit2 - bit3 // 8
; lecture des sequences moteur en EEprom
      read compteurV, Seq_MotV
      read compteurH, Seq_MotH 
; si on veut mettre hors tension les moteurs hors commande (non conseille)
      if Cde_Haut = 0 and Cde_Bas = 0 then :    Seq_MotV = 0 : endif
      if Cde_Droite = 0 and Cde_Gauche = 0 then :     Seq_MotH = 0 : endif
;on affecte les 2x 4 bits des sorties sur le port B apres decalage:
      pinsB = Seq_MotH*16 + Seq_MotV
      'pause 10 ; si necessaire
En complément 2 lignes pour la mise hors tension des moteurs; cette mise hors tension des moteurs PaP est en général déconseillée si les moteurs sont soumis à un couple résistant, le maintien en position n'étant pas assuré.
De plus, l'intérêt d'une commande par 1/2 pas, peu justifiée dans le cas présent, est perdu puisque hors tension, le moteur se cale sur un pas entier.

(*) l'instruction lookdown peut être employée également mais je ne suis pas certain qu'elle soit plus rapide qu'un read en EEprom (500µs @ 4 MHz) (?)

Remarque: la gestion des FdC par programme (Et logique sur un demi octet) suppose que les entrées FdC et les entrées joystick sont dans le même ordre logique, ce qui n'est pas le cas sur le schéma du blog. (FdC UP et FdC down doivent être inversés)
 
Last edited:
Top