Zero Crossing Detector

Nou dan. De afgelopen twee dagen weer een leuk simulatie projectje gehad om me mee bezig te houden. Wat is het plan?

Een uC gestuurde 0-doorgangsschakelaar die op de 0-doorgang een lichtnet relais stuurt (en daarmee ringkern trafo's van enkele honderden watts inschakelt).

De aansturing is een stand-by aansturing. Ik heb dus altijd Vcc (trafo+brugcell+elco+3.3v-switchertje) voorhanden zolang de stekker in het stopcontact zit.

Ik kwam al gauw die app-note van Atmel tegen (2 1M weerstanden in 'serie' met de AVR om de nuldoorgangen op te pakken. Probleem alleen met dit schakelingetje is dus dat de AVR niet galvanisch gescheiden is. Dus dat moet anders. De Vcc voor die AVR zou dan direct van het lichtnet moeten komen. Dat leek niet al te lastig totdat..

Ik wilde toepassen wat ik onlangs gelezen had, die nieuwe EU regelgeving dat een stand-by apparaat niet meer dan 1W vermogen mag opnemen zonder LED en niet meer dan 2W met indicatie LED. Dus, mijn hoofddoel was proberen het 240V deel van de schakeling zo zuinig mogelijk te maken.

Om van 240V een nette stabiele 3.3V te maken die een paar mA kan leveren zonder een transformator en ruim onder de 1W totaal te zitten viel niet mee. Nou eigenlijk.. dat kreeg ik niet voor elkaar. Ook doodzonde om (in verhouding) bijna 98% weg te stoken om direct vanuit het lichtnet een uC te voeden.

Nou.. 1+1+1=3. Wat was de uiteindelijke eis geworden?
-AVR moet gewoon gevoed worden met de 'always-on' Vcc uit de switcher en dus volledig galvanisch gescheiden zijn.
-0-doorgang puls moet een bekende voorsprong (in tijd) op de daadwerkelijke 0-doorgang hebben.
-0-doorgang circuit mag in verhouding tot die 1W max stand-by regelgeving niet noemenswaardig veel vermogen verstoken.

Om eeen verhaal dat een boekwerk begint te worden, kort te maken; na een avond of 2 in de sim lopen testen en uitdenken hoe ik nou al die items kon oplossen en dat is gelukt!

Met onderstaand schema:
http://www.serenity-dh.com/downloads/zerocross.png
0-doorgangsdetector met ~50mW verbruik

Alle onderdelen en hun waardes hebben een reden. Ik moet zeggen dat het concept van de werking erg leuk is, in acht nemend al die limieten die ik mijzelf en de schakeling gesteld had. Ik zal straks wel de scoop plots even posten en kort toelichten.

Al met al is dit met relatief weinig onderdelen een erg zuinige en naukeurige 0-doorgangsdetector geworden die galvanisch gescheiden is van je digitale logica :)

P.S. de IRF9620 fet is een beetje grof bemeten, TO-220. Maar hij heeft de juiste Vgon van -3.3v (mag ietsje meer/minder zijn). Dus deze kan nog worden vervangen door een kleinere fet die een 50mA piek kan hebben met ~ -3.3v Vgon.

En natuurlijk, op- en aanmerkingen welkom ;)
Een uC gestuurde 0-doorgangsschakelaar die op de 0-doorgang een lichtnet relais stuurt (en daarmee ringkern trafo's van enkele honderden watts inschakelt).

Dat is geen goed idee. Als je een trafo precies op de nuldoorgang inschakelt, gaat de kern gegarandeerd in verzadiging (of het blikpakket moet stevig overgedimensioneerd zijn), hetgeen zich vaak kenbaar maakt als een flinke knal.
Beter is het, de trafo in te schakelen op het ogenblik dat de netspanning een piek bereikt heeft. Storingen veroorzaakt dat niet - de zelfinductie v/d primaire wikkeling belet immers dat de stroom in korte tijd van 0 naar maximum gaat.

Een zuinige optocoupler kan je ook zo maken:
http://prosje.be/CO/Schemas/Opto-nuldoorgangsdedector.png
Deze geeft bij elke nuldoorgang een korte positieve puls.
Je kan ook varianten naar wens bedenken. Zolang je de 6N138 gebruikt, heeft de LED maar een minimum aan stroom nodig. Als je R2 hoger maakt --10k bv. mogen R1 en R1' ook het dubbele zijn.

[Aanvulling]
Lees ook dit boeiend topic even door.
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Dat is een nette opmerking over het inschakel moment voor transformators, als het beter is om dat op een piek te doen is dat een kwestie van aanpassen van de timer in de uC :)

