Phasenabschnittsdimmer mit Kondensatornetzteil
Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese
Phasenabschnittsdimmer mit Kondensatornetzteil
Hallo,
ich tüftle seit ca. 2 Wochen an einem Phasenabschnittsdimmer kombiniert mit Kondensator-Netzteil. Aber irgendwie stecke ich gerade fest. Für die Basis des Dimmers habe ich mich von der ELV-Schaltung DI 300 "inspirieren lassen". Das Priznip ist, dass die Schaltung selbst als "Schalter" fungiert, indem Sie zwei Pins mit einem FET kurzschließt und darüber den Stromkreis für die Lampe schließt. Damit dies auch mit nur einem FET geht, werden die Eingänge über einen Brückengleichrichter geführt.
Das funktioniert prinzipell, habe ich auch getestet. Aber das von ELV vorgeschlagene Netzteil war für mich ungeeignet. (zuwenig Strom)
Deshalb dachte ich, ich baue einfach ein Standard-Kondensator-Netzteil dazu, was zu einigen Hirnkrämpfen geführt hat, weil die "Masse" dann geändert werden muss und ich zusätzlich die Lampe gegen N anschließen wollte, nicht gegen L wie von ELV vorgeschlagen. Bei den ganzen Krämpfen habe ich dann wohl einen groben Fehler übersehen, was erst mal zu einem riesen Knall beim einschalten geführt hat.
Nach etwas weiterem Nachdenken habe ich den Grund gefunden: da bei einem Standard Kondensator-Netzteil, ebenfalls mit Brückengleichrichter dann in Kombination mit meinem Dimmer 3 Dioden in Reihe voll auf 230V liegen habe ich damit einen vollen Kurzschluss gebaut. Je eine dieser Dioden ist in je einem der Brückengleichrichter und die dritte ist die Z-Diode zur Stabilisierung. Als Lösung habe ich das Kondensator-Netzteil von seinem Brückengleichrichter "befreit". Herausgekommen ist dann folgende Schaltung:
Das Netzteil funktioniert nun auch und liefert eine ausreichend stabile Spannung bei meinem benötigten Strom. Allerdings funktioniert jetzt die Dimmung nicht mehr, bzw. kann ich den FET nicht mehr "löschen". Wenn ich das Gate des FET beim Einschalten auf Masse lasse bleibt die angeschlossene Lampe aus. Verdächtig ist dann aber schon, wenn ich 12V über einen Vorwiderstand ans Gate anlege, dass die Lampe mit ca. einer halben Sekunde Verzögerung angeht. Wenn ich das Gate dann wieder mit Masse verbinde bleibt die Lampe einfach an. Ich habe das Gate auch schon direkt hart mit Masse gebrückt. Die Lampe (LED) brennt einfach weiter. Jetzt überlege ich seit gestern, woran es liegen könnte und komme nicht drauf. Die Dioden, den Brückengleichrichter und den FET habe ich vorsichtshalber noch mal getauscht. Hat jemand von euch eine Idee?
Viele Grüße
Andreas
ich tüftle seit ca. 2 Wochen an einem Phasenabschnittsdimmer kombiniert mit Kondensator-Netzteil. Aber irgendwie stecke ich gerade fest. Für die Basis des Dimmers habe ich mich von der ELV-Schaltung DI 300 "inspirieren lassen". Das Priznip ist, dass die Schaltung selbst als "Schalter" fungiert, indem Sie zwei Pins mit einem FET kurzschließt und darüber den Stromkreis für die Lampe schließt. Damit dies auch mit nur einem FET geht, werden die Eingänge über einen Brückengleichrichter geführt.
Das funktioniert prinzipell, habe ich auch getestet. Aber das von ELV vorgeschlagene Netzteil war für mich ungeeignet. (zuwenig Strom)
Deshalb dachte ich, ich baue einfach ein Standard-Kondensator-Netzteil dazu, was zu einigen Hirnkrämpfen geführt hat, weil die "Masse" dann geändert werden muss und ich zusätzlich die Lampe gegen N anschließen wollte, nicht gegen L wie von ELV vorgeschlagen. Bei den ganzen Krämpfen habe ich dann wohl einen groben Fehler übersehen, was erst mal zu einem riesen Knall beim einschalten geführt hat.
Nach etwas weiterem Nachdenken habe ich den Grund gefunden: da bei einem Standard Kondensator-Netzteil, ebenfalls mit Brückengleichrichter dann in Kombination mit meinem Dimmer 3 Dioden in Reihe voll auf 230V liegen habe ich damit einen vollen Kurzschluss gebaut. Je eine dieser Dioden ist in je einem der Brückengleichrichter und die dritte ist die Z-Diode zur Stabilisierung. Als Lösung habe ich das Kondensator-Netzteil von seinem Brückengleichrichter "befreit". Herausgekommen ist dann folgende Schaltung:
Das Netzteil funktioniert nun auch und liefert eine ausreichend stabile Spannung bei meinem benötigten Strom. Allerdings funktioniert jetzt die Dimmung nicht mehr, bzw. kann ich den FET nicht mehr "löschen". Wenn ich das Gate des FET beim Einschalten auf Masse lasse bleibt die angeschlossene Lampe aus. Verdächtig ist dann aber schon, wenn ich 12V über einen Vorwiderstand ans Gate anlege, dass die Lampe mit ca. einer halben Sekunde Verzögerung angeht. Wenn ich das Gate dann wieder mit Masse verbinde bleibt die Lampe einfach an. Ich habe das Gate auch schon direkt hart mit Masse gebrückt. Die Lampe (LED) brennt einfach weiter. Jetzt überlege ich seit gestern, woran es liegen könnte und komme nicht drauf. Die Dioden, den Brückengleichrichter und den FET habe ich vorsichtshalber noch mal getauscht. Hat jemand von euch eine Idee?
Viele Grüße
Andreas
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Zumindest für eine Polarität des Netzes hast du deinen ganzen Dimmverhau überbrückt.
Bei positiven Halbwellen kann über V10, V7, V9, und die untere linke Diode vom Brückengleichrichter Strom direkt von L nach Lampe fließen. Ob das mit dem Kondensatornetzteil ansonsten geht, habe ich noch nicht ganz erfolgreich zerdacht.
Bei positiven Halbwellen kann über V10, V7, V9, und die untere linke Diode vom Brückengleichrichter Strom direkt von L nach Lampe fließen. Ob das mit dem Kondensatornetzteil ansonsten geht, habe ich noch nicht ganz erfolgreich zerdacht.
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Hallo ferdimh,
du glaubst gar nicht, wie lange ich den Schaltplan angestarrt habe um einen solchen Strompfad zu finden. Jetzt fällt es mir natürlich wie Schuppen vor den Augen.
Nach Entfernung von V10 funktioniert die Ansteuerung des FET wieder einwandfrei. Das Kondensator-Netzteil produziert auch brav 12 V, die sind jetzt aber nicht mehr belastbar. Selbst bei 12 kOhm Last, also 1 mA bricht die Spannung Sie auf fast 0 V zusammen. Es wird vermutlich nur Energie übertragen, wenn der Kondensator auch umgeladen wird, was ich über V10 bewerkstelligen wollte. Also wieder weiter nachdenken...
Viele Grüße
Andreas
du glaubst gar nicht, wie lange ich den Schaltplan angestarrt habe um einen solchen Strompfad zu finden. Jetzt fällt es mir natürlich wie Schuppen vor den Augen.
Nach Entfernung von V10 funktioniert die Ansteuerung des FET wieder einwandfrei. Das Kondensator-Netzteil produziert auch brav 12 V, die sind jetzt aber nicht mehr belastbar. Selbst bei 12 kOhm Last, also 1 mA bricht die Spannung Sie auf fast 0 V zusammen. Es wird vermutlich nur Energie übertragen, wenn der Kondensator auch umgeladen wird, was ich über V10 bewerkstelligen wollte. Also wieder weiter nachdenken...
Viele Grüße
Andreas
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Hallo ESDKittel,
danke für den Vorschlag. Der sieht doch echt einfach aus. Eine ähnliche FET-Beschaltung habe ich auch schon mal als Bidirektionelr Schalter benutzt, allerdings auch nur im Kleinspannungsbereich. Jetzt müsste ich dazu mal zwei kompatible Hochspannungs-FETs finden.
Viele Grüße
Andreas
danke für den Vorschlag. Der sieht doch echt einfach aus. Eine ähnliche FET-Beschaltung habe ich auch schon mal als Bidirektionelr Schalter benutzt, allerdings auch nur im Kleinspannungsbereich. Jetzt müsste ich dazu mal zwei kompatible Hochspannungs-FETs finden.
Viele Grüße
Andreas
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Hallo ESDkittel noch mal,
auf deiner Skizze wird es mir nicht ganz klar, deshalb Frage ich noch mal sicherheitshalber nach. Wie bereits geschrieben habe ich eine ähnliche Schaltung schon einmal gebaut. Das war für die Arbeit und ist schon ein paar Jahre her. Ich konnte mich nicht mehr genau erinnern. Ich bin deshalb davon ausgegangen, dass du einen N-Channel und einen P-Channel FET in Reihe geschaltet hast. Darum bin ich auf die Suche nach Hochvolt P-Channel FETs gegangen und habe festgestellt, dass es sowas (eigentlich) nicht gibt. Ich habe ein Exemplar gefunden, dass bis 500V einsetzbar ist, dafür aber einen RDSon von 6 Ohm hat.
Also habe ich mal die Schaltung von damals gesucht und gefunden: Es war der "Ein-/Ausschalter" für einen Akku an einer AARlogic-Platine. Also entweder Strom rein zur Versorgung, oder Strom raus zum Laden. Dabei habe ich gesehen, dass ich damals tatsächlich zwei N-Channel FETs in Reihe verwendet habe:
Ist es diese Verschaltung, die du in deiner Skizze meinst?
Sollte das der Fall sein und ich jetzt nicht wieder einen Hirnkrampf bekommen, müsste ich das Gate mit einer negativen Spannung ansteuern in Bezug auf die Masse in deiner Skizze?
Edit sagt: Oh mann, das sind ja P-Channel. Ok, dann wird es interessant welche zu finden...
Viele Grüße
Andreas
auf deiner Skizze wird es mir nicht ganz klar, deshalb Frage ich noch mal sicherheitshalber nach. Wie bereits geschrieben habe ich eine ähnliche Schaltung schon einmal gebaut. Das war für die Arbeit und ist schon ein paar Jahre her. Ich konnte mich nicht mehr genau erinnern. Ich bin deshalb davon ausgegangen, dass du einen N-Channel und einen P-Channel FET in Reihe geschaltet hast. Darum bin ich auf die Suche nach Hochvolt P-Channel FETs gegangen und habe festgestellt, dass es sowas (eigentlich) nicht gibt. Ich habe ein Exemplar gefunden, dass bis 500V einsetzbar ist, dafür aber einen RDSon von 6 Ohm hat.
Also habe ich mal die Schaltung von damals gesucht und gefunden: Es war der "Ein-/Ausschalter" für einen Akku an einer AARlogic-Platine. Also entweder Strom rein zur Versorgung, oder Strom raus zum Laden. Dabei habe ich gesehen, dass ich damals tatsächlich zwei N-Channel FETs in Reihe verwendet habe:
Ist es diese Verschaltung, die du in deiner Skizze meinst?
Sollte das der Fall sein und ich jetzt nicht wieder einen Hirnkrampf bekommen, müsste ich das Gate mit einer negativen Spannung ansteuern in Bezug auf die Masse in deiner Skizze?
Edit sagt: Oh mann, das sind ja P-Channel. Ok, dann wird es interessant welche zu finden...
Viele Grüße
Andreas
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
In meiner Skizze sollen das zwei Hochvolt N-Kanäler sein, die sind mit ihren Source zusammengeschaltet.
Bezugspunkt der Ansteuerschaltung ist der gemeinsame Sourceanschluß.
Gatespannung positiv gegen diesen Bezugspunkt.
Die Rückwärtsdiode des linken FET ist Teil der 12V Kondensatornetzteilstromversorgung.
Diese bezieht sich auch auf den gemeinsamen Sourceanschluß.
Vorsicht: Dieser Bezugspunkt springt potentialmäßig in Bezug auf den Neutralleiter/das "Erdpotential"!
(in der von Dir angehängten Batterieabschaltung sind P-FET verwendet)
Bezugspunkt der Ansteuerschaltung ist der gemeinsame Sourceanschluß.
Gatespannung positiv gegen diesen Bezugspunkt.
Die Rückwärtsdiode des linken FET ist Teil der 12V Kondensatornetzteilstromversorgung.
Diese bezieht sich auch auf den gemeinsamen Sourceanschluß.
Vorsicht: Dieser Bezugspunkt springt potentialmäßig in Bezug auf den Neutralleiter/das "Erdpotential"!
(in der von Dir angehängten Batterieabschaltung sind P-FET verwendet)
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Hallo ESDKittel,
du hast recht, ich bin mit den ganzen N- und P-Kanal FETs durcheinander gekommen. Ich habe jetzt mal ein paar Tage Ruhe walten lassen und die Schaltung am Wochenende in Ruhe gezeichnet:
Und dann auch auf Lochraster aufgebaut:
Leider kommt am Kondensatornetzteil exakt 0 V raus. Ich habe schon alle Verbindungen geprüft und auch durchgemessen. Die Werte der Bauteile habe ich auch nachgemessen. Ich konnte sogar die Body-Diode des FET V2 zur Sicherung messen. (Uf ca. 500 mV). Also sollte eigentlich alles funktionieren... sollte...
Ich habe einen Trenntrafo, habe aber doch sehr großen Resepekt vor dieser Spannung. Ein Oszi ist vorhanden. Wie würdet ihr mit der Fehlersuche beginnen? Hier z.B. mal das Messbild des Knotenpunkt R2 / V4 / V5 in Bezug auf die Masse:
Das schaut meiner Meinung nach gut aus? Warum kann ich dann trotzdem keine 12 V an der Z-Diode messen?
Viele Grüße
Andreas
du hast recht, ich bin mit den ganzen N- und P-Kanal FETs durcheinander gekommen. Ich habe jetzt mal ein paar Tage Ruhe walten lassen und die Schaltung am Wochenende in Ruhe gezeichnet:
Und dann auch auf Lochraster aufgebaut:
Leider kommt am Kondensatornetzteil exakt 0 V raus. Ich habe schon alle Verbindungen geprüft und auch durchgemessen. Die Werte der Bauteile habe ich auch nachgemessen. Ich konnte sogar die Body-Diode des FET V2 zur Sicherung messen. (Uf ca. 500 mV). Also sollte eigentlich alles funktionieren... sollte...
Ich habe einen Trenntrafo, habe aber doch sehr großen Resepekt vor dieser Spannung. Ein Oszi ist vorhanden. Wie würdet ihr mit der Fehlersuche beginnen? Hier z.B. mal das Messbild des Knotenpunkt R2 / V4 / V5 in Bezug auf die Masse:
Das schaut meiner Meinung nach gut aus? Warum kann ich dann trotzdem keine 12 V an der Z-Diode messen?
Viele Grüße
Andreas
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
V5 ist falschrum eingezeichnet.
- Bastelbruder
- Beiträge: 11560
- Registriert: Mi 14. Aug 2013, 18:28
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Wenn V5 umgekehrt gepolt wird und das untere Ende an der (hektischen) Masse liegt, könnte was draus werden. Bloß umpolen führt zu magic smoke.
Gaanz sauber ist das mit dem Kondensatornetzteil nicht, es könnte nämlich sein daß die Mimik den Arsch nicht hochkriegt, wenn irgendwas an den 12 Volt saugt. Da muß die Versorgung durch die 3x330 k erstmal hergestellt werden. Richtig funktioniert das mit dem Kondenstor bloß, wenn der linke FET eingeschaltet ist.
Soll da eigentlich noch ein Kleinhirn mitversorgt werden?
Gaanz sauber ist das mit dem Kondensatornetzteil nicht, es könnte nämlich sein daß die Mimik den Arsch nicht hochkriegt, wenn irgendwas an den 12 Volt saugt. Da muß die Versorgung durch die 3x330 k erstmal hergestellt werden. Richtig funktioniert das mit dem Kondenstor bloß, wenn der linke FET eingeschaltet ist.
Soll da eigentlich noch ein Kleinhirn mitversorgt werden?
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
In der Tat, da ist mir auf die Schnelle ein Strompfad entgangen .
Seinerzeit hatte ich das mit Einweggleichrichtung und ohne Vorschaltkondensator gelöst.
Seinerzeit hatte ich das mit Einweggleichrichtung und ohne Vorschaltkondensator gelöst.
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Guten Morgen,
Ich habe die Diode schnell umgedreht und das Netzteil läuft natürlich.
Die Schaltung hat allerdings das gleiche Problem wie meine erste: Die Lampe bleibt an Wenn ich die Schaltung so einschalte, wie gezeichnet (mit V5 richtig herum) geht brav die Lampe an. Wenn ich allerdings Pin 3 von X2 auf Masse ziehe passiert nichts.
Wenn ich die Schaltung allerdings bereit mit Pin 3 von X2 auf Masse einschalte bleibt die Lampe auch aus. Wenn ich dann Pin 3 "freigebe", geht die Lampe an (meiner Meinung nach wieder leicht verzögert). Lässt sich dann aber wieder nicht mit Masse an Pin 3 ausschalten.
C3 ist übrigens derzeit nicht bestückt. Der soll laut ELV-Beispiel zur EMV-Verhinderung dienen, indem das Gate "langsam" ausgeschaltet wird. Aber ist wie gesagt derzeit nicht bestückt.
Viele Grüße
Andreas
Oh Mann! Langsam wird es echt peinlich für mich. Analog und Wechselspannung ist einfach nicht meine Welt. Ich dachte, ich bringe diesen "Leistungsteil" schnell hinter mich und kann mich dann gemütlich auf die Software konzentrieren.ESDKittel hat geschrieben:V5 ist falschrum eingezeichnet.
Ich habe die Diode schnell umgedreht und das Netzteil läuft natürlich.
Ich habe jetzt mal 500 Ohm dran gehängt (ca. 24 mA, was ich mir so an benötigten Strom vorgestellt habe) und die Schaltung ein paar mal Ein- und Ausgeschaltet. Es scheint zu funktionieren. Die Schaltung wird später vermutlich dauerhaft versorgt. Das genügt mir also erst mal.Bastelbruder hat geschrieben:Gaanz sauber ist das mit dem Kondensatornetzteil nicht, es könnte nämlich sein daß die Mimik den Arsch nicht hochkriegt, wenn irgendwas an den 12 Volt saugt.
Ja. Die Steuerung verlangt derzeit ca. 19 mA @ 5 V. Und ich brauche noch ein paar wenige mA @ 12 V. Dieser Wert ist mir aber derzeit noch nicht bekannt und sollte erst später, wenn der Teil mit dem Dimmer läuft ermittelt werden. Aktuell habe ich noch einen Linearregler für die 5 V verbaut. Ich überlege aber einen kleinen Schaltregler zu spendieren, um die Versorgung des Kleinhirns auf ca. 10 mA @ 12 V zu bringen. Somit bleiben mir ca. 14 mA, was sich erst mal gut "anfühlt".Bastelbruder hat geschrieben:Soll da eigentlich noch ein Kleinhirn mitversorgt werden?
Die Schaltung hat allerdings das gleiche Problem wie meine erste: Die Lampe bleibt an Wenn ich die Schaltung so einschalte, wie gezeichnet (mit V5 richtig herum) geht brav die Lampe an. Wenn ich allerdings Pin 3 von X2 auf Masse ziehe passiert nichts.
Wenn ich die Schaltung allerdings bereit mit Pin 3 von X2 auf Masse einschalte bleibt die Lampe auch aus. Wenn ich dann Pin 3 "freigebe", geht die Lampe an (meiner Meinung nach wieder leicht verzögert). Lässt sich dann aber wieder nicht mit Masse an Pin 3 ausschalten.
C3 ist übrigens derzeit nicht bestückt. Der soll laut ELV-Beispiel zur EMV-Verhinderung dienen, indem das Gate "langsam" ausgeschaltet wird. Aber ist wie gesagt derzeit nicht bestückt.
Viele Grüße
Andreas
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Nachtrag:
Das habe ich jetzt doch glatt schon wieder übersehen... Ich werde das dann mal umsetzen.
Bastelbruder hat geschrieben:und das untere Ende an der (hektischen) Masse liegt[/u
Das habe ich jetzt doch glatt schon wieder übersehen... Ich werde das dann mal umsetzen.
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
So, ich habe erneut den Lötkolben geschungen. Zuerst einmal zur Sicherheit, dass wir alle von der gleichen Schaltung sprechen habe ich den Schaltplan mal wie folgt aktualisiert. So habe ich eure Vorschläge verstanden:
Bastelbruder hat (wie immer) recht: Das Netzteil kriegt seinen Arsch nicht hoch, vor allem nicht wenn die Lampe aus ist. Mehr noch, wenn ich die Lampe ausschalte bricht die Spannung ebenfalls zusammen.
Wer hat eine noch eine Idee zur Rettung dieser Idee?
Viele Grüße
Andreas
Bastelbruder hat (wie immer) recht: Das Netzteil kriegt seinen Arsch nicht hoch, vor allem nicht wenn die Lampe aus ist. Mehr noch, wenn ich die Lampe ausschalte bricht die Spannung ebenfalls zusammen.
Wer hat eine noch eine Idee zur Rettung dieser Idee?
Viele Grüße
Andreas
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
So was da läuft seit ca. 4 Jahren problemlos in einem Luftentfeuchter, nachdem das Kondensatornetzteil nicht mehr wollte:
https://www.electrodragon.com/product/a ... 12v-800ma/
- wobei jetzt kommt sicher gleich jemand, der mit erklärt, dass die Schutzabstände grottig sind. - Mir in dem Fall egal, da das Gerät Schutzisoliert ist - mehr als dass das Kleinhirn geröstet wird, kann mir nicht passieren.
https://www.electrodragon.com/product/a ... 12v-800ma/
- wobei jetzt kommt sicher gleich jemand, der mit erklärt, dass die Schutzabstände grottig sind. - Mir in dem Fall egal, da das Gerät Schutzisoliert ist - mehr als dass das Kleinhirn geröstet wird, kann mir nicht passieren.
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Evtl. so? Oder sieht jemand einen Fehler der mir entgangen ist...
Müsste eigentlich von 0% bis 100% sauber funktionieren, einer der beiden Zweige liefert immer, egal welche Stromrichtung...
Müsste eigentlich von 0% bis 100% sauber funktionieren, einer der beiden Zweige liefert immer, egal welche Stromrichtung...
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Hallo,
ich hätte noch einen weiteren Vorschlag mit Optokoppler. Die Idee schirrt mir schon seit über einer Woche im Kopf, ich habe diese aber immer verworfen, da die Optokoppler-LED meiner Meinung nach zuviel Strom benötigt. Andererseits ist damit wieder ein Kondensatornetzteil mit Brückengleichrichter möglich, also wesentlich effektiver:
Was ist davon zu halten? Rentiert sich es das mal aufzubauen und zu "spielen" mit wie wenig Strom die LED den Optokoppler noch durchschaltet?
Viele Grüße
Andreas
ich hätte noch einen weiteren Vorschlag mit Optokoppler. Die Idee schirrt mir schon seit über einer Woche im Kopf, ich habe diese aber immer verworfen, da die Optokoppler-LED meiner Meinung nach zuviel Strom benötigt. Andererseits ist damit wieder ein Kondensatornetzteil mit Brückengleichrichter möglich, also wesentlich effektiver:
Was ist davon zu halten? Rentiert sich es das mal aufzubauen und zu "spielen" mit wie wenig Strom die LED den Optokoppler noch durchschaltet?
Viele Grüße
Andreas
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Guten Morgen,
ich wollte mal kurz Erfolg vermelden. Meine Schaltung mit dem Optokoppler scheint zu laufen. Jetzt muss ich erst mal ein Stück Software schreiben, um die passenden Ausschalt-Zeitpunkte zu haben und dann weiß ich mehr.
Viele Grüße
Andreas
ich wollte mal kurz Erfolg vermelden. Meine Schaltung mit dem Optokoppler scheint zu laufen. Jetzt muss ich erst mal ein Stück Software schreiben, um die passenden Ausschalt-Zeitpunkte zu haben und dann weiß ich mehr.
Viele Grüße
Andreas
- Weisskeinen
- Beiträge: 3950
- Registriert: Di 27. Aug 2013, 16:19
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Postest du den ganzen Schaltplan und den Code dann auch hier? Ich habe mir nämlich schon mehrfach einen Ast gesucht nach einer Selbstbauanleitung für einen Phasenabschnittsdimmer und war immer erfolglos. Deshalb hätte ich da gesteigertes Interesse dran...
Edit: Weißt du schon, wie du die Nulldurchgangserkennung machen willst?
Edit: Weißt du schon, wie du die Nulldurchgangserkennung machen willst?
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Hallo Weisskeinen,
der Schaltplan ist ja quasi schon online und die Software sollte nicht sehr aufwändig sein. Man muss ja nur beim Nulldurchgang einschalten und dann je nach Dimmwert wieder abschalten.
Die Nulldurchgangs-Erkennung ist im Schaltplan im ersten Post bereits zu sehen. Sie besteht aus R1, R2, R31, C17, V3 und R17. Diesen Schaltungsteil habe ich bereits getestet und sie funktioniert einwandfrei. Sie liefert zwar nur einen Nulldurchgang pro Sinuswelle (nicht zwei), aber den fehlenden kann man sich leicht errechnen.
Bei den Widerständen mache ich aus Angst immer 3 in Reihe, da ich nicht weiß welche Spannungsfestigkeit meine hier haben. Anstatt R1, R2 und R31 kannst du auch einfach 1x 1 Megaohm nehmen.
Viele Grüße
Andreas
der Schaltplan ist ja quasi schon online und die Software sollte nicht sehr aufwändig sein. Man muss ja nur beim Nulldurchgang einschalten und dann je nach Dimmwert wieder abschalten.
Die Nulldurchgangs-Erkennung ist im Schaltplan im ersten Post bereits zu sehen. Sie besteht aus R1, R2, R31, C17, V3 und R17. Diesen Schaltungsteil habe ich bereits getestet und sie funktioniert einwandfrei. Sie liefert zwar nur einen Nulldurchgang pro Sinuswelle (nicht zwei), aber den fehlenden kann man sich leicht errechnen.
Bei den Widerständen mache ich aus Angst immer 3 in Reihe, da ich nicht weiß welche Spannungsfestigkeit meine hier haben. Anstatt R1, R2 und R31 kannst du auch einfach 1x 1 Megaohm nehmen.
Viele Grüße
Andreas
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Guten Morgen,
ich habe mal Fotos vom Signal der Nullspannungs-Erkennung gemacht:
und ein Zoom vom Nulldurchgang:
Meiner Meinung nach einwandfrei, um zu dimmen. Man kann sogar beide Flanken nutzen, nicht wie gestern von mir geschrieben. Mein Satz, dass nur eine Halbwelle zu erkennen ist war in der ELV-Schaltungsbeschreibung begründet, von der ich meine "Inspiration" habe. Dort wird nämlich der Nulldurchgang von der "gedimmten" Netzspannung erzeugt. Deshlab ist davon auch nur eine Flanke tatsächlich verwendbar. Da ich aufgrund des Kondensatornetzteils eh einen N auf der Platine habe, habe ich dieses Problem nicht.
Die gleiche Schaltung verwende ich auch als Detection des 230V-Tasters.
Viele Grüße
Andreas
ich habe mal Fotos vom Signal der Nullspannungs-Erkennung gemacht:
und ein Zoom vom Nulldurchgang:
Meiner Meinung nach einwandfrei, um zu dimmen. Man kann sogar beide Flanken nutzen, nicht wie gestern von mir geschrieben. Mein Satz, dass nur eine Halbwelle zu erkennen ist war in der ELV-Schaltungsbeschreibung begründet, von der ich meine "Inspiration" habe. Dort wird nämlich der Nulldurchgang von der "gedimmten" Netzspannung erzeugt. Deshlab ist davon auch nur eine Flanke tatsächlich verwendbar. Da ich aufgrund des Kondensatornetzteils eh einen N auf der Platine habe, habe ich dieses Problem nicht.
Die gleiche Schaltung verwende ich auch als Detection des 230V-Tasters.
Viele Grüße
Andreas
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Es sei hierbei angemerkt, dass bei reaktiver Last (das kann auch kapazitiv sein!) der Nulldurchgang des Stromes/der Spannung über dem Dimmer nicht mit dem Nulldurchgang vom Stromnetz zusammenfällt.
Wenn man nicht bei Nullspannung über dem Dimmer einschaltet, führt man das ganze Konzept ad absurdum (Man kann eben keine kapazitiven Lasten mehr regeln stellen).
Wenn man nicht bei Nullspannung über dem Dimmer einschaltet, führt man das ganze Konzept ad absurdum (Man kann eben keine kapazitiven Lasten mehr regeln stellen).
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Hallo ferdimh,
vielen Dank für deinen Einwand. Das bedeutet, dass ich meinen Nulldurchgang doch nicht über L/N messen sollte, sondern über L Ausgang zur Lampe und N?
Ich habe mich mal etwas Software geschrieben und zuerst mit einem Frequenzgenerator @ 50 Hz auf grobe Fehler überprüft und dann mal versucht zu dimmen. Klappt natürlich nicht, obwohl die Ausgangsspannung gut aussieht. (blau = Netz, gelb = gedimmt). Das kann aber auch an meiner LED liegen. Ich muss wohl mal eine Glühlampe rauskramen:
Wie stellt man eigentlich solche Spannungen mit dem Oszi ordentlich dar? 50 V / Div. ist die größte Einheit, die ich einstellen kann. Sollte ich noch mal einen Spannungsteiler vorschalten zum messen?
Viele Grüße
Andreas
vielen Dank für deinen Einwand. Das bedeutet, dass ich meinen Nulldurchgang doch nicht über L/N messen sollte, sondern über L Ausgang zur Lampe und N?
Ich habe mich mal etwas Software geschrieben und zuerst mit einem Frequenzgenerator @ 50 Hz auf grobe Fehler überprüft und dann mal versucht zu dimmen. Klappt natürlich nicht, obwohl die Ausgangsspannung gut aussieht. (blau = Netz, gelb = gedimmt). Das kann aber auch an meiner LED liegen. Ich muss wohl mal eine Glühlampe rauskramen:
Wie stellt man eigentlich solche Spannungen mit dem Oszi ordentlich dar? 50 V / Div. ist die größte Einheit, die ich einstellen kann. Sollte ich noch mal einen Spannungsteiler vorschalten zum messen?
Viele Grüße
Andreas
- Weisskeinen
- Beiträge: 3950
- Registriert: Di 27. Aug 2013, 16:19
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Bei einer reaktiven Last ist das einschalten beim Spannungs-Nulldurchgang doch gar nicht so schlimm, wenn ich das richtig sehe. Das Abschalten bei Spannung und Strom dürfte da schon unschöner sein, weil gerade eine induktive Last die Spannung am FET hochschnellen lässt. Da muss man auch noch was gegen unternehmen...
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Nein.
Ein PhasenABschnittsdimmer ist nunmal für das Dimmen induktiver Lasten prinzipbedingt völlig ungeeignet. Ebenso, wie ein PhasenANschnittsdimmer keine kapazitiven Lasten verträgt.
Einen Tod muss man hier sterben.
Wenn wir annehmen, dass das Ding für kapazitive Lasten da ist, wird auf einmal der Einschaltzeitpunkt kritisch.
Ein PhasenABschnittsdimmer ist nunmal für das Dimmen induktiver Lasten prinzipbedingt völlig ungeeignet. Ebenso, wie ein PhasenANschnittsdimmer keine kapazitiven Lasten verträgt.
Einen Tod muss man hier sterben.
Wenn wir annehmen, dass das Ding für kapazitive Lasten da ist, wird auf einmal der Einschaltzeitpunkt kritisch.
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Guten Morgen ferdihm,
über das Problem mit dem Anschnittsdimmer habe ich gestern bereits nachgedacht. Es sollte bei meiner Schaltung einfach zu lösen sein: Ich kann in der Software einfach den Ausgang invertieren und schon habe ich einen Phasenanschnittsdimmer. Das könnte man konfigurierbar per Jumper oder Dipswitch machen... Oder man findet eine Lösung die Last zu erkennen.
Viele Grüße
Andreas
über das Problem mit dem Anschnittsdimmer habe ich gestern bereits nachgedacht. Es sollte bei meiner Schaltung einfach zu lösen sein: Ich kann in der Software einfach den Ausgang invertieren und schon habe ich einen Phasenanschnittsdimmer. Das könnte man konfigurierbar per Jumper oder Dipswitch machen... Oder man findet eine Lösung die Last zu erkennen.
Und wie könnte man das lösen?ferdimh hat geschrieben: Wenn wir annehmen, dass das Ding für kapazitive Lasten da ist, wird auf einmal der Einschaltzeitpunkt kritisch.
Viele Grüße
Andreas
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Naja, darauf bezieht sich ja die ganze Sache mit der Nulldurchgangserkennung (denn da wird nun mal eingeschaltet). Bei Gleichrichter-Elko-Lasten ist der Netznulldurchgang schon ok , wenn da noch signifikante Kapazität am Eingang sitzt, muss man halt dann einschalten, wenn die Spannung über dem Schaltelement Null ist. Ich würde das vermutlich so angehen:
Über den FET kommt ein großer Widerstand (sagen wir 470k). Wenn nach dem Ausschalten die Spannung wieder unter eine bestimmte Schwelle fällt (5V oder so) wird wieder eingeschaltet.
Man verliert hier halt die Information, wenn man ganz voll aufdreht; es ist also zweckmäßig, "Vollgas" auf 95% oder so zu begrenzen.
Über den FET kommt ein großer Widerstand (sagen wir 470k). Wenn nach dem Ausschalten die Spannung wieder unter eine bestimmte Schwelle fällt (5V oder so) wird wieder eingeschaltet.
Man verliert hier halt die Information, wenn man ganz voll aufdreht; es ist also zweckmäßig, "Vollgas" auf 95% oder so zu begrenzen.
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Ok, ich habe geplant einen ATmega168 als Controller zu nutzen. Der hat einen analog-Komperator "onboard". Damit könnte man das mit einem Spannungsteilern einfach realisieren. Blöd ist allerdings, dass ich durch das Kondensatornetzteil die Masse des Dimmers und der restlichen Schaltung trennen musste. Wenn ich es aber richtig verstehe, sollte das aufgrund der beiden Brückengleichrichter keine große Rolle spielen, muss aber darüber noch mal nachdenken.
Was ich noch nicht genau verstanden habe ist, wo du den 470k geplant hast. Was meinst du mit "über den FET"?
Mal angenommen die Massen wären verbunden, dann hätte ich einen Spannungsteiler vom Drain des FET auf Masse verstanden?
Viele Grüße
Andreas
Was ich noch nicht genau verstanden habe ist, wo du den 470k geplant hast. Was meinst du mit "über den FET"?
Mal angenommen die Massen wären verbunden, dann hätte ich einen Spannungsteiler vom Drain des FET auf Masse verstanden?
Viele Grüße
Andreas
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Genau das hatte ich gemeint. Fet-Source wird hoffentlich Controllermasse sein.
Wenn dann der Drain niedrig genug ist, kann man gefahrarm einschalten.
Wenn dann der Drain niedrig genug ist, kann man gefahrarm einschalten.
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Hallo ferdimh,
das ist genau das Problem, dass ich am Anfang meines letzten Posts beschrieben habe. Die Masse ist NICHT verbunden, da sonst keine stabile Kombination auf Dimmer und Kondensatornetzteil möglich war. "Galvanische Trennung" erledigt jetzt der Optokoppler. Aber wie bereits geschrieben bin ich mir nicht sicher, ob die beiden "Massen" nicht doch durch Diodenstrecken irgendwie verbunden sind. Das Nachdenken darüber hat bisher aber noch keine Ergebnisse gebracht.
Aber ich habe etwas über die Realisiserung nachgedacht und etwas gerechnet. Der Eingangswiderstand des onboard-Komperators beträgt 100 MOhm, ist also vernachlässigbar. Ein Eingang des Komperators kann mit der internen Bandgap-Referenzspannung von 1,1 V verbunden werden. Daraus ergibt sich folgender Spannungsteiler mit zusätzlicher Z-Diode als Schutz des Controller-Pins:
Die Null-Spannungs-Erkennung habe ich zur Übersichtlichkeit auch mal dazu gezeichnet. (oben)
Der Komperator sollte mit diesem Spannungsteiler bei ca. 4,9 V über Controller-Masse triggern. Aber was mache ich dann mit diesem Trigger? Über die Nullspannungs-Erkennung kann ich die Perioden dauer der Netzspannung ermitteln. Und dann schalte ich bei Trigger des Komperators ein. Und dann wie lange? So lange wie eine gemesse Halbwelle, oder bis zum nächsten Null-Durchgang?
Oder sollte ich die Netzfrequenz über diesen Komperatur-Eingang messen und nicht ganz auf 100 % dimmen, wie von dir vorgeschlagen? Ich glaube darurch wid sich irgendwas ganz schön verschieben. Irgendwas habe ich an diesem Konzept noch nicht richtig verstanden.
Viele Grüße
Andreas
das ist genau das Problem, dass ich am Anfang meines letzten Posts beschrieben habe. Die Masse ist NICHT verbunden, da sonst keine stabile Kombination auf Dimmer und Kondensatornetzteil möglich war. "Galvanische Trennung" erledigt jetzt der Optokoppler. Aber wie bereits geschrieben bin ich mir nicht sicher, ob die beiden "Massen" nicht doch durch Diodenstrecken irgendwie verbunden sind. Das Nachdenken darüber hat bisher aber noch keine Ergebnisse gebracht.
Aber ich habe etwas über die Realisiserung nachgedacht und etwas gerechnet. Der Eingangswiderstand des onboard-Komperators beträgt 100 MOhm, ist also vernachlässigbar. Ein Eingang des Komperators kann mit der internen Bandgap-Referenzspannung von 1,1 V verbunden werden. Daraus ergibt sich folgender Spannungsteiler mit zusätzlicher Z-Diode als Schutz des Controller-Pins:
Die Null-Spannungs-Erkennung habe ich zur Übersichtlichkeit auch mal dazu gezeichnet. (oben)
Der Komperator sollte mit diesem Spannungsteiler bei ca. 4,9 V über Controller-Masse triggern. Aber was mache ich dann mit diesem Trigger? Über die Nullspannungs-Erkennung kann ich die Perioden dauer der Netzspannung ermitteln. Und dann schalte ich bei Trigger des Komperators ein. Und dann wie lange? So lange wie eine gemesse Halbwelle, oder bis zum nächsten Null-Durchgang?
Oder sollte ich die Netzfrequenz über diesen Komperatur-Eingang messen und nicht ganz auf 100 % dimmen, wie von dir vorgeschlagen? Ich glaube darurch wid sich irgendwas ganz schön verschieben. Irgendwas habe ich an diesem Konzept noch nicht richtig verstanden.
Viele Grüße
Andreas
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Oh. den Plan hatte ich noch garnicht gesehen. Oder zumindest nicht geistig verarbeitet.
Hier ergibt sich aber auch eine Möglichkeit:
Du hast eine BlackBox, die zwischen L und Lampe hängt (MOSFET mit Zeug) und eine, die zwischen L und N hängt (Netzteil mit Nulldurchgangserkenner).
Wenn du letztere umdrehst (L und N vertauschst), kannst du den Nulldurchgang auch zwischen L und Lampe detektieren.
Hier ergibt sich aber auch eine Möglichkeit:
Du hast eine BlackBox, die zwischen L und Lampe hängt (MOSFET mit Zeug) und eine, die zwischen L und N hängt (Netzteil mit Nulldurchgangserkenner).
Wenn du letztere umdrehst (L und N vertauschst), kannst du den Nulldurchgang auch zwischen L und Lampe detektieren.
Re: Phasenabschnittsdimmer mit Kondensatornetzteil
Hallo,
wieder mal ein Update von mir nach etwas längerer Zeit. Ich habe ewig ein Problem gesucht, und endlich gefunden. Die Dimmung hat grundsätzlich funktioniert. Auch die Umschaltung zwischen An- und Abschnitt. Allerdings hatte ich sehr viel flackern in der Lampe. Die Messung mit dem Oszi hat bestätigt, dass bereits die Ansteuerung ab und zu für eine Halbwelle auf High oder Low bleibt. Für mich war das eindeutig ein Software-Fehler, da ich direkt am AVR-Pin gemessen habe. Ich habe tagelang versucht den Fehler zu finden und es war keiner da.
Der AVR-Pin hat einen Weg bekommen, vermutlich bei einem der vielen Versuche bei dem etwas in der Schaltung den Magic Smoke abgelassen hat. Ärgerlicheweise hat der Pin grundsätzlich funktioniert und nur so ca. jede 100. bis 500. Halbwelle etwas anderes gemacht als die Software ihm befahl.
Deshalb poste ich hier auch wie angefragt die Software bisher. Sie ist noch nicht ganz Stör-Unanfällig. Wenn z.B. ein anderer Verbraucher am Netz eine Spitze erzeugt kommt es vor, dass ein weiterer Nulldurchgang detektiert wird. Dies habe ich versucht zu umgehen, indem ich die Plausibilität der Halbwelle prüfe. Dadurch konnte ich dann erfolgreich das Aufblitzen der Lampe verhindern, wenn ein anderer Verbraucher Müll ins Netz wirft, ohne weitere Bauteile zu verwenden. Allerdings werden aktuell dadurch zwei Halbwellen keine Zündimpulse generiert. Die Lampe wird also kurz dunkler. Das ist zwar wesentlich besser, als ein aufblitzen, aber die Ursache werde ich schon noch finden...
Der nächste Plan ist jetzt erst mal den erwähnten Schaltregler für die Erzeugung der 5V zu ergänzen. Dadurch erhoffe ich mir eine stabiliere Versorung des Controllers. Der stürzt nämlich bei Störungen im Netz auch ab, was ich von den Atmels überhaupt nicht gewohnt bin. Durch den Schaltregler erhoffe ich mir eine bessere Filterung der VCC.
Viele Grüße
Andreas
wieder mal ein Update von mir nach etwas längerer Zeit. Ich habe ewig ein Problem gesucht, und endlich gefunden. Die Dimmung hat grundsätzlich funktioniert. Auch die Umschaltung zwischen An- und Abschnitt. Allerdings hatte ich sehr viel flackern in der Lampe. Die Messung mit dem Oszi hat bestätigt, dass bereits die Ansteuerung ab und zu für eine Halbwelle auf High oder Low bleibt. Für mich war das eindeutig ein Software-Fehler, da ich direkt am AVR-Pin gemessen habe. Ich habe tagelang versucht den Fehler zu finden und es war keiner da.
Der AVR-Pin hat einen Weg bekommen, vermutlich bei einem der vielen Versuche bei dem etwas in der Schaltung den Magic Smoke abgelassen hat. Ärgerlicheweise hat der Pin grundsätzlich funktioniert und nur so ca. jede 100. bis 500. Halbwelle etwas anderes gemacht als die Software ihm befahl.
Deshalb poste ich hier auch wie angefragt die Software bisher. Sie ist noch nicht ganz Stör-Unanfällig. Wenn z.B. ein anderer Verbraucher am Netz eine Spitze erzeugt kommt es vor, dass ein weiterer Nulldurchgang detektiert wird. Dies habe ich versucht zu umgehen, indem ich die Plausibilität der Halbwelle prüfe. Dadurch konnte ich dann erfolgreich das Aufblitzen der Lampe verhindern, wenn ein anderer Verbraucher Müll ins Netz wirft, ohne weitere Bauteile zu verwenden. Allerdings werden aktuell dadurch zwei Halbwellen keine Zündimpulse generiert. Die Lampe wird also kurz dunkler. Das ist zwar wesentlich besser, als ein aufblitzen, aber die Ursache werde ich schon noch finden...
Der nächste Plan ist jetzt erst mal den erwähnten Schaltregler für die Erzeugung der 5V zu ergänzen. Dadurch erhoffe ich mir eine stabiliere Versorung des Controllers. Der stürzt nämlich bei Störungen im Netz auch ab, was ich von den Atmels überhaupt nicht gewohnt bin. Durch den Schaltregler erhoffe ich mir eine bessere Filterung der VCC.
Viele Grüße
Andreas
Code: Alles auswählen
/**
Target: ATmega168 @ 16 MHz
IOs:
PB0 frei
PB1 frei
PB2 frei (war OC1B Ansteuerung PWM-Transistor)
PB3 MOSI
PB4 MISO
PB5 SCK
PC0 frei
PC1 frei
PC2 frei
PC3 frei
PC4 frei
PC5 frei
PD0 frei
PD1 frei
PD2 INT0 Schalter-Eingang
PD3 INT1 Nullgangs-Erkennung
PD4 frei
PD5 OUT Ansteuerung PWM-Transistor Phasenabschnitt
PD6 frei
PD7 frei
Timer 0: 100 Hz für allgemeine Zeitmessung
Prescaler: 1024
Timer 1: PWM-Steuerung und Messung der Periodendauer
OCR1A schaltet den PWM-Pin
OCR1B ist ein Timeout für die Messung der Periodendauer
Timer wird synchronisiert auf Netz-Sinus (Reset des Timer-Stands bei Null-Durchgang)
Annahme Netz-Sinus: 50 Hz --> Periodendauer: 20 ms
--> Clocks pro Periode: 320000 (@ FCPU = 16000000)
da aber jede Halbwelle gesteuert wird (100 Hz) --> Clocks pro Halbwelle: 160000 (@ FCPU = 16000000)
Maximale Timer-Auflösung (16 Bit): 65536 --> Prescaler minimum: 2,44 (@ FCPU = 16000000)
--> Prescaler: 8
--> Timer-Frequenz: 2 MHz
--> Ticks pro Periode: 40000
Annahme Netz-Sinus: 50 Hz --> Ticks pro Halbwelle: 20000
Annahme Netz-Sinus: 60 Hz --> Periodendauer: 16,66 ms
--> Clocks pro Periode: 266666 (@ FCPU = 16000000)
--> Clocks pro Halbwelle: 133333 (@ FCPU = 16000000)
--> Prescaler minimum: 2,03 (@ FCPU = 16000000)
--> Ticks pro Periode: 33333
--> Ticks pro Halbwelle: 16666
**/
#define AVRGCC
#include <avr/io.h>
#include <avr/sleep.h>
#include <util/atomic.h>
#include <compiler.h>
#define Taster_Entprellung 5 // * 10 ms
#define Taster_min_duration 3 // * 10 ms
#define Taster_dimm_duration 100 // * 10 ms
#define Taster_dimm_speed 3 // * 10 ms pro %-Step
#define Taster_doppel_tip_intervall 80 // * 10 ms
#define Halbwellendauer_min 15000 // ca. 66 Hz
#define Halbwellendauer_max 21500 // ca. 45 Hz
#define Halbwellendauer_init 20000 // 50 Hz Standard-Wert
#define Halbwellendauer_timeout 2000 // Timeout, falls kein Nulldurchgang erkannt wird
#define Halbwellendauer_Entprellung 100
#define Netzfrequenz_min 45
#define Lampe_off PORTD = (PORTD | (1<<PD5))
#define Lampe_on PORTD = ~(~PORTD | (1<<PD5))
#define Halbwellendauer_buffer_size 32
#define Halbwellendauer_buffer_divisor 5
typedef struct sSetup
{
U8 Taster_brightness_min;
U8 Taster_brightness_max;
bool Taster_is_Schalter;
bool Taster_direct_control;
U8 Lampe_brightness_min;
U8 Lampe_brightness_max;
U8 Lampe_power_on_brightness_min;
U8 Lampe_power_on_duration;
bool Dimmer_mode_Abschitt;
} tSetup;
typedef struct sDevice_state
{
bool Taster_state;
U8 Taster_value;
bool Taster_value_changed;
bool Lampe_state;
bool Lampe_last_state;
U8 Lampe_value;
U8 Lampe_power_on;
} tDevice_state;
volatile tSetup setup;
volatile tDevice_state state;
volatile U8 Sekunden_precounter = 0;
volatile U8 Taster_last_detection = 0xFF;
volatile U8 Taster_duration = 0;
volatile U8 Taster_dimm_timer = 0;
volatile bool Taster_dimm_direction = TRUE;
volatile U8 Taste_last_tip = 0xFF;
volatile U16 Lampe_PWM_value = 0;
volatile U8 Netzfrequenz_counter = 0;
volatile U8 Netzfrequenz = 0;
volatile bool Halbwelle_was_timeout = TRUE;
volatile U16 Halbwellendauer_current = 0;
volatile U16 Halbwellendauer_last = 0;
volatile U16 Halbwellendauer_buffer[Halbwellendauer_buffer_size];
volatile U8 Halbwellendauer_buffer_pointer = 0;
volatile U16 Halbwellendauer = Halbwellendauer_init;
ISR (TIMER0_COMPA_vect) // Timer 0 output compare A (ca. 100 Hz)
{
Sekunden_precounter++;
if (Sekunden_precounter == 100)
{
Sekunden_precounter = 0;
Netzfrequenz = Netzfrequenz_counter>>1; // gezählte Netzfrequenz übernehmen...
Netzfrequenz_counter = 0; // und neue Zähung starten
}
if (state.Lampe_power_on < 0xFF) // Lampe-Power-On Dauer zählen
state.Lampe_power_on++;
if (Taste_last_tip < 0xFF)
Taste_last_tip++;
if (Taster_last_detection < 0xFF)
Taster_last_detection++;
bool Taster_aktiv = (Taster_last_detection <= 2);
if (setup.Taster_is_Schalter)
{
state.Taster_state = Taster_aktiv; // Bei Schalter-Modus einfach den Wert direkt übernehmen:
}
else // ansonsten Taster auswerten:
{
if (Taster_aktiv)
{ // wenn Taster betätigt:
if (Taster_duration < 0xFF) // ...dann Betätigungs-Zeit zählen
Taster_duration++;
if (Taster_duration >= Taster_dimm_duration) // Taster lange genug gedrückt zum dimmen?
{
if (Taster_dimm_timer >= Taster_dimm_speed) // Dimm-Geschwindigkeit einhalten
{
Taster_dimm_timer = 0;
if (Taster_dimm_direction) // Dimm-Schritt Berechnung
{
state.Taster_value++; // Heller
if (state.Taster_value >= setup.Taster_brightness_max) // Bei Überlauf Dimm-Richtung ändern
{
state.Taster_value = setup.Taster_brightness_max;
Taster_dimm_direction = FALSE;
}
}
else
{
state.Taster_value--; // Dunkler
if (state.Taster_value <= setup.Taster_brightness_min) // Bei Überlauf Dimm-Richtung ändern
{
state.Taster_value = setup.Taster_brightness_min;
Taster_dimm_direction = TRUE;
}
}
state.Taster_state = TRUE; // Auf jeden Fall Status auf "Ein", wenn gedimmt wird
}
else
Taster_dimm_timer++; // Dimm-Geschwindigkeits-Timer weiterzählen
}
}
else // Taster wurde losgelassen:
{
if (Taster_last_detection == Taster_Entprellung) // Schalter lange genug losgelassen (Entprellung)?
{
if (Taster_duration >= Taster_min_duration) // Kurze Impulse ignorieren (ebenfalls Entprellung)
{
if (Taster_duration < Taster_dimm_duration) // Taster war kurz getippt?
{
if (Taste_last_tip <= Taster_doppel_tip_intervall) // dann prüfen, ob letzter kurzes Tipp im Doppel-Tipp-Intervall ist?
{
state.Taster_state = TRUE; // wenn ja, dann Status auf "Ein" mit voller Helligkeit:
state.Taster_value = setup.Taster_brightness_max;
Taste_last_tip = 0xFF;
Taster_dimm_direction = FALSE;
}
else
{
state.Taster_state = !state.Taster_state; // wenn kein Doppel-Tipp, dann einfach Zustand wechseln:
Taste_last_tip = 0; // Timer für Doppel-Tipp erkennung starten
}
}
else
Taster_dimm_direction = !Taster_dimm_direction; // Taster war lange gedrückt (Dimmen) --> Dimm-Richtung umkeheren für nächsten Dimm-Vorgang
}
Taster_duration = 0; // Tastdauer zurücksetzen
}
}
}
}
ISR (INT0_vect) // INT0 (Taste-Eingang, kommt bei Betätigung 100x pro Sekunde)
{
Taster_last_detection = 0;
}
ISR (INT1_vect) // INT1 (Null-Durchgang Netzspannung)
{
if (Halbwelle_was_timeout)
Halbwellendauer_current = 0; // Bei Timeout, Halbewellen-Dauer verwerfen
else
Halbwellendauer_current = TCNT1; // ansonsten Halbwellen-Dauer festhalten
// PWM-Timer (Timer1) steuern:
TCNT1 = 0; // Timer auf Null-Durchgang synchronisieren
TIFR1 = (1<<OCF1B) | (1<<OCF1A); // OCR1A und OCR1B zurücksetzen, falls noch welche anstehen
OCR1A = Lampe_PWM_value; // neuen PWM-Wert übernehmen
OCR1B = Halbwellendauer + Halbwellendauer_timeout; // neuen Timeout übernehmen
bool Halbwellendauer_plausibel = (!Halbwelle_was_timeout && (Halbwellendauer_current >= Halbwellendauer_min) && (Halbwellendauer_current <= Halbwellendauer_max));
if (!Halbwellendauer_plausibel && !Halbwelle_was_timeout) // wenn Halbwellendauer unplausibel, dann letzte Dauer mit einbeziehen (um Störimpulse zu ignorieren):
{
// Funktioniert noch nicht.
U16 Halbwellendauer_temp = Halbwellendauer_current + Halbwellendauer_last; // vermutliche Halbwellendauer ohne Störimpuls berechnen
if ((Halbwellendauer_temp >= Halbwellendauer_min) && (Halbwellendauer_temp <= Halbwellendauer_max))
{
Halbwellendauer_current = Halbwellendauer_temp; // wenn neue Dauer plausibel, dann übernehmen
Halbwellendauer_plausibel = TRUE;
}
}
if (Halbwellendauer_plausibel)
{
if (setup.Dimmer_mode_Abschitt)
{
if (state.Lampe_state) // Wenn Lampe an bei Phasen-Abschnitts-Modus, dann Lampe einschalten
Lampe_on;
}
else
Lampe_off; // Bei Phasenanschnitt Lampe im Null-Durchgang auf jeden Fall ausschalten
Netzfrequenz_counter++;
Halbwellendauer_last = 0;
}
else
Halbwellendauer_last = Halbwellendauer_last + Halbwellendauer_current; // Wenn Halbwellendauer unplausibel, dann Dauer addieren
Halbwelle_was_timeout = FALSE; // Neue Messung, also Timeout-Flag zurücksetzen
}
ISR (TIMER1_COMPA_vect) // Timer 1 output compare A (PWM-Wert der Lampe erreicht)
{
if (setup.Dimmer_mode_Abschitt)
Lampe_off; // bei Phasenabschnitt Phasenabschnitt Lampe ausschalten
else
{
if (state.Lampe_state) // Bei Phasenanschnitt und wenn Lampe an, dann jetzt einschalten:
Lampe_on;
}
}
ISR (TIMER1_COMPB_vect) // Timer 1 output compare B (Timeout erreicht, Halbwelle zu lang)
{
Lampe_off;
Halbwelle_was_timeout = TRUE;
}
int main (void)
{
DDRB = 0b00000111; // IOs konfigurieren und initialisieren:
PORTB = 0b11111111;
DDRC = 0b00000000;
PORTC = 0b11111111;
DDRD = 0b00100010;
PORTD = 0b11110010;
EICRA = (1<<ISC10) | (1<<ISC00); // steigende und fallende Flanke für INT0 und INT1 konfigurieren
EIMSK = (1<<INT1) | (1<<INT0); // INT0 und INT1 aktivieren
// Timer 0 konfigurieren (CTC-Mode 2)
TCCR0A = (1<<WGM01); // CTC-Mode 2, normal port operation
TCCR0B = (1<<CS02) | (1<<CS00); // CTC-Mode 2, Prescaler auf 1024
OCR0A = (F_CPU / 1024l / 100l); // output compare A auf 100 Hz
TIMSK0 = (1<<OCIE0A); // output compare A Interrupt aktivieren
// Timer 1 konfigurieren (Mode 0)
TCCR1A = 0; // Mode 0, normal port operation
TCCR1B = (1<<CS11); // Mode 0, PreScaler auf 8
TCCR1C = 0;
TIMSK1 = (1<<OCIE1A) | (1<<OCIE1B); // output compare A und B Interrupt aktivieren
OCR1A = 0; // PWM-Position setzen (0%)
OCR1B = Halbwellendauer + Halbwellendauer_timeout; // Maximal-Wert (Halbwellen-Dauer) initialisieren
for (U8 i1 = 0; i1 < Halbwellendauer_buffer_size; i1++) // Perioden-Dauer Durchschnitts-Buffer initialisieren
Halbwellendauer_buffer[i1] = Halbwellendauer;
setup.Taster_brightness_min = 10;
setup.Taster_brightness_max = 100;
setup.Taster_is_Schalter = FALSE;
setup.Taster_direct_control = TRUE;
setup.Lampe_brightness_min = 20;
setup.Lampe_brightness_max = 100;
setup.Lampe_power_on_brightness_min = 30;
setup.Lampe_power_on_duration = 50;
setup.Dimmer_mode_Abschitt = TRUE;
state.Taster_state = FALSE;
state.Taster_value = 30;
state.Lampe_state = FALSE;
state.Lampe_value = 30;
state.Lampe_power_on = 0;
Lampe_off;
_delay_ms (100);
sei (); // Interrupts aktivieren
while (1)
{
if (state.Taster_value < setup.Taster_brightness_min) // Taster-Werte auf Grenzen prüfen und ggf. korrigieren:
state.Taster_value = setup.Taster_brightness_min;
if (state.Taster_value > setup.Taster_brightness_max)
state.Taster_value = setup.Taster_brightness_max;
if (setup.Taster_direct_control) // wenn der Taster die Lampe direkt steuert, dann Werte übernehmen:
{
state.Lampe_state = state.Taster_state;
state.Lampe_value = state.Taster_value;
}
if (state.Lampe_value < setup.Lampe_brightness_min) // Lampen-Werte auf Grenzen prüfen und ggf. korrigieren
state.Lampe_value = setup.Lampe_brightness_min;
if (state.Lampe_value > setup.Lampe_brightness_max)
state.Lampe_value = setup.Lampe_brightness_max;
if (state.Lampe_state && !state.Lampe_last_state) // Wurde die Lampe eingeschaltet?
state.Lampe_power_on = 0; // dann Power-On-Timer der Lampe starten
state.Lampe_last_state = state.Lampe_state;
U16 Halbwellendauer_new;
ATOMIC_BLOCK (ATOMIC_FORCEON)
{
Halbwellendauer_new = Halbwellendauer_current;
Halbwellendauer_current = 0;
}
if ((Halbwellendauer_new >= Halbwellendauer_min) && // gemessene Halbwellen-Dauer plausibel?
(Halbwellendauer_new <= Halbwellendauer_max))
{ // dann Halbwellen-Dauer im Glättungs-Buffer ablegen:
Halbwellendauer_buffer[Halbwellendauer_buffer_pointer] = Halbwellendauer_new;
Halbwellendauer_buffer_pointer++;
if (Halbwellendauer_buffer_pointer >= Halbwellendauer_buffer_size)
Halbwellendauer_buffer_pointer = 0;
U32 temp = 0; // Neue Durchschnitts-Perioodendauer berechnen
ATOMIC_BLOCK (ATOMIC_FORCEON)
{
for (U8 i1 = 0; i1 < Halbwellendauer_buffer_size; i1++)
temp = temp + Halbwellendauer_buffer[i1];
temp = temp>>Halbwellendauer_buffer_divisor; // Durchschnitt berechnen
ATOMIC_BLOCK (ATOMIC_FORCEON)
{
Halbwellendauer = temp;
}
}
}
U32 PWM_value = state.Lampe_value; // Neuen PWM-für Lampe Wert berechnen:
if ((state.Lampe_power_on < setup.Lampe_power_on_duration) && // Ist die Lampe noch in Power-Up-Zeit?
(PWM_value < setup.Lampe_power_on_brightness_min)) // und die Helligkeit kleiner als die minimale Power-Up Helligkeit?
PWM_value = setup.Lampe_power_on_brightness_min; // dann Mindest-Helligkeit übernehmen
if (!setup.Dimmer_mode_Abschitt) // Bei Phasenanschnitt wird der Zeitpunkt "von hinten" angenommen
PWM_value = setup.Lampe_brightness_max - PWM_value;
PWM_value = PWM_value * (U32)Halbwellendauer;
PWM_value = PWM_value / (U32)setup.Lampe_brightness_max;
if (Lampe_PWM_value != PWM_value) // Wert nur übernehmen, wenn er sich auch geändert hat:
{
ATOMIC_BLOCK (ATOMIC_FORCEON)
{
Lampe_PWM_value = PWM_value;
}
}
}
return (0);}