prof. Jacques Lepot
INTERFACER UN MICROCONTROLEUR: LES SORTIES
Commander une LED
C'est certainement la chose la plus simple à réaliser, voici le schéma
Si la led va à la masse comme à gauche, elle s'allumera si la sortie = 1 (vcc),
dans l'autre cas, la led va vers Vcc, elle s'allumera la sortie = 0 (gnd).

La valeur de la résistance est comprise entre 220ohm et 1Kohm.
Plus petite R = plus de luminosité mais plus de consommation.
Une led a besoin de 5 à 10 ma pour fonctionner, on utilisera la loi d'Ohm U=R.I. avec U la tension aux bornes de la résistance qui vaut Vcc - Vled. Vled dépend de la couleur de la led 1.5V pour une rouge et plus de 3V pour une bleue ou blanche.

Une sortie d'un ATMega ou d'un PIC peu fournir maximum 20mA

Le soft (ex bascom):

CONFIG PortX=&BNNNNNNNN
SET PortX.N
RESET PortX.N

Pour faire clignoter essayez ceci

DO
  TOGGLE PORTB.0
  Waitms 200
LOOP

ARDUINO

DigitalWrite(Sortie,HIGH);

PORTX = PORTB, PORTC ou PORTD

&BNNNNNNNN est la façon de représenter une constante binaire ex: &B00000111 = 7

Dans l'instruction CONFIG, les bits ou sont connectées les led seront à 1 pour indiquer une sortie. Le bit le plus à droite correspond à la patte PORTX.0
ex: &B00001100 -> lest pattes PORTX.2 et PORTX.3 sont des sorties, les autres sont des entrées

PortX est le nom du port ou est connectée la led, N le numéro du bit du port (ex PORB.0)

SET met le bit à 1 et la sortie correspondante à Vcc
RESET met le bit à 0 et la sortie correspondante à la masse
TOGGLE inverse l'état d'un bit chaque fois qu'il est exécuté

Si vous oubliez la pause, vous ne verrez rien, une boucle complète, sans la pause, s'exécute en moins de 500nS, soit 2.000.000 de boucles par seconde !



Commander un petit moteur à courant continu, rotation dans un seul sens

Les 20mA disponibles sur une sortie ne sont pas suffisant pour faire tourner même un très petit moteur. Il faut un minimum de 100mA, voire beaucoup plus. Pour cela on utilisera un transistor comme interrupteur.

Dans ce montage, le moteur peut être alimenté avec une tension supérieure au CPU, 12V ou 24V par exemple.

La valeur de la résistance est comprise entre 1Kohm et 10Kohm pour un transistor bipolaire, plus grande pour un MOSFET.

Le courant maximum (et donc la taille du moteur) dépend du choix du transistor, jusqu'à 1A,vous pouvez utilisez un BD139.

Pour des courants plus importants, utilisez un transistor MOSFET (exemple série BUZ, ) ou HEXFET (exemple série IRF) vous pourrez alors monter à plus de 50A!
Les transistor Mosfet et Hexfet chauffent beaucoup moins qu'un transistor bipolaire à courant égal.

Il est bien d'utiliser une diode à l'envers en parallèle avec le moteur.

Le soft (bascom):

Config PortB=&B00000001

SET PortB.0
wait 5
RESET PortB.0

ARDUINO

DigitalWrite(Sortie,HIGH);
DigitalWrite(Sortie,LOW);

 

C'est comme pour la led
Dans l'exemple le transistor est connecté au PORTB.0


Met le moteur en route
Attendre 5 secondes
Arrête le moteur.

 

mise en route du moteur
arrêt du moteur

Remarque, ceci ne permet que de mettre en route et d'arrêter le moteur, mais il tourne toujours dans le même sens.
Il est cependant possible de régler la vitesse. Pour cela on enverra des impulsions périodiques rectangulaires dont la largeur (le rapport cyclique) sera plus ou moins grande. La fréquence est de l'ordre de 1Khz à 100Khz et reste constante. Cette technique de contrôle de la puissance dans une charge s'appelle PWM Pulse Width Modulation

 

En A, le moteur tourne presque à sa vitesse maximum.
La valeur efficace est grande et voisine de l'amplitude, la puissance fournie est maximum.








En B, il tourne à demi vitesse.
La valeur efficace est de 50% de l'amplitude, la puissance fournie est 50%.





En C il tourne très lentement.
La valeur efficace est très petite, la puissance fournie est pratiquement nulle.

Le soft (bascom):

CONFIG ...
MOTEUR ALIAS PORTB.0
DIM T1 as BYTE, T2 as BYTE
T1=10
T2=100-T1
DO
 SET MOTEUR
 WAITMS T1
 RESET MOTEUR
 WAITMS T2
LOOP

ARDUINO

AnalogWrite(Sortie,Valeur);




ALIAS permet d'affecter un nom à un bit d'un port

En changeant la valeur de T1, on change la vitesse,
exercice: réalisez une accélération lente puis un ralentissement


Remarque, cette façon de faire est simple mais très mauvaise car elle mobilise le processeur pour cette fonction. On utilisera plutôt pour cela un TIMER (voir cours) qui produira les impulsions sans utiliser le processeur. Les ATMEGA (8-88-48-168) disposent de 3 timers indépendants



Avec Arduino, la gestion de ces timers est facilitée, une instruction suffit pour produire des impulsions PWM avec un rapport cyclique (donc la vitesse du moteur) choisi.