Het schema wat je postte is inderdaad leuk eenvoudig van opzet, het enige dat zuiniger zou kunnen is het aansturen van de fotodiode. Die gaat nu uit voor een gedurende breedte rond de nul-doorgang maar is het meest van de tijd aan. Dat heb ik in mijn schema omgedraaid dat gedrag.

Ik wilde eigenlijk de eerste post updaten met de uitleg maar dat kan ik net zo goed hier doen:

Tijdens de positieve spanningszwaai (donker blauw, 240V sinus) wordt C1 geladen volgens een bepaalde RC tijd met R2 door D3. De condensator is zo gekozen dat de RC tijd voldoende is om de C tot de spanning van zener D1 te komen. De condensator kan tijdens het laden niet ontladen omdat de gate 0.7v boven de source van Q1 wordt gehouden tijdens de stijgende flank. Tijdens de dalende flank blijft de gate spanning (licht blauw, meting tussen Gate(probe) en Source (GND)) nog steeds op 20v, practisch net zo hoog als de source spanning doordat de condensator niet leegloopt. Hierdoor blijft de lading behouden, totdat de netspanning onder de zener spanning van D1 komt. Zodra die ~3.3v minder is dan de condensator spanning, ~20V, dan vliegt die gate open, met gevolg dat de condensator zich gestuurd ontlaadt over de fotodiode door R3 (Rood, stroom in mA (1uV=1mA)). Dit genereert aan de transistor zijde een hele nette interrupt puls met stevige flanken (Groen). De AVR reageert op 1/2 Vcc, dus rond de 1.6V. Vanaf dat moment tot de daadwerkelijke nul doorgang is dan 70uS, die is redelijk vast met een acceptabele tolerantie. Hell kort samengevat, is dit een pump 'n dump schakeling (lol). De C wordt met een klein stroompje geladen gedurende een tijd en dan op een gedefineerd punt voor de nuldoorgang ontladen in de fotodiode.

http://www.serenity-dh.com/downloads/zc00.png
Rood: De ontlaad stroom van C door de fotodiode, een piek van 22mA
Licht blauw: Vgs op Q1

http://www.serenity-dh.com/downloads/zc01.png
Groen: Uitgang, triggert ~70uS voor de 0-doorgang
Blauw: 240V netspanning

http://www.serenity-dh.com/downloads/zc02.png
Close-up van de 0-doorgang. Zie de onderstaande tabel

http://www.serenity-dh.com/downloads/zc03.png
Meetwaarden van de 2 cursors

Edit: Ik heb net je aanvulling bekeken en bedank je er voor, dat is zeker een interesant topic :) Ik herkende de verschijnselen vanwege inschakel tests die ik had gedaan met die ringkerns een lange tijd terug, die inschakeling lette niet op 0-doorgangstiming maar die bevatte alleen een inschakelvertraging met een voorschakelweerstand van 100 Ohm. Dat mechanisme laat ik wel bestaan, en daar komt dus deze 0-doorgangstimer bij.
Ik moet toegeven dat de flanken aan de uitgang van jouw nuldoorgangdetector er veel strakker uitzien dan bij mijn versie. Dat is logisch, als je bedenkt dat er bij mij een sinusspanning op de ingang staat.
Evengoed, als je het onderste uit de kan wil halen kan je nog steeds overwegen om een zuinige optocoupler in te zetten. De 6N138 heeft genoeg aan 0.5mA door z'n LED. Terug naar de tekentafel simulator, dus! :-)
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Juist! Dat was ook een stelling die ik had, de flanken moesten beter kunnen, ik had het alleen niet genoemd. Daarom vond ik het idee ook zo leuk, dat C'tje opladen en kortstondig toch voldoende stroom door de fotodiode om een fatsoenlijke flank te krijgen. Gebruikmakend van de eigenschappen van de FET, deze zonder extra componenten als 'stort klep' laten werken.

Ik zal eens kijken of die OC die je aangaf in de sim zit :) Ik ben wel benieuwd naar de opgaande flank, daarom had ik die bias weerstand van 100K naar de GND toegevoegd aan de optocoupler, de transistor basis sneller ontladen (of de pullup weer lager maken, maar kost weer meer stroom t.o.v. bias weerstand). En dat had dus weer een sterkere 'flits' nodig.

En ja, het onderste uit de kan halen was een doel, ik wilde wat uitdaging en kijken of ik iets kon bedenken dat aan gestelde eisen kon doen.

