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