Voici quelques circuits qui remplacent les transistors, vous permettent de gagner de la place et simplifier le schéma si vous avez besoin de plusieurs sorties de puissance

Le L293D dispose de 4 sorties (drivers) de 600 mA chacune.
Le ULN2003, et toute la famille ULN en général, 7 sorties de 500 mA chacune

 

Commander un petit moteur à courant continu, rotation dans les deux sens
Pour pouvoir inverser le sens, il faut 4 transistors et 2 sorties du CPU. Voici un exemple.
Cela se nomme un PONT en H (H-BRIDGE)

 

si A=0 et B=1 alors Q4 est passant, Q1 est fermé, Q2 est passant, Q3 est fermé
le moteur tourne dans un sens avec la masse à gauche et Vmoteur à droite

si A=1 et B=0 alors Q4 est fermé, Q1 est passant, Q2 est fermé, Q3 est passant,
il tourne dans l'autre sens avec la masse à droite et Vmoteur à gauche

si A=1 et B=1 le moteur ne tourne pas (expliquer)

si A=0 et B=0 le moteur ne tourne pas (expliquer)

Ne vous amusez pas à réaliser ce montage, il existe en circuit intégré.

Par exemple le très célèbre L298 qui contient 2 ponts et peut commander 2 moteurs ou 1 moteur pas à pas.

On peut également régler la vitesse par de impulsions PWM comme expliqué ci dessus

Commander un relais
Le relais permet de commander tout type d'appareillage électrique de puissance à partir d'un microcontrôleur
Quel que soit le voltage ou le courant, alternatif ou continu il existe un relais approprié pour chaque cas. Cependant un relais est un dispositif "tout ou rien" mécanique relativement lent, il ne permet pas d'utiliser la technique PWM.

Avantages:

Le circuit de droite est entièrement séparé électriquement du circuit de gauche.
Ca fait du bruit (on sait que ca marche)

Inconvénients,

C'est de la mécanique,et ca s'use!
C'est gros.
C'est cher.
Ca consomme.
Ca fait du bruit.

Il existe des "RELAIS STATIQUES", non mécaniques, à bas de MOSFETs

La commande se fait de la même manière que le moteur à courant continu. Le courant à fournir au relais est de 100 à 200 mA.
La diode ( dite de roue libre) protège et diminue l'usure du relais provoquée par les étincelles entre les contacts à chaque ouverture. (Il y à une bobine dans un relais, si on coupe brutalement le courant que se passe t-il ? loi de Lenz)

Si il n'y à que 1 relais à commander, on utilisera un transistor, si il y en à plusieurs, on n'hésitera pas à utiliser un ULN2003.

Selon le relais la commande peut se faire en 5V avec l'alimentation de la carte ATMEGA, ou en 12V, il faut dans ce cas avoir une source 12V dans le montage.

Le soft , c'est comme pour la led ou le moteur, mais pas de PWM

Quelques relais

petit (reed) 240V 50mA
moyen, 250V 8A
on peu voir dedans !
gros, 1500V
Commander un appareil en 230V avec un triac
Une alternative au relais pour la commande en 230V alternatif,c'est le triac. Voici un exemple.


La résistance de 39 ohm et le condensateur de 10nf ne sont pas nécessaire pour des charges résistives, lampes ou résistance chauffantes. La résistance vers le CPU est à choisir comme pour une LED (470ohm).

Le MOC3041 isole entièrement le reste du montage du secteur.

Un triac se caractérise par son courant maximum et sa tension maximum. Pensez que pour du 230V AC, la tension crête à crête est de 600V ! Avec un triac de 10A vous pouvez commander une charge de 2000W.

MOC3041 moc   triacTRIAC BTA12

Les MOC3041, 3042 et 3043 sont des optocoupleurs à détection de passage par 0, il ouvrent le passage de la haute tension à l'instant ou celle-ci, qui est sinusoïdale, passe par 0V. Cela diminue les interférences électromagnétiques (EMI) dues à la coupure brutale d'une tension importante. Attention, cette particularité avantageuse pour une commande marche/arrêt, pose un problème si l'on veut réaliser une régulation d'intensité par découpage du signal alternatif à 50Hz, comme dans le cas d'un dimmer.

Dans le cas du dimmer, on remplace alors le MOC3041 par un MOC3021 (ou 3022 ou 3023), ceux-ci ne disposent pas de la détection du passage par 0 et on peut activer le triac à n'importe quel instant du cycle.


Cette animation de Scott Vickrey illustre le principe,on découpe la sinusoïde.
Comme on le voit, c'est l'instant ou l'on envoie l'impulsion qui fixe la forme du signal et donc sa valeur efficace.

On utilise dans le software une technique similaire au PWM, mais cette fois le programme doit se synchroniser sur la sinusoïde du secteur et faire la "mise à feux" du triac à un moment précis par rapport au début de la période de la sinusoïde.
Une impulsion de 1ms sur la gâchette suffit pour "ouvrir" le triac qui reste ouvert jusqu' à la fin de la 1/2 période. Il faut recommencer à chaque 1/2 période.

Pour synchroniser le programme, il est nécessaire d'introduire la sinusoïde du secteur sur une entrée du processeur, pour que le programme puisse détecter le début de chaque 1/2 période. Évidemment il est impossible de connecter une entrée du processeur au 230V. On utilisera une résistance > 1Mohm et une zener de 5V pour transformer la sinusoïde en un signal carré de 5V et de même période.
dimmer