Vergeef me de post drift, ik ben best wel een beetje trots op dit schema'tje en dus wilde ik het wel delen met de rest van CO ;)

Edit: Die 6N138 zit niet in de simulator. Ik heb nu wel R2 op 470K, de C had nog voldoende tijd over om vol te laden dus die groter gemaakt :)
Magicbox, dat is een leuk schakelingetje.
Die gaat bij m'n voorraad schema's :)

Maar die 50mW klopt volgens mij niet.
Gedurende de hele negatieve periodehelft geleidt de zener en loopt er stroom door R2 en de zener.
Toch zonde ;)
ik gebruik ook een 1n138 voor mijn zero cross voor een licht dimmer project, alleen dan achter een travo.

http://robots-online.nl/foto/albums/electronica/demotica/v2/nuldetectie.png


http://robots-online.nl/foto/albums/electronica/demotica/v2/SL737842.JPG

en die ziet er dan zo uit.

stef
@Zonnepaneeltje:

Daar heb je gelijk in, ik realiseer me nu dat de berekening uitging van een halve gelijkrichter (in een oudere versie zat de een sper diode voor de weerstand) en niet van het gemiddeld vermogen nu de weerstand in beide richtingen geleidt.

Evenzogoed, als men een zuinigere optocoupler er in zou zetten, dan kan die R2 ook weer flink omhoog, de C kleiner en evenzo de fet (lagere gate capaciteit)omdat R2 groter word :)

Jammer dat ik tot dusver nog geen geschikte vervanging voor die OC in de sim heb gevonden om mee verder te prutsen haha.

@Stef:

Heb je geen last van faseverschuiving vanwege de capacitieve load C1?
Faseverschuiving op zich is geen probleem - dat kan je softwarematig bijstellen. Wat wel een probleem zou kunnen opleveren, is het feit dat de faseverschuiving afhankelijk is van het stroomverbruik.
Dat doet zich vooral gelden bij kleine trafo'tjes. Onbelast is de faseverschuiving haast nihil, maar als je ze flink belast krijg je een heel ander plaatje.
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Op 12 mei 2010 21:50:39 schreef MagicBox:


Jammer dat ik tot dusver nog geen geschikte vervanging voor die OC in de sim heb gevonden om mee verder te prutsen haha.


