• 12 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 16/05/2019

Décrivez l’objectif du contrôle d’un actionneur électromécanique

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Comment allumer une LED ?

Faire allumer une LED, c’est le moyen le plus simple et le plus efficace, pour un microcontrôleur, d’interagir avec un utilisateur. Dans cette section, regardons ensemble comment faire pour allumer de manière intermittente une LED qui se trouve sur une plateforme de développement microcontrôleur.

Le symbole électrique et quelques exemples des diodes électroluminescentes (LEDs) de couleurs différentes
Le symbole électrique, et quelques exemples de LED de couleurs différentes.

Pour illustrer cela, nous allons utiliser la plateforme Microchip Pic Kit 3. On aurait très bien pu utiliser tout autre plateforme de développement microcontrôleur. Ce qui aurait changé, c'est l'environnement de programmation et la syntaxe des différentes instructions.

La carte de développement Pic Kit 3 de la société Microchip
La carte de développement Pic Kit 3 de la société Microchip

Mais d’abord, comment fonctionne une LED ?

Ce dispositif est une diode qui émet de la lumière lorsque l'on applique entre l’anode et la cathode une tension directe supérieure à une tension de seuil. Quand elle est allumée, la résistance interne de la LED chute, et par conséquent le courant peut augmenter fortement. C’est pour cette raison que généralement, une résistance qui limite le courant est mise en série, comme l'illustre la figure suivante.

Le plus simple montage avec une LED
Le plus simple montage avec une LED.

Une LED standard consomme environ 20 mA pour une tension de seuil entre l’anode et la cathode de 2 volts environ. Ces valeurs de tension et de courant sont supportées par les portes de sortie des microcontrôleurs, sans avoir recours à des "buffers" supplémentaires.

Sur la plateforme Microchip Pic Kit 3, nous retrouvons 8 LED avec leurs résistances limitatrices de courant correspondantes. Les LED sont connectées au port D du microcontrôleur. Si on regarde la fiche constructeur (datasheet), on remarque que ce port peut avoir plusieurs fonctions, y compris des entrées-sorties TTL. Configuré comme sortie, chaque pin du port D peut délivrer 25 mA au maximum.

Carte de développement à microcôntroleur avec des LED
Carte de développement à microcôntroleur avec des LED

La plateforme de développement Microchip Pic Kit 3 peut être programmée grâce à l’outil MPLAB X ; sur la figure ci-dessous, vous apercevez le code en langage C qui sera détaillé dans les sections suivantes. 

