Electromag1 Circuits électroniques et Picaxes

Petit site pour ceux qui bricolent en électronique en général et sur les PICAXES en particulier.
Les PICAXES sont des microprocesseurs (PIC de Microship) programmables en BASIC. Pleins de qualités, pas chers, ultra faciles à programmer.
Tout (ou presque) est sur le site du distributeur Gotronic (voir les liens).
Les pages  seront ajoutées ou modifiées petit à petit.
Dans le but d'améliorer ce blog, communiquez moi vos remarques et les erreurs que vous pouvez constater.
Pour me contacter: Envoyez un mail à l'adresse : mag1mic@free.fr .  Tout message reçoit une réponse
Pour retourner au menu, Cliquer sur "LISTE DES PAGES", ici ou en haut de la colonne de gauche
Pour laisser un message, allez dans le "LIVRE D'OR"
Bonne visite
 
 

Pilotage des moteurs pas à pas

Le test porte sur un petit moteur bipolaire 5 V démonté d'un scanner, on trouve ces moteurs un peu partout, imprimantes, scanners, disques durs,etc... et ils finissent généralement à la poubelle, dommage.

Le µC est un picaxe 14M2, 4 sorties pilotent un driver L293D, relié aux deux bobines du moteur
Un potentiomètre pour faire varier la vitesse, avec changement de sens au centre. Un poussoir pour passer de pas entiers à demis pas, et inversement.
Cet essai est minimaliste, pour des moteurs plus puissants, il faut aussi gérer le courant moteur. Un classique est le couple L297 + L298 dont on trouve des descriptions sur la toile.
Pour le petit moteur de scanner, le L293D est suffisant.

Le schéma:


 
Le code (faire un copier/coller dans l'éditeur PE6):
 
'===================================================
'Commande moteur PAP bipolaire
'14M2 plus Driver L293D
' connections moteur : sur A et B du L293D
;MM : 27 03 2015 / 30/03/2015
'===================================================
#picaxe 14M2
'===================================================
setfreq m32
symbol potar= C.0
symbol moteur = outpinsB    'variable systeme outpinsB nommée moteur
symbol pous=pinC.2    ;commande interruption sur C.2
symbol cpt= b1    ;compteur tournant
symbol vitesse= b2
symbol pas=b3    
dirsB= %001111        'affectation B.0 a B.3 en sortie vers le L293
pullup %10000000000            ;pullup sur C.2
setint %00000000,%00000100    ;interruption sur C.2
pas=2    ;départ en pas entiers

do
    readadc potar, vitesse
    select vitesse
        case >132    
            cpt=cpt+pas            
            cpt = cpt & %00000111 'la valeur de b1 est limitée à 3 bits, soit 0 à 7     
        'mémorisation de la sequence de commande pour le moteur en demi pas
            lookup cpt,(%1010,%1000,%1001,%0001,%0101,%0100,%0110,%0010),moteur
            vitesse= 255-vitesse
            pause vitesse        'pause en ms/8                    
        case < 123        
            cpt=cpt-pas                
            cpt = cpt & %00000111 'la valeur de b1 est limitée à 3 bits, soit 0 à 7          ;
            lookup cpt,(%1010,%1000,%1001,%0001,%0101,%0100,%0110,%0010),moteur    
            pause vitesse        'pause en ms/8                    
        else
            moteur=0
    endselect    
loop

interrupt:
    pas=pas//2    ; 0 si pas =2, 1 si pas =1
    pas=pas+1    ;changement en 1 ou 2, on peut ecrire pas=pas//2+1
    setint %00000000,%00000100    ;interruption sur C.2
    do loop while pous=0
    pause 4000      ;1s à fréquence M32
return


Quelques explications complémentaires:
La première partie du code, jusqu'à la boucle Do Loop est une initialisation:  désignations des noms de variables, du picaxe utilisé, de la fréquence horloge, activation de pullup et d'une interruption sur la broche C.2
Par la commande : Moteur=outpinsB :
outpinsB désigne les broches B.0 à B.5 du picaxe.
Moteur est un octet 
Les broches B.5:...:B.0 vont prendre les valeurs de bit5:...bit0 de l'octet Moteur.
 
La boucle principale Do Loop
Commence par la lecture du potentiomètre de vitesse, qui introduit une pause entre les impulsions transmises au moteur. La lecture donne une valeur de 0 à 255
Cette valeur de vitesse est divisée en trois par le "select case"
- Case else ,entre 123 et 133, le moteur ne reçoit aucune impulsion et le courant dans les bobines est nul. C'est un choix, le moteur ne chauffe pas mais le couple est nul.
- case > 133, la valeur calculée "vitesse" donne une valeur de 0 à 122 (erreur: 121)
Le pas alterne entre 1 et 2 à chaque passage dans l'interruption, déclenchée par le poussoir.
La séquence des polarisations des bobines est mémorisié dans un "lookup".
Les 8 combinaisons correspondent à une commande en demi pas, en ne prenant qu'une combinaison sur deux, on passe en pas entier. Le compteur est incrémenté de 1 ou de 2, au choix.
Le compteur est un octet dont on ne garde que les trois derniers bits, il tourne sur 8 valeurs entre 0 et 7 (équivalent à un modulo 8).
A chaque passage, la commande "lookup" scanne les valeurs mémorisée et sélectionne la  combinaison  correspondante à la valeur du compteur cpt pour alimenter les bobines par la variable Moteur.
- case < 123, fonctionnement identique, mais le compteur est décrémenté, les combinaisons sont lues à l'envers, et le moteur tourne dans l'autre sens.
 

Vidéo de demo du code ci-dessus:
 



Créer un site
Créer un site