Gauw een breadbord kopen en die optocoupler van Pros erin prikken ;)
Dat kan wel eens mooi uitpakken.
Zero crossing detector voor het inschakelen van een aantal trafo`s die je vervolgens met een relais inschakelt?.

Zero crossing detector -> relais == faseverschuiving.

Hoe ga je dat oplossen?
1
De relais wordt gevoed met zijn eigen voedingkje. De trafo die de geschakelde 3.3V voedt, voed ook een 6V voor de relais.

Anyways, ik heb een nieuwe, definitieve versie! Na aanleiding van de op en aanmerkingen het schema en de werking verbeterd. Er zat weliswaar geen 6Nxxx in de sim maar wel 4Nxxx en heb er een 4N25 ingestopt. Die zijn ook erg zuinig.

Ik kan nu af met een 1.5MOhm serie weerstand en alleen energie verbruiken op de positieve flank ;) De Watt meter in het schema gezet en het verbruik komt op... jawel, 18.6mW nu.

De interrupt puls is nu wel veel korter, ~40uS breed, ~30uS trigger voor de 0-doorgang. Met de grotere serie weerstand is er in de laadtijd minder energie in de C te stoppen dus is er minder energie beschikbaar voor de trigger puls. Vandaar dat deze korter word. Ook voor de FET nog een geschikte grootte gevonden.

Al met all toch alles netjes uitgebalanceerd:

http://www.serenity-dh.com/downloads/zc10.png
Sine

Moderator

Tja, of je je druk moet maken om die paar mW ...

En wat Echo bedoeld is dat als je een mechanisch relais gaat gebruiken je sowieso te laat bent, die dingen hebben ook tijd nodig om aan te trekken.
Angaben sind wie immer ohne Gewähr.
Ah in dat opzicht, dat is een bekende vertraging waar rekening mee wordt gehouden bij het ontsteken van het relais. Het moment voor de interrupt maakt niet zo veel uit als die maar stabiel en bekend is, de actuele timing gebeurt door de microcontroller; die meet eerst de frequentie door een aantal pulsen te tellen; dan is het momentele timing bereik bekend en weet 'ie wanneer na de interrupt het relais bekrachtigd moet worden om op het gewenste tijdstip in te schakelen.

En Sine, je hebt wel gelijk hoor, dit is gewoon miereneuken om het maar zo te zeggen. Ik bedoel, geen haan die er naar kraait als ik niet aan die regelgeving voldoe als hobbyist. Het gaat gewoon om de uitdaging :)

P.S. Tijd om eens wat onderdelen te bestellen en binnenkort de bout eens op te stoken en dan maar zien of de realiteit de simulatie een beetje wil benaderen ;) Als het werkt, komt er ook een printje bij.

[Bericht gewijzigd door MagicBox op 13 mei 2010 13:06:55 (13%)]

hey,

heb zo net eventjes het schemaatje van pros opgebouwd en krijg nu dit op de scoop :)

http://robots-online.nl/foto/albums/electronica/demotica/v2/scoopzerocrossfinal.jpg

ga dit meteen mee nemen in het schema van me dimmer.
bedankt pros

stef
Sine

Moderator

@magic,

Als je doel is er een elektromechanisch relais mee te schakelen

Dan is het niet heel zinvol naar het inschakelmoment te kijken, die dingen zijn te 'random' om daar ook maar enig voordeel uit te halen.
Angaben sind wie immer ohne Gewähr.
Eigenlijk zeg je dat het voor een triac meer zin heeft, niet? In dat geval, de triac moet dan 1700VA schakelen. Hmm.. suggesties? Edit: dat is niet het rustvermogen, dat is bijna niets, maar het zijn wel flinke transformatoren.

[Bericht gewijzigd door MagicBox op 13 mei 2010 16:47:08 (28%)]

free_electron

Silicon Member

0-doorgangsdetector met ~50mW verbruik


220 volt / 270k .. iets minder dan 1 milliampere .. je hebt dus minstens 200mW aan je broek.

desondanks er daar een zener staat : die geleidt ook in de andere richting ... als je een diode in serie opneemt met je 270k weerstand halveer je de power.
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
Hallo F_E,

Eventjes doorlezen, ik heb ook niet stil gezeten ;)
Als je deze schakeling een relais laat schakelen dan heeft de schakeling totaal geen nut. Een relais is traag en instabiel en het moment dat het relais fysiek contact maakt is ook niet consistent. We praten hier over 50Hz, knappe kerel die het moment van contact in het relais precies op het 0 punt krijgt.

Een dikke FET is hier wel op z`n plek.
1
Ik weet niet wie ik nu geloven moet, de Atmel app note, of de enkeling hier die zegt dat de aantrekking van het relais te onstabiel zou zijn. De appnote vertelt dat de bekrachtigingstijd een vaste, stabiele variabele is waarmee in de timing gecompenseerd kan worden.

Als je even nadenkt, een relais dat vol/krachtig geschakeld word met steeds dezelfde stroom zal naar mijn idee misschien maar een enkele uS afwijking hebben. Sterker nog, ze hadden het er over dat de uC zelfs kan 'leren' wat de aantrek tijd van het relais is. Naar mijn idee kan dat alleen als het relais een dubbel contact heeft en naast het lichtnet ook een feedback pin naar de uC schakelt. Zo ver gingen ze niet in detail.

MAAAAAR... ik had wat meer onderzoek gedaan. Ik ga't mooi met een optotriac->powertriac combinatie doen. Een MOC3023 en een BTA16.

Edit: Dit is ook nog eens een goedkopere oplossing dan een 10A power relais ;)
De snelheid, waarmee een relais schakelt, hangt af van de massa van de bewegende delen en van de kracht waarmee deze bewogen worden. Ik heb hier nog reed-relais die je op 1kHz kan schakelen. Maar met een zwaar relais haal je dat uiteraard niet. Evengoed, die schakeltijd zal wel redelijk constant blijven zodat de firmware er rekening mee kan houden.

Met een triac kan het ook, maar dit levert dan weer vermogensverlies op. Je zou ook met een triac kunnen inschakelen, en vervolgens diens werk laten overnemen door een relais, waarna de triac uitgeschakeld wordt.
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Dat is ook een idee ja. Volgens de datasheet verbruikt de BTA16 1 watt aan gatevermogen om 'm open te houden. Dat is wel weer meer dan het vermogen een 150ohms spoeltje bekrachtigd houden op 6V (~250mW).

Maar ik wel een iets van, als het apparaat aan staat / in bedrijf is, dan gaan de vermogensbesparing hekken los :P

