Le secteur est une idéalement sinusoïde de 230 VAC d'amplitude +10% -20%. La valeur crête maximale est donc de 357 Volts.
Le secteur est pollué principalement par
Il existe donc une zone "tranquille" à plus ou moins 400 µs
autour du passage à zéro. Cette zone dure 800 µs et a une récurrence de
10 ms. Le secteur a, dans cette zone, une vitesse de variation de 102 V/ms (-20,
+10).
Si on veut détecter le passage à zéro très précisément (par exemple dans le
cas d’un modem X10, ou d'un gradateur de précision), il faut donc la
détecter de façon précise (directement sur le secteur) avec un dispositif :
Le principe est d'alimenter l'entrée d'un circuit logique (trigger de Schmitt),
ou la base d'un transistor, directement par la phase du secteur au travers d'une
résistance.
Dans le cas d'un transistor, avec
un gain Béta de 250 minimum, et un courant de collecteur de 0.5 mA maximum,
il suffit d'un courant de base de 2µA pour activer le dispositif. Cette
valeur correspond à une tension de 4 V avec une résistance autour de 2000 kOhms
(à réaliser avec 2 résistances de 1MOhms pour respecter
la tenue en tension de ces composants), et donc un instant de commutation de
l'ordre de 10 µs avec une très bonne précision et répétabilité. Par contre,
le courant base va suivre la progression du secteur pour aller plafonner à une
valeur élevée sans autre protection qu'une résistance série. Le transistor va
donc être largement saturé et il devra supporter ce type de surcharge.
En utilisant un triplet de transistor, on a un signal symétrique autour
du zéro.
Dans le cas
d'une entrée d'un circuit logique de type CMOS ou HCMOS, le courant consommé
peut être considéré comme nul vu les vitesses faibles de variation de la tension
secteur.
La résistance série est dimensionnée par le courant maximum supportable
par les diodes de protection à l'entrée du circuit logique et
par le passe bas auquel elle participe si on ajoute un condensateur. La valeur
minimale est de plusieurs centaines de kOhms, et il faut prendre en compte la
capacité parasite d'entrée (5pF) qui peut contraindre la valeur
maximale.
Une telle détection n'est pas symétrique. Si le neutre secteur est au Vdd, alors la détection va monter (front montant) lors que le secteur passe le point Vdd-Vth soit -3V, 30µs avant le passage zéro. C'est parfait, sauf que le front opposé (front descendant) va aussi être à -3V, soit là 30µs après le passagage à zéro. De plus les seuils peuvent être très différents si l'entrée est un trigger de schmidt, ce qui renforce encore cette dissymétrie. Ce montage peut être utilisé avec un microcontroleur qui peut, par logiciel, compenser ces décalages.
Cette astuce permet de centrer le pulse de détection du passage à zéro. Cela requiert 2 circuits de détection, un pour détecter en amont de l'arche positive, et l'autre pour détecter en aval. Le passage à zéro positif sera connu avec le front montant de D2, le passage à zéro suivant serra connu avec le front descendant de D1.
Seuil
montant D2 = (Vih-Vcc)*(1+R2/R1) |
Avec des seuils à 2.5V et (R1=R5=100k et R2=R3=220k et R4=68k),
on a deux signaux dont les fronts montants et descendants sont symétriques par
rapport au passage à zéro, à +/-120µs. L'impulsion résultante
(avec une porte ou exclusif) fait donc 240µs, pile centrée sur le passage
à zéro (confere note d'application ST). Dans le cas de seuils non symétriques,
ce montage n'est pas facile à régler, la seconde version est plus
simple et directe car chaque seuil est réglable indépendemment
de l'autre :
La capacité parasite présente à l'entrée du circuit, ou bien rajoutée sciemment pour filtrer les parasites va introduire un déphasage, et donc un retard qui est égal tout simplement à la constante RC ainsi créée, avec R la résistance équivalente au point de la capacité. Ainsi une capacité de 5pF avec une résistance équivalente de 2Mohms va provoquer un retard de 10µs.
Le courant parasite entrant ou sortant de la broche IO n'est pas neutre, et provoque un décalage des seuils égal à Ib * R2 ou Ib * R3 ; en considérant un courant parasite de 0.5µA (spec à +/- 1µA), et R2=2MOhms, on provoque un décalage de 1V soit 10µs.
Le problème avec ce montage est qu'on
utilise 2 entrées, avec des seuils différents, pas forcément
corrélés d'ailleurs.
Ce genre de montage peut être amélioré si le microcontrolleur peut passer rapidement une broche de l'entrée à la sortie.
Seuil
(Qoff) = Ib*R2 + Vth - Vcc |
Ainsi, on utilise qu'une seule entrée de détection D, et on modifie
avec une sortie le seuil de cette entrée en passant la sortie Q à
zéro ou en la laissant flottage (broche en entrée). Un tel changement
doit être fait au moment où on est sûr qu'on n'attend pas
de seuil, par exemple au milieu de l'arche.
On peut aussi rajouter une capacité en // sur R1, de valeur C(1+R2/R1), pour filtrer de la même façon sur les fronts montants (R2.C) et descendants (R1//R2.C').
On voit sur cet oscillogramme le comportement du comparateur lors du passage du seuil montant, avec Q en entrée. Puis 130µs après, on met Q en sortie à Zéro. L'effet est immédiat sur la tension D qui chute.
Il est donc important d'hiniber toute détection de seuil sur D pendant
la transition sur Q, et même un peu après.
RC |
Atténuation @ 100 kHz |
déphasage @ 50 Hz |
50 Hz +/- 10% (2 MOhms et 1.5 nF) |
1/200, -66 dB |
2.5 µS +/- 150 µs |
500 Hz +/- 10% (2 MOhms et 150 pF) |
1/200, -46 dB |
317 µs +/- 30 µs |
5 kHz +/- 10% (1 MOhms et 27+5 pF parasite) |
1/20, -26 dB |
32 µs +/- 3 µs |
50 kHz +/- 10% (630 kOhms et 5 pF parasite) |
1/2.2, -6.8 dB |
3.2 µs +/- 0.3 µs |
La meilleure combinaison est située entre 500 Hz et 5 kHz, par exemple 1 MOhms
et 100 pF provoquant 100µs de retard.
L'opto est alimenté au travers de 2 résistances (pour garantir une tenue en tension supérieure à 360V) de 150 kOhms. Le courant dans la LED de l'opto coupleur atteint la valeur minimale de100 µA à 400 µs et maximale nominale de 1.2 mA.
Le LED a naturellement un seuil de l'ordre de 1.6 V, ce qui facilite l'immunité du dispositif de détection du zéro à tensions HF présentes autour du zéro.
La LED peut accepter un courant pic d'une vingtaine de mA, cela correspond à des sur tensions de l'ordre de 6 kV.
Par contre,
le coefficient de transfert en courant d'un opto coupleur est un paramètre très
variable et il influe directement sur l'instant de détection.
Le courant dans la LED de l'opto coupleur varie continûment de 0 à 1.2 mA.
La fenêtre à détecter (+/-400 µs) correspond à un courant dans la LED
de 100 µA.
La vitesse de variation de ce courant est faible, de l'ordre de 250 µA/s.
On a le choix entre des opto coupleurs à simple LED avec un pont redresseur
externe, ou à double LED tête bêche, spécialement prévus pour ce genre d'application.
Le premier choix assure une parfaite symétrie du créneau de détection par rapport
au zéro secteur. Le second est moins cher et moins encombrant mais peut amener
une dissymétrie car les coefficients de transferts ne sont pas garantis égaux
selon les 2 LED.
Les opto coupleurs peuvent être classés en 3 catégories
courant LED optimal (maximum du coefficient de transfert en courant CTR) |
faible (0.5 mA) |
moyen (1 à 2 mA) |
fort (>10 mA) |
vitesse |
faible |
moyenne |
élevée |
référence typique |
6N139 |
6N138 |
6N135/6 |
Il est illusoire d'imaginer disposer, à cause des dispersions importantes des
opto coupleurs, d'un créneau précisément calé sur la sinusoïde secteur. L'erreur
sur le positionnement du créneau pourra être de l'ordre de plusieurs centaines
de µs.
Malgré tout, il faut trouver un dispositif qui permettent au micro contrôleur
de connaître avec précision l'instant de début de la fenêtre de transmission.
On
peut y arriver facilement si le créneau de détection de l'opto coupleur est,
par design, symétrique par rapport au passage à zéro. Dans ce cas, il suffit
de mesurer la largeur du créneau, de calculer la moitié de cette valeur et on
a la position précise du passage à zéro même si la largeur du créneau varie
fortement.
On suppose qu'il existe un timer 8 bits qui doit tourner à une vitesse inférieure
à 25600 Hz pour éviter de déborder en moins de 10 ms. La valeur la plus proche
est 15625 Hz (1 MHz prédivisé par 64). Le timer doit donc tourner entre 98 et
255, avec un pas toute les 64 ms.
On suppose qu'une interruption va se déclencher sur le front descendant du créneau.
ITEXT push acc
si mode=0 then
clr acc
loop inc acc
(nop) ; autant de nop pour éviter de faire déborder acc
; l'idéal étant une durée de boucle de 8 uS (soit 2 ms max)
jz acc,erreur ; gestion du time out
jnb EXT_PIN,loop
sr acc ; acc=acc/2
mov toffset,acc ; toffset contient le temps/8 microsecondes
mode=1
reti
si mode=1
mov acc,timer
else
reti
erreur reti ; erreur de débordement acc