Pilotage d'un moteur à courant continu par MLI 1. ELEMENTS DE COURS Objectif : Expliquer comment s'effectue la commande d'un moteur à courant continu afin de contrôler son sens de rotation et sa vitesse. 1.1. PRINCIPE DE FONCTIONNEMENT D’UN MOTEUR A COURANT CONTINU A AIMANTS PERMANENTS Un moteur à courant continu permet de convertir une énergie électrique en une énergie mécanique utile. Il est constitué d'une partie fixe, stator ou inducteur composé d'aimants permanents (pôles) chargés de générer un flux magnétique ; et d'une partie mobile, rotor ou induit, composé d'un bobinage alimenté à ses extrémités (collecteur) par une tension continue U. La variation de vitesse d'un moteur à courant continu : 1.1.1. Mise en situation La variation de vitesse d'un moteur à courant continu est obtenue en faisant varier la valeur moyenne de la tension d'alimentation de l'induit U. Cette dernière est obtenue en appliquant une tension rectangulaire d'amplitude Û constante et de rapport cyclique α= tH/T variable. Dans ce cas, la valeur moyenne <U> = Û x α. Cette commande s'appelle la Modulation de Largeur d'Impulsion (MLI ou PWM pour Pulse Width Modulation). 1.1.2. Modulation « numérique » Clk 00 Compteur binaire sur n bits Mot binaire de valeur image du rapport cyclique de sortie 01 02 … 00 01 n U m Comparateur nu Signal MLI La MLI est obtenue à la sortie d'un comparateur numérique, qui compare un mot binaire issu d’un compteur générant un cycle continu de comptage avec un mot binaire réglable. 1.2. LA VARIATION DU SENS DE ROTATION D'UN MOTEUR A COURANT CONTINU : Pour modifier le sens de rotation d’un moteur à courant continu, il suffit d’inverser l’alimentation à ses bornes (induit). La structure permettant de réaliser cette inversion est appelée « pont en H ». Page 1 sur 8 1.2.1. Principe de fonctionnement du pont en H Le pont en H peut être symbolisé par une structure à quatre interrupteurs ouverts au repos (voir fig1). Dans ce cas, la tension aux bornes du moteur est nulle. Pour mettre en rotation le moteur il suffit de fermer un couple d’interrupteurs (voir fig2) et de laisser les deux autres au repos. Le moteur est donc alimenté avec la tension UM=VCC. Pour modifier le sens de rotation, il suffit de permuter le couple d’interrupteurs fermés et ouverts (voir fig3). On aura donc UM= - VCC. 1.2.2. Structure autour de transistors Les transistors vont assurer la fonction des interrupteurs et fonctionneront en saturé/bloqué. Ainsi en bloquant un couple de transistor et en saturant l’autre, on établit une tension UM aux bornes du moteur, dont on change le signe en modifiant les couples saturés/bloqués (voir fig4 et 5). Les diodes placées entre émetteurs et collecteurs des transistors jouent le rôle de diodes de roue libre (DRL). Elles permettent de protéger les transistors en devenant passantes lorsque ces derniers sont tous bloqués et qu’il faut évacuer le courant IM de l’inductance du moteur. 1.3. GENERATION DU SIGNAL MLI PAR LE TIMER DE L'AT9S8535 1.3.1. PREPARATION On désire piloter le moteur à l’aide du générateur de signal MLI (PWM) intégré au timer1 de l’AT90S8535. Seule la MLI (PWM) associée au timer 1 sera étudiée ici. Le signal MLI sera fourni par la broche OC1B La MLI sera configurée en mode 10 bits. L’horloge système CK possède une fréquence valant 4MHz et les bits de commande non utilisés dans cette application seront positionnés à « 0 ». Page 2 sur 8 Travail à faire : 1. Sur le document réponse 1, compléter l’Initialisation des ports A, C et D. 2. Combien de « timer » possède le microcontrôleur AT90S8535 ou ATmega8535. (préciser les caractéristiques principales). 3 timers 2 de 8 bits et 1 de 16 bits 3. Un timer est composé d’un compteur. Préciser le fonctionnement d’un compteur binaire. Un compteur est composé de bascules et s’incrémente à chaque impulsion active. 4. Un timer est composé de registre. Préciser le fonctionnement d’un registre. Un registre est une mémoire interne au µC de 8 bits 5. Quel est le rôle d’un comparateur binaire. Comparer 2 nombres binaires (N1<N2, N1>N2 ou N1=N2) 6. Comment sont nommés les registres de contrôle du timer1. TCCR1A et TCCR1B 7. Comment est nommé le registre de comparaison du timer1. OCR1A 8. On désire utiliser la fonction PWM du timer (10 bits). Préciser l’état des bits1 et 0 du registre de commande TCCR1A. (compléter le document réponse 2). TCCR1A :1er registre de contrôle du timer 1. PWM11 0 0 1 1 PWM10 0 1 0 1 Mode de fonctionnement du timer1 Mode normal (Non PWM) PWM 8 bits PWM 9 bits PWM 10 bits PWM 10 bit PWM11 = 1 PWM10 = 1 Adresse $2F ($4F) Bit 7 COM1A1 Bit 6 COM1A0 Bit 5 COM1B1 Bit 4 COM1B0 Bit 3 ------- Bit 2 -------- Bit 1 PWM11 Bit 0 PWM10 1 1 9. Quel est la valeur maximale et minimale du compteur TCNT1. TCNT1max=1023, TCNT1min=0 10. En déduire la valeur de la fréquence du signal PWM. (fréquence de l’horloge du système STK200 à 4 MHz). Compléter le document réponse 4 (valeur de CLK). Résolution PWM 8 bits 9 bits 10 bits Valeur maxi compteur $00FF (255) $01FF (511) $03FF (1023) Fréquence FTCK1/510 FTCK1/1022 FTCK1/2046 Fréquence de l’horloge du signal MLI = (4 000 000)/2046 = 1955Hz 11. On utilise la sortie OC1B du microcontrôleur (µC). Sur quel port et quel bit se trouve cette sortie (voir schéma du STK200). La sortie de OC1B est sur PD4 Page 3 sur 8 12. La sortie OC1B du µC est en mode PWM normale. On n’utilise pas OC1A du µC. Indiquer l’état des bits 4 à 7 du registre TCCR1A (compléter le document réponse 2). COM1X1 0 0 1 1 COM1X0 0 1 0 1 Type de PWM PWM non active PWM non active PWM normale PWM complémentée On travaille sur OC1A COM1A1 = 0 COM1A0 = 1 COM1B1 = 1 COM1B0 = 0 Adresse $2F ($4F) Bit 7 COM1A1 Bit 6 COM1A0 Bit 5 COM1B1 Bit 4 COM1B0 0 1 1 0 PWM désactivée PWM normale sur OC1B Bit 3 ------- Bit 2 -------- Bit 1 PWM11 Bit 0 PWM10 1 1 13. En déduire la valeur hexadécimale du registre TCCR1A (compléter le document réponse 1). Bit2 e 3 à 0 TCCR1A = 63h 14. On ne met pas en fonction le réducteur de bruit. On n’utilise pas l’entrée ICP. Le timer1 est en comptage continue jusqu’à la capacité maximale. On utilise l’horloge du système pour compter. Compléter le document réponse 3. - ICNC1 : Ce bit lorsqu’il est positionné à 1, met en fonction le réducteur de bruit qui permet d’éviter la prise en compte de parasites comme fronts actifs. - ICES1 : Sélection du type de front actif. Si à 1 : front montant, Si à 0 : front descendant. Lorsqu’un front actif se produit sur l’entrée ICP, le contenu du compteur TCNT1 est transféré dans le registre de capture ICR1. Le bit CTC1 définit le mode de fonctionnement du compteur TCNT1 : 0 : Comptage en continu jusqu'à la capacité maximale ($0000 - $FFFF), puis le cycle recommence CS12 0 0 0 0 1 1 1 1 CS11 0 0 1 1 0 0 1 1 CS10 0 1 0 1 0 1 0 1 Source d’horloge du compteur Aucune : Le compteur est stoppé Horloge système (CK) Horloge système (CK) / 8 Horloge système (CK) / 64 Horloge système (CK) / 256 Horloge système (CK) / 1024 Broche T1, active sur front descendant Broche T1, active sur front montant TCCR1B :2eme registre de contrôle du timer 1. Adresse $2E ($4E) Bit 7 ICNC1 Bit 6 ICES1 Bit 5 ------- Bit 4 ------- Bit 3 CTC1 Bit 2 CS12 Bit 1 CS11 Bit 0 CS10 0 0 0 0 0 0 0 1 15. En déduire la valeur hexadécimale du registre TCCR1B. (compléter le document réponse 1). TCCR1B = 01h Page 4 sur 8 Si l’on considère à l’instant t=0 le compteur à « 0 » (donc N1=0) et OCR1A à 30010 (12C16). A chaque impulsion de CLK le compteur s’incrémente. 16. Calculer le temps (t1) ou N2>N1. En déduire l’état de la sortie OC1B. Si Si Si Si OCR1A OCR1A N2 N2 > TCNT1 < TCNT1 > N1 < N1 OC1B = 1 OC1B = 0 OC1B = 1 OC1B = 0 Mode PWM Normale t1 = 300/(4 000 000)=75µs (OC1B = 1) 17. Lorsque t1 est atteint le compteur continue à s’incrémenter jusqu’à la valeur maximale (1023) puis se décrémente jusqu’à la valeur minimale et ainsi de suite. Calculer le temps ou N2<N1. (1023-300)*2/(4 000 000)= 361.5 µs 18. Compléter le chronogramme du document réponse 4. En déduire T1 et T. T1 = 2*t1 = 150µs T = 150 + 361.5 = 511.5µs fMLI = 1/511.5µs = 1955Hz 19. Calculer le rapport cyclique α. α = 150/511.5 = 0.29 20. Saisir et compiler le programme du document réponse 1. 21. Flasher le µC du STK200 et visualiser sur l’oscilloscope le signal MLI. 22. En appuyant sur le bouton PD1 vérifier T1, T et le rapport cyclique α déterminé précédemment. 23. Mesurer le rapport cyclique du signal lorsque l’on appuie sur PD0, PD2 et PD3. αPD0 = 50/511.5 = 0.09 αPD2 = 256/511.5 = 0.5 αPD3 = 511.5/511.5 = 1 24. Préciser le rôle du code « ~PIND & 0b00001111 ». 0b00001111 est un masque pour isoler PD0, PD1, PD2 et PD3. Page 5 sur 8 Schéma simplifié du STK 200 Page 6 sur 8 Document réponse 1 #include <avr/io.h> //Initialisation des ports void init_ports(void) { DDRC = 0xFF; //port C en sortie (A COMPLETER) DDRA = 0x00; //port A en entrée (A COMPLETER) DDRD = 0xF0; //PD4 à PD7 en sortie ; PD0 à PD3 en entrée (A COMPLETER) } void init_MLI(void) { TCCR1A= 0x63; // (A COMPLETER) TCCR1B= 0x01; // (A COMPLETER) } //Programme principal void main(void) { init_ports(); init_MLI() ; while(1) { switch((~PIND & 0b00001111)) { case 0x01: OCR1A=100;break; case 0x02: OCR1A=300;break; case 0x04: OCR1A=512;break; case 0x08: OCR1A=1023;break; default : OCR1A=0 ; } } } Document réponse 2 TCCR1A Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 0 1 1 0 0 0 1 1 Document réponse 3 TCCR1B Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 0 0 0 0 0 0 0 1 Page 7 sur 8 DOCUMENT REPONSE 4 CK (Horloge système) Synoptique du module timer 1 en mode PWM Sélection source d’horloge et pré-division Broche T1( PB1) CLK Compteur TCNT1 sur N bits N1 Comparateur N bits N2 Bits CS10, 11,12 du Registre TCCR1B Registre OCR1x A compléter N2 > N1 = 1 OC1x COM1x1 COM1x0 Du registre TCCR1A REMARQUES : - x est à remplacer par A ou B selon que la sortie utilisée est OC1A ou OC1B. - N est le nombre de bits de la MLI, il est sélectionné par les bits PWM11 et PWM10 du registre TCCR1A N1 (TCNT1) N1max Chronogrammes à compléter N2 (OCR1A) = 300 0 N2 > N1 t1 t T1 T 1 0 t OC1B 1 0 t Page 8 sur 8