Une application avec un moteur pas-à

Download Report

Transcript Une application avec un moteur pas-à

Une application avec un moteur
pas-à-pas, un PIC et le langage C
Par: André Théberge
Le 2 Mai 2006
Agenda
 Théorie du
moteur pas-à-pas (stepper motor)
Le circuit de drive, et l’interface au PIC
La sous-routine en langage C
Une application concrète: la tête à diviser
électronique
Questions
Introduction au moteur
 Le
moteur pas-à-pas se distingue du moteur
conventionnel par:
4
ou 6 fils au lieu de 2.
 Une multitude d’enroulements et de pôles
 La capacité de motion angulaire avec précision.
 En
appliquant la bonne séquence d’impulsion
sur les enroulements, on peut faire tourner le
moteur dans le sens-horaire ou anti-horaire et
aussi contrôler sa vitesse de rotation.
Un exemple de moteur
La rotation du moteur
Enroulement 1a 1000100010001000100010001
Enroulement 1b 0010001000100010001000100
Enroulement 2a 0100010001000100010001000
Enroulement 2b 0001000100010001000100010
Unipolaire vs. Bipolaire
Unipolaire
utilise 5 ou 6 fils, un ou 2 commun
Bipolaire utilise 4 fils
Autres types de moteurs
Moteurs à
réluctance variable
Moteurs bi-filaires
Moteur multiphase
Pour plus d’informations:
http://www.cs.uiowa.edu/~jones/step/types.html
http://www.doc.ic.ac.uk/~ih/doc/stepper/
Caractéristiques de notre
moteur exemple:
Unipolaire, 6
fils
200 pas, chacun de 1.8 degrés
Chaque enroulement: 10 ohms, 8V DC
Couple (Torque ) suffisant pour entraîner la
charge (Tête à diviser)
Circuit de drive et interface au
PIC
1er

design: utiliser 4 x TIP-31
Ic=3A, Vce=1.2V et hfe=20
Circuit de drive et interface au
PIC
1er

design: utiliser 4 x TIP-31 Ib=375mA !!!
Ic=3A, Vce=1.2V et hfe=20
2ième
design: utiliser 4 x TIP-121
Ic=5A,
Vce=2V @ Ib=12mA, hfe=1000
La routine ‘drive_stepper’ en C
BYTE const POSITIONS[4] = {0b1000, 0b0010, 0b0100, 0b0001};
drive_stepper(BYTE speed, char dir, int32 steps) {
static BYTE stepper_state = 0;
int32 i;
for(i=0; i<steps; ++i) {
delay_ms(speed);
set_tris_c(0xf0);
port_c = POSITIONS[ stepper_state ];
if(dir!='R')
stepper_state=(stepper_state+1)&(sizeof(POSITIONS)-1);
else
stepper_state=(stepper_state-1)&(sizeof(POSITIONS)-1);
}
}
Application: la tête à diviser
PIC
utilisé: PIC16F876, 28 broches
Moteur branché (via driver) sur PC0-PC3
LCD 16x1 sur port B, multiplexé avec clavier 6
touches
2 alimentations séparées, une pour le moteur
(10-12VDC), une pour la carte avec PIC (9V)
Le PCB du contrôleur à PIC
Clavier de contrôle
Avance manuelle
et mise à zéro
Anti-horaire / ‘-’
Facteur de
Avance par
division du cercle
secteur:
(# dents pour un
360 deg. / facteur
engrenage)
Horaire / ‘+’
‘Enter’
La tête à diviser
 Utilisé
sur une fraiseuse pour tailler des engrenages:
 8 set de couteaux/pitch pour des profils de dents différents
 Le matériel à tailler est réduit au préalable au bon diamètre avec
un tour à métal et tenu dans un ‘chuck’ à trois mords.
 Le chuck tourne à 1/40 de tour, pour chaque tour de poignée
 En remplaçant la poignée par un moteur, on obtient 200*40 pas
pour chaque tour complet.
 Pour un engrenage de 80 dents ou moins, l’erreur angulaire est
de 1% ou moins (erreur maximale: 1/25 de degré), si on ne tiens
pas compte du back-lash
Une tête à diviser sur une
fraiseuse
La fraiseuse en opération
Exemple d’utilisation
Touche ‘Avance manuelle’
‘-’ ou ‘+’ pour faire tourner le moteur et l’enligner
‘enter’ pour remettre le compteur de pas à zéro

Touche ‘Facteur de
‘-’ ou
‘+’ pour choisir entre 1-255, ensuite ‘enter’
Touche ‘Avance par
‘-’ ou
division’
secteur’
‘+’ pour avancer ou reculer d’une dent
Exemple: Tailler un engrenage de
38 dents
 1ère
coupe
 8000/38 = 210.5263 -> 211 pas
 2ième coupe
 8000/38*2 = 421.0526 -> 421 pas – 211 = 210 pas
 3ième coupe
 8000/38*3 = 631.5789 -> 632 pas – 210 - 211 = 211 pas
 4ième coupe
… Le processus se continue jusqu’à 38 coupes
La somme de tous les pas = 8000
Revision du code en C
Stepper.c
Conclusion
 Présentation
des moteurs pas-à-pas
 Consulter les URLs suggérés
 Exemple de driver (hardware) avec des darlingtons.
 Exemple de sous-routine (software) en C
 Application pratique, qui permet de semi-automatiser la
fabrication d’engrenages