pas à pas
En micro pas
Les différents moteurs
d’asservissement
• Les moteurs DC à balais
• Réluctance variable
Rotor à encoches en fer doux se positionnant dans la direction de la plus faible réluctance.
Couple faible, bonne résolution, pas couple résiduel moteur hors tension.
• Hybride
Deux rotor à encoches en fer doux reliés par un aimant permanent.
Couple élevé, très bonne résolution, faible couple résiduel moteur hors tension.
• Enroulements
Deux enroulements par phases: commande unipolaires, électronique simple, couple faible.
Un enroulement par phase : commande bipolaire, pont en H, couple fort.
La commande
• Principe:
– alimenter successivement les phases, si possible en courant.
• Partie logique:
– CI combinatoire
– CI Spécialisés
– µ contrôleurs
• Partie puissance
– Composants discrets (Bip/Mos résistance limitation courant)
– CI interface (Ponts en H intégrés, avec PWM, CNA....)
Pas/demi pas/quart de pas
taratata
• Pas entier :
– Un seul enroulement alimenté à chaque pas
• Les fabricants
– Alegro (le spécialiste en CNA sinus)
– Fairchild
– Mitsubishi
– NS
– PMD (Performance Motion Devices) ( produits très spécifiques )
– ST
Exemple de circuit de commande
• Cahier des charges
– Commande de moteur bipolaire
– 3A 30V
– Commande pas entier à huitième de pas
– Vitesses très lente (qqs µm/min)
– Affichage de la vitesse de translation
– Interface RS232
Choix des circuits
• Pour la partie commande :
– µ contrôleur pour gérer l’interface, le moteur,
l’affichage
• 4+7+3 sorties cmd afficheurs et pts décimaux
• 2+2+2 entrées butées, poussoirs, sélection vitesse
• 2*4 + 2 bits CNA et direction
30 E/S + RS232 = 16F877
• Pour la partie puissance :
– Pont en H avec CNA 4bits intégré
LMD18245 National semiconductor
Présentation du LMD18245
• 3A, 55V DMOS Full-Bridge Motor Driver
Schéma général
Bts cmd
Buttées
#6
#10
Affichage 4digits
#14 16F877 2*LMD18245
7 segments
#2
MAX232
Code de commande moteur
• Rotation des phases et valeurs du courant dans
un tableau de constantes
– Par exemple en pas entiers phase A
0b00001111
0b00000000
0b00001111
0b00000000
• A chaque interruption timer on avance d’un pas
dans le tableau modulo 4,8,16 ou 32
Code de commande moteur
• Fonction avance/recule d’un pas
void step(char dir)
{
static int16 pos = 0;
int16 steps,indice;
steps= microstep<<2;
// il y a 4 temps pour un pas entiers, 8 pour 1/2pas...
indice = pos+steps-4;
// calcule l’indice ou trouver la constante dans le tableau petit complication du au fait qu’il n’y
a qu’un tableau de 60 valeurs
PORTD=(PD[indice]);
PORTB=(PB[indice]);
// envoie les valeurs aux deux DAC des pont en H
}
Code d’affichage de vitesse
• L’affichage est multiplexé
• Les valeurs correspondant aux segments
allumés pour chaque chiffre sont stockées
dans des tableaux de constantes
• Opération en deux temps
– Calcul de la valeur de chaque digit
– Affichage de ces valeurs
Code d’affichage de vitesse
• Calcul des valeurs des 4 digits
anciennne_valeur=abs(valeur);
reste=anciennne_valeur;
for (i=0;i<4;i++) //calcul des quatre
{ //digits par division successives
digit[i]=reste/diviseur[i]; //par 1000 100 10 1
reste = reste-(digit[i]*diviseur[i]); //et calcul du reste
}