#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#define _XTAL_FREQ 8000000
// BEGIN CONFIG
// CONFIG1H
#pragma config FOSC = INTIO67 // Oscillator Selection bits (Internal oscillator block, CLKOUT function on RA6, port function on RA7)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
#pragma config IESO = OFF // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)
// CONFIG2L
#pragma config PWRT = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = SBORDIS // Brown-out Reset Enable bits (Brown-out Reset disabled in hardware and software)
#pragma config BORV = 30 // Brown Out Reset Voltage bits (VBOR set to 1.8 V nominal)
// CONFIG2H
#pragma config WDTEN = OFF // Watchdog Timer Enable bit (WDT is controlled by SWDTEN bit of the WDTCON register)
#pragma config WDTPS = 32768 // Watchdog Timer Postscale Select bits (1:32768)
// CONFIG3H
#pragma config CCP2MX = PORTC // CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
#pragma config PBADEN = ON // PORTB A/D Enable bit (PORTB<4:0> pins are configured as digital I/O on Reset)
#pragma config LPT1OSC = OFF // Low-Power Timer1 Oscillator Enable bit (Timer1 configured for higher power operation)
#pragma config HFOFST = ON // HFINTOSC Fast Start-up (HFINTOSC starts clocking the CPU without waiting for the oscillator to stablize.)
#pragma config MCLRE = OFF // MCLR Pin Enable bit (MCLR pin enabled; RE3 input pin disabled)
// CONFIG4L
#pragma config STVREN = ON // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
#pragma config LVP = OFF // Single-Supply ICSP Enable bit (Single-Supply ICSP enabled)
#pragma config XINST = OFF // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))
// CONFIG5L
#pragma config CP0 = OFF // Code Protection Block 0 (Block 0 (000800-001FFFh) not code-protected)
#pragma config CP1 = OFF // Code Protection Block 1 (Block 1 (002000-003FFFh) not code-protected)
#pragma config CP2 = OFF // Code Protection Block 2 (Block 2 (004000-005FFFh) not code-protected)
#pragma config CP3 = OFF // Code Protection Block 3 (Block 3 (006000-007FFFh) not code-protected)
// CONFIG5H
#pragma config CPB = OFF // Boot Block Code Protection bit (Boot block (000000-0007FFh) not code-protected)
#pragma config CPD = OFF // Data EEPROM Code Protection bit (Data EEPROM not code-protected)
// CONFIG6L
#pragma config WRT0 = OFF // Write Protection Block 0 (Block 0 (000800-001FFFh) not write-protected)
#pragma config WRT1 = OFF // Write Protection Block 1 (Block 1 (002000-003FFFh) not write-protected)
#pragma config WRT2 = OFF // Write Protection Block 2 (Block 2 (004000-005FFFh) not write-protected)
#pragma config WRT3 = OFF // Write Protection Block 3 (Block 3 (006000-007FFFh) not write-protected)
// CONFIG6H
#pragma config WRTC = OFF // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) not write-protected)
#pragma config WRTB = OFF // Boot Block Write Protection bit (Boot Block (000000-0007FFh) not write-protected)
#pragma config WRTD = OFF // Data EEPROM Write Protection bit (Data EEPROM not write-protected)
// CONFIG7L
#pragma config EBTR0 = OFF // Table Read Protection Block 0 (Block 0 (000800-001FFFh) not protected from table reads executed in other blocks)
#pragma config EBTR1 = OFF // Table Read Protection Block 1 (Block 1 (002000-003FFFh) not protected from table reads executed in other blocks)
#pragma config EBTR2 = OFF // Table Read Protection Block 2 (Block 2 (004000-005FFFh) not protected from table reads executed in other blocks)
#pragma config EBTR3 = OFF // Table Read Protection Block 3 (Block 3 (006000-007FFFh) not protected from table reads executed in other blocks)
// CONFIG7H
#pragma config EBTRB = OFF // Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) not protected from table reads executed in other blocks)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
//END CONFIG
/*
*
*/
int main(int argc, char** argv) {
TRISDbits.TRISD7 = 0; //RD7 as Output PIN
TRISDbits.TRISD0 = 0; //RD0 as Output PIN
while(1)
{
PORTDbits.RD7 = 1; // LED ON
__delay_ms(50); // 1 Second Delay
PORTDbits.RD0 = 1; // LED ON
__delay_ms(50); // 1 Second Delay
PORTDbits.RD7 = 0; // LED OFF
__delay_ms(50); // 1 Second Delay
PORTDbits.RD0 = 0; // LED OFF
__delay_ms(50); // 1 Second Delay
}
return (EXIT_SUCCESS);
}