Edit: Na wat overwegen denk ik dat ik het alleen bij triacs houd. Voor de beeldvorming eerst de opbouw van de huidige inschakel vertraging:

16A relaise om 1700VA ringkerns te schakelen gevolgd door een 100OHm 10W weerstand in serie als inschakel vertraging. Hier aan parallel zit een Normal Closed relais.

De inschakelprocedure is dit: Eerst wordt het inschakelvertraging relais parallel aan de weerstand bekrachtigd, die gaat open en de weerstand wordt 'ingeschakeld'. Vervolgens wordt het hoofdrelais bekrachtigd en na een seconde of 2 valt het parallel relais weer af naar de normal closed stand en wordt de inschakelweerstand weer kortgesloten.

De inschakelvertraging relais kan prima met een triac worden vervangen. (Kan de weerstand ook worden ingeschakeld/ontkoppeld op een gewenst tijdstip). Deze is tenslotte alleen insgeschakeld tijdens het opstarten met de inschakel R.

Op zich vind ik die klikjes bij het aanzetten wel wat hebben, maar een 'clickless' inschakelvertraging is ook wel leuk.

[Bericht gewijzigd door MagicBox op 14 mei 2010 12:46:29 (61%)]

Ik heb zelf al eens de methode toegepast die in de application note van Atmel staat, met de twee weerstanden van 1M
Een van de nadelen daarvan is dat je de stekker niet mag ompolen als je er een apparaat met randaarde op hebt aangesloten.
Ik was dus al een tijdje op zoek naar een elegantere methode en jouw schakeling ziet er beter een veiliger uit. Ik vraag me af of je de stroomopname nog meer kunt verlagen door de stroom door de led met een weerstand te verlagen. In jouw schema ontlaad je de condensator bijna volledig. Omdat de puls die de led aanstuurt maar van korte duur is kun je misschien meer lading overhouden in de condensator.
Het gaat mij er niet om een nog zuiniger schakeling te maken, behalve voor de uitdaging dan, maar op de onderste grenswaarde van de component (stroom door de led) gaan werken geeft beslist een keer problemen.

Welke simulator gebruik jij overigens. Ik heb in ltspice maar weinig componenten ter beschikking. Kan jouw schema daarom niet naspelen.

Dit lijkt met 4M7 te kunnen werken: http://hennep.xs4all.nl/elec/zerocrossing.gif
Dat heb je mooi verder uitgewerkt zo. Wat de stroom door de led betreft, de weerstand had ik in mijn laatste versie weggelaten omdat de BS100 al zijn RdsON heeft. De initiele piek is iets van 20mA. De puls breedte is voor mij niet van belang, alleen het moment en de flank steilheid. Daarom ontlaad ik de C met een hogere stroom dan de LED nominaal stroom. Een bijwerking van die hoge piek is dat de tor in de optocoupler lekker verzadigd wordt en dat zorgt weer voor een verbreding van de uitgangspuls.

Ik zal jou variant eens in de sim doen met de dubbelfasige gelijkrichting en dan eens kijken hoe het er uitziet. Een 4.7M serieweerstand is erg leuk, ik kwam in mijn huidige schema niet verder dan 3.3M (8mW totaal verbruik) omdat dan het opengooien van de FET te slapjes ging (gate capaciteit met pulldown = RC netwerk). Daarentegen heeft een torretje met een zeer hoge HFE (BC558C of zo) vast geen moeite met een hoogomige pulldown.

P.S. ik gebruik multisim 9 om te simuleren, die is al wat ouder.

P.P.S. De meeste energie wordt verbuikt in dit schema door de serieweersand met zener diode, de laadstroom voor de C is maar minimaal. De transistor pulldown weerstand kan dus ook niet te klein worden, anders gaat er kostbare stroom weg door deze weerstand en verloopt het laden van de C langzamer. Stroom die je eigenlijk in de C wil. Daarom had ik een FET gebruikt, kon ik toch een hoogohmige pulldown gebruiken.

Edit: jou stroom door de led is zeer klein nog geen 600uA, dat lijkt me erg weinig om een OC 'snel' op te jassen, als je kon simuleren met een echte OC zou je waarschijnlijk zien dat 'ie niet eens open wil met een 600uA puls, dat was mijn ervaring in de Sim en dat werd dus ook gelijk een uitdaging, een stevige 10mA+ ontlaad stroom krijgen.

Van de optos die ik bekeken heb, is de surge current spec rond de 4A, dus die led gaat echt niet stuk van het ontladen van een 10V vol 120nF C'tje