Une application avec un moteur pas-à-pas, un PIC et le langage C Par: André Théberge Le 2 Mai...

Preview:

Citation preview

Une application avec un moteur pas-à-pas, un PIC

et le langage C

Par: André ThébergeLe 2 Mai 2006

AgendaAgenda

Théorie du moteur pas-à-pas (stepper motor)Le circuit de drive, et l’interface au PICLa sous-routine en langage CUne application concrète: la tête à diviser

électroniqueQuestions

Introduction au moteur 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ôlesLa 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 moteurUn exemple de moteur

La rotation du moteurLa rotation du moteur

Enroulement 1a 1000100010001000100010001 Enroulement 1b 0010001000100010001000100 Enroulement 2a 0100010001000100010001000 Enroulement 2b 0001000100010001000100010

Unipolaire vs. BipolaireUnipolaire vs. Bipolaire

Unipolaire utilise 5 ou 6 fils, un ou 2 communBipolaire utilise 4 fils

Autres types de moteursAutres types de moteurs

Moteurs à réluctance variableMoteurs bi-filairesMoteur multiphasePour plus d’informations:

http://www.cs.uiowa.edu/~jones/step/types.htmlhttp://www.doc.ic.ac.uk/~ih/doc/stepper/

Caractéristiques de notre moteur exemple:

Caractéristiques de notre moteur exemple:

Unipolaire, 6 fils200 pas, chacun de 1.8 degrésChaque enroulement: 10 ohms, 8V DCCouple (Torque ) suffisant pour entraîner la

charge (Tête à diviser)

Circuit de drive et interface au PIC

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

Circuit de drive et interface au PIC

1er design: utiliser 4 x TIP-31 Ic=3A, Vce=1.2V et hfe=20

2ième design: utiliser 4 x TIP-121Ic=5A, Vce=2V @ Ib=12mA, hfe=1000

Ib=375mA !!!

La routine ‘drive_stepper’ en C

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

Application: la tête à diviser

PIC utilisé: PIC16F876, 28 brochesMoteur branché (via driver) sur PC0-PC3LCD 16x1 sur port B, multiplexé avec clavier 6

touches2 alimentations séparées, une pour le moteur

(10-12VDC), une pour la carte avec PIC (9V)

Le PCB du contrôleur à PICLe PCB du contrôleur à PIC

Clavier de contrôleClavier de contrôle

Avance manuelle et mise à zéro

Facteur de division du cercle (# dents pour un

engrenage)

Avance par secteur:

360 deg. / facteur

Anti-horaire / ‘-’ Horaire / ‘+’ ‘Enter’

La tête à diviserLa tête à diviser

Utilisé sur une fraiseuse pour tailler des engrenages: 8 set de couteaux/pitch pour des profils de dents différentsLe 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éeEn 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

Une tête à diviser sur une fraiseuse

La fraiseuse en opérationLa fraiseuse en opération

Exemple d’utilisationExemple 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 division’‘-’ ou ‘+’ pour choisir entre 1-255, ensuite ‘enter’

Touche ‘Avance par secteur’‘-’ ou ‘+’ pour avancer ou reculer d’une dent

Exemple: Tailler un engrenage de 38 dents

Exemple: Tailler un engrenage de 38 dents

1ère coupe8000/38 = 210.5263 -> 211 pas

2ième coupe8000/38*2 = 421.0526 -> 421 pas – 211 = 210 pas

3ième coupe8000/38*3 = 631.5789 -> 632 pas – 210 - 211 = 211 pas

4ième coupe… Le processus se continue jusqu’à 38 coupesLa somme de tous les pas = 8000

Revision du code en CRevision du code en C

Stepper.c

ConclusionConclusion

Présentation des moteurs pas-à-pasConsulter les URLs suggérés

Exemple de driver (hardware) avec des darlingtons.Exemple de sous-routine (software) en CApplication pratique, qui permet de semi-automatiser la fabrication

d’engrenages

Recommended