Vous remarquez notamment la partie Initialisation des différents registres du microcôntrôleur  (#pragma).  Dans la fonction principale  (int main()),  on va mettre à l’état haut  PORTDbits.RD7 = 1; et ensuite à l’état bas  PORTDbits.RD7 = 0;  la sortie 7 du port D.

Une fois que la transformation du code C en code machine est effectuée, le transfert du code dans la mémoire programme du microcontrôleur se lance automatiquement.

Interface de programmation du microcontrôleur
Interface de programmation du microcontrôleur

Une fois la programmation terminée, comme vous le constaterez si vous répétez le test, la LED connectée à la sortie D7, en haut à gauche, s’allume et s’éteint de manière intermittente.

Comment piloter un actionneur électromécanique ?

Prenons le cas extrêmement simple d’un moteur comme celui qui est utilisé pour faire vibrer un téléphone portable.  Plus précisément, nous allons faire tourner le moteur ROB-08449, ou tout autre moteur récupéré d’un vieux téléphone portable dont on ne se sert plus.

Si on regarde la datasheet de ce moteur, on remarque qu’on peut l’alimenter avec une tension continue qui peut varier de 2,3 volts à 3,6 volts. On voit également que le courant nécessaire pour le faire fonctionner dépasse les limites maximales qu'un port d'entrée/sortie du microcontrôleur peut fournir.

La figure ci-dessous montre le schéma électrique de connexion entre le moteur et la carte de développement du microcontrôleur, avec une résistance limitatrice de courant de base du transistor, et une diode en antiparallèle (ou de roue libre) avec un condensateur pour lisser l’effet inductif du moteur.  La résistance placée en série avec le collecteur sert à limiter le courant qui traverse le moteur.

Connection d'un petit moteur à courant continu, à la carte de développement à microcontrôleur
Connection d'un petit moteur à courant continu à la carte de développement à microcontrôleur.

Le code microcontrôleur est assez simple : premièrement, celui-ci permet de saturer le transistor quand la sortie 7 du port D est à l’état haut. Dans ce cas de figure, le transistor laisse passer le courant entre son collecteur et son émetteur, et implicitement, le courant passe à travers le moteur qui se met à tourner.

Après une seconde, la sortie 7 est mise à l’état bas, ce qui bloque le courant à travers le transistor ; par conséquent, le moteur s’arrête de tourner, et donc de vibrer.  Ce cycle de fonctionnement recommence après 10 secondes.

Partie principale du code pour alimenter sporadiquement le moteur à courant continu
Partie principale du code pour alimenter sporadiquement le moteur à courant continu.

Comment réguler la température d'un cumulus d'eau chaude?

Notre problème est de réguler la température de l’eau chaude à l’intérieur d’un cumulus, c’est-à-dire un ballon de réserve d’eau chaude. Nous disposons d’une résistance de puissance et d’une sonde de température. Et nous allons utiliser un microcontrôleur pour gérer ce petit système. En particulier, le principe de régulation d'eau chaude repose sur une phase de chauffe, qui est interrompue dès que l'eau a atteint une température élevée. Dès que cette température diminue en dessous d'une valeur seuil, une phase de chauffe reprend.

Cumulus d'eau chaude et synoptique fonctionnel électrique
Cumulus d'eau chaude et synoptique fonctionnel électrique.

Schématiquement, le microcontrôleur porte un code dont l’exécution doit créer la fonction de régulation de l’eau. Autrement dit, nous voulons activer la résistance de puissance, qui dissipera de la chaleur dans l’eau, et la température de l’eau va s’élever. Il faut arrêter la dissipation de chaleur quand la température de l’eau atteint une valeur acceptable, dite température de consigne. Ce sera le rôle du microcontrôleur.

Rôle du code du micro-contrôleur au sein du cumulus
Rôle du code du microcontrôleur au sein du cumulus.

La sonde de température délivre en général une tension proportionnelle à la température. Le microcontrôleur doit lire cette tension. Ensuite, le code doit décider si oui ou non il faut mettre la résistance de puissance en chauffe, à l’aide d’un signal binaire. C’est le microcontrôleur qui stoppera la chauffe quand la tension d’entrée atteindra une valeur seuil, et inversement remettra en chauffe si la tension devient trop basse.
 
L’algorithme est donc assez simple. La tension proportionnelle est d’abord transformée en grandeur numérique. Le microcontrôleur connaît la valeur numérique correspondant à la température maximale, et celle correspondant à la valeur minimale :

  • si la température de l’eau est basse, le code va activer la résistance de chauffe ;

  • sinon, le code compare la valeur de la température à la valeur maximale, et le cas échéant arrête la chauffe. 

Synoptique de la gestion de la chauffe d'un ballon d'eau chaude
Synoptique de la gestion de la chauffe d'un ballon d'eau chaude.

Notre propos concerne aussi le matériel. La sonde de température est par exemple une sonde résistive dite PT100, dont la résistance varie avec la température.

La connexion au microcontrôleur nécessite un circuit électronique appelé conditionneur du capteur, qui transformera la résistance en une valeur de tension qui lui est proportionnelle.

Interfaçage d'une sonde résiste de température
Interfaçage d'une sonde résistive de température.

Venons-en à la résistance de chauffe : le microcontrôleur ne peut pas fournir l’énergie dont a besoin la résistance de puissance pour chauffer l’eau. D’un côté, on parle de mW (microcontrôleur) et de l’autre de kW (résistance de chauffe). Le microcontrôleur ne peut donc fournir qu'un ordre binaire, tout ou rien,  vrai ou faux, ouvert ou fermé, à un dispositif qui sera en charge de connecter la résistance de chauffe à une source d’énergie adéquate. Le dispositif le plus simple est appelé un relais électro-magnétique, ou relais sec.

Interfaçage d'une résistance de puissance à un microcontrôleur
Interfaçage d'une résistance de puissance à un microcontrôleur.
Exemple de certificat de réussite
Exemple de certificat de réussite