Moteur pas-à-pas

From Eric

Jump to: navigation, search

Contents

Objectifs

Réalisations

Principes de fonctionnement d'un moteur pas-à-pas

Moteurs bipolaires

A compléter.

Moteurs unipolaires

A compléter.

Première réalisation : commande par L297 et L298

Le premier circuit a été réalisé en wrapping.

Stepper-1.png

Un circuit imprimé a suivi...

Stepper-ci-2.png

Et, enfin, j'ai réalisé une carte complète (en double-face, de façon à se "faire la main"...). Ce montage comporte un Atmega8, un L297 et deux L298 :

  • un destiné au contrôle du moteur pas-à-pas
  • un destiné au contrôle des moteurs de propulsion.
Stepper-ci-3-comp.png
Stepper-ci-3-piste.png


Deuxième réalisation : commande par un PIC

Le L297 est fragile et coûteux.

Il peut-être facilement remplacé par un micro-contrôleur type PIC, en particulier si on omet le dispositif de contrôle de puissance et la gestion des demi-pas.

La mise en oeuvre est très simple : il suffit de commander les deux bobines selon une séquence précise.

Ainsi, par exemple, si on souhaite un couple important, la séquence de commandes doit être la suivante :

  • (A+)(B-)(C+)(D-)
  • (A-)(B+)(C+)(D-)
  • (A-)(B+)(C-)(D+)
  • (A+)(B-)(C-)(D+)

(La première (resp. seconde) bobine est alimentée entre A et B (resp. C et D).)

Si on réalise la même séquence en sens inverse, le moteur tourne dans l'autre sens (Non?!!! Si!).

Le logiciel est on ne peut plus simple :

 ; Main loop 
 loop1	
 ; Do 100 steps counter clockwise
 movlw d'100'
 call doStepCcw
 ; Do 100 steps clockwise
 movlw d'100'
 call doStepCw
 goto loop1
 
 ; Perform "steps" step clockwise
 doStepCw
   movwf steps
   movfw step
 loopCw
   call STEPPER_CMD 
   movwf PORTA
   call Delay5 ; Wait 5ms
   ; Disable the outputs
   bcf PORTA,6
   call Delay5 ; Wait 5ms
   movfw step
   incf step,w
   andlw b'00000011'
   movwf step
   decfsz steps
   goto loopCw
   return
 
 ; Perform "steps" step clockwise
 doStepCcw
   movwf steps
   movfw step
 loopCcw
   call STEPPER_CMD 
   movwf PORTA
   call Delay5 ; Wait 5ms
   ; Disable the outputs 
   bcf PORTA,6
   call Delay5 ; Wait 5ms
   movfw step
   decf step,w
   andlw b'00000011'
   movwf step
   decfsz steps
   goto loopCcw
   return
 
 STEPPER_CMD  	
   ADDWF   PCL       , f
   RETLW   b'01001010'
   RETLW   b'01000110'
   RETLW   b'01000101'
   RETLW   b'01001001'
   END        

Oui, on peut être plus astucieux (et notamment éviter cette odieuse redondance entre le code réalisant la rotation d'un un sens et dans l'autre sens !

On notera l'inhibition des sorties après la commande, de façon à éviter que les bobines soient commandées en permanence et que le L298 chauffe. (Le L297 dispose quant à lui d'un dispositif de contrôle du courant et inhibe les sorties dès que le courant dépasse un certain seuil. C'est un contrôle que je dois rajouter en comparant la tension aux bornes des résistances de sortie (résistances de puissance de 0.5 Ohm) à un seuil.

Conclusions et leçons

Quelques points à ne pas oublier :

  • Ne pas utiliser le L297 et le remplacer par un microcontroleur, moins coûteux (si on n'utilise pas le contrôle de courant).
  • Il faut penser à bien découpler les alimentations car la commande d'un moteur pas-à-pas engendre des parasites qui peuvent nuire au bon fonctionnement des autres composants partageant les lignes d'alimentation, notamment celui qui pilote le pont en H (L297 ou micro-contrôleur).
  • Rajouter un radiateur sur le L298 et contrôler l'intensité de sortie pour éviter les surchauffes...
Personal tools