Forum: Mikrocontroller und Digitale Elektronik Dimmer flimmert


von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche nun schon seit Tagen, meine Problemquelle zu lokalisieren.
So langsam gehen mir die Ideen aus.

Ich habe von theaterzentrum.at/technix/ den Dimmer nachgebaut
(allerdings als Triac den TIC246D). Und als uC einen ATMega8, d.h. das
Programm umgeschrieben.

Nun das Problem: mein Dimmer flimmert mit etwa 50Hz. Nicht doll, aber
erkennbar.

Folgendes habe ich schon probiert:
- habe nur bei positiven Halbwellen gezündet. Ergebnis: wie erwartet,
es flimmert deutlicher, Lampe wird nur halb hell, ansonsten ok.

- habe nur bei negativen Halbwellen gezündet. Ergebnis wie eben.

- Dachte, vielleicht liegt es an irgendwelchen Ungenauigkeiten der
Zündzeitpunkte. Habe mit den Timings gespielt (Zündung bei neg.
Halbwelle etwas später/früher als bei positiver). Ergebnis: ändert
nix.

Besonders deutlich ist das flimmern bei mittleren Helligkeiten. Ganz
hell ist ok.

Da ich als Hobbybastler kein Oszi habe, will ich einfach mal fragen, ob
jemand schon einmal ein ähnliches Problem hatte und woran es gelegen
hat. Mir gehen langsam die Ideen aus, was ich noch überprüfen könnte.

Im Anhang sind die interessanten Stellen des Programms.

Gruß,
Sebastian

von Kurt (Gast)


Lesenswert?

Hallo Sebastian,

Der Thy. hat ev.  zu wenig Steuerleistung.

Gruss Kurt

von Sebastian (Gast)


Lesenswert?

@Kurt:
danke. Werde mich heute abend mal dahinter klemmen.

@all:
weitere Ideen? Kann es sein, dass die Induktivität zu gering
dimensioniert ist? Führt sowas zu flimmern? Habe nämlich mal (bei sehr
geringer Last) die Spule überbrückt und voila, es flimmert deutlich
mehr. Ein zweiter Ansatz geht bisher dahin, dass die
Nulldurchgangskennung irgendwie Mist liefert. Ich bleibe am Ball.

Gruß,
Sebastian

von leo9 (Gast)


Lesenswert?

Da Voll-Ein funktioniert und jetzt die Geschichte mit der Spule würd ich
deiner Nulldurchgangstheorie gute 80% Fehlerwahrscheinlichkeit geben.
Ich wollte dich eh schon bewundern dass du die Nulldurchgangerkennung
so locker ohne Kontrolle mittels Oszi programmiert hast. Bei mir
schleicht sich bei solchen Dingen immer mindestens ein Fehler ein ;-)

grüße leo

von Sebastian (Gast)


Lesenswert?

Gut, dann warte mit der Bewunderung, bis ich den Fehler gefunden habe.
Dann sage ich Bescheid, damit Du damit anfangen kannst ;-)

Gruß,
Sebastian

von Michael (Gast)


Lesenswert?

Ich schließe mich der Meinung von Leo9 an. Wie du es beschreibst,
scheint es so zu sein, daß beim Nulldurchgang der Triac nicht gelöscht
wird und er nach dem Nulldurchgang die folgende ganze Halbwelle
durchschaltet. Denk daran, daß ein Triac nur löscht, wenn der Strom
durch ihn Null ist. Wenn er über einen Nulldurchgang noch geschaltet
ist, hat er erst beim nächsten Nulldurchgang die Chance zu löschen. Die
Nulldurchgangserkennung ist der sensibelste Bereich eines Dimmers.
Was sehr gut funktioniert ist folgende Schaltung:
von L einen Widerstand 100k auf eine Gleichrichterbrücke, dahinter
einen Optokoppler (z. B. CNY 17/4). Achte auf die verlustleistung des
Widerstandes. Ich habe immer 2x47K in Reihe geschaltet. Der Optokoppler
bekommt einen 10K vom Kollektor nach Vcc, der Emitter geht an Masse. Das
Signal am Kollektor einmal über einen Schmitt-Trigger und ab an den
Input Capture Pin. Der Rest ist Software. Viel Spaß.
Michael

von Sebastian (Gast)


Lesenswert?

Ich schließe mich dem an. Da ist zu 99% irgendwas faul mit der
Nulldurchgangserkennung. Ich benutze einen 6N138, und ich weiss noch,
dass es sauschwer war, meine ganze Schaltung zu kalibrieren. Ohne Scope
hast du da nicht allzu viele Chancen, denke ich. Klar kann man sich das
ganze theoretisch auch anhand von Signalformen klar machen, aber ich
fand es viel einfacher, direkt auf dem Scope zu sehen, wann welcher
Impuls kommt und wann ich was wieder rausschicke.

von Benjamin Böck (Gast)


Lesenswert?

Ich bastelle im Moment an einem ähnlichen Problem...

Das mit dem Nulldurchgang ist ohne Oszi dadurch zu lösen das du einfach
den fallenden und den steigenden Durchgang auswertest und so einpegelst
das sie beiden Zeiten symetrisch sind. D.H. du startest den Timer bei
fallend- Null speicherst bei steigend- Null und stoppst bei fallend-
Null. Dann vergleichst du die beiden Zeiten und wenn dein Pegel zu hoch
oder zu tief liegt wirst du verschieden lange zeiten bekommen. Das ganze
einregeln bis es symetrisch ist und dann sollte es funktionieren.
Eventuell must du dann noch die Phasenverschiebung ein bisschen
korriegieren was aber durch Versuche nicht zu schwer sein dürfte. Auf
jeden Fall bist du dann sicher beide Halbwellen auch in den
extremstellen zu zünden.

von Sebastian (Gast)


Lesenswert?

Hallo zusammen,

also, ich habe mich vielleicht ungenau ausgedrückt. Die Lampe flimmert
nach unten, nicht nach oben. D. H. der Triac schaltet sicher ab. Ich
glaube aber, dass er nicht immer sauber zündet.

Wäre der Nulldurchgang extrem ungenau, hätte ich Probleme entweder am
oberen Ende oder am unteren Ende der Helligkeitsscala. Ich kann aber
sowohl bis ganz Null als auch bis ganz voll problemlos dimmen. Von
daher scheint der Nulldurchgang zumindest grob stimmen.

Ich probier jetzt noch was aus, wenns klappt, sage ich Bescheid.

Gruß,
Sebastian

von Sebastian (Gast)


Lesenswert?

Hallo nochmal,

habe es jetzt mit stärkerer Drossel propiert, ohne Erfolg.

Zum Thema Nulldurchgang: Ich triggere auf den fallenden Impuls, starte
dann einen Timer, der 10ms später einen Interrupt auslöst, der mir den
"zweiten Nulldurchgang" anzeigt. Damit habe ich keine Probleme, wenn
der Schmitt-Trigger unterschiedlich lang für den fallenden/steigenden
Nulldurchgang braucht. Dieses ganze Gebilde habe ich dann mittels
Timermodifikation so lang hin- und hergeschoben, bis ich weder am
dunklen noch am oberen Ende Probleme hatte: Triac schaltet nicht ab
(dunkles Ende erzeugt Lichtblitze), oder zu früh an (Triac schaltet
noch in der "alten" Halbwelle und dann sofort im Nulldurchgang
ab->"Dunkle Blitze" am oberen Ende der Helligkeitsscala). Somit
dürfte es grob passen.

Mein Problem liegt aber in der Mitte der Helligkeitsscala. Da flimmert
die Lampe sehr regelmäßig und schnell (aber nur ein bisschen). So, als
ob Helligkeit der pos. Halbwelle und Helligkeit der neg. Halbwelle
nicht gleich sind.

Ich zünde aber sicher in beiden Halbwellen. Ich kann nämlich problemlos
volle Helligkeit erreichen (auch ohne Helligkeitssprung).

Da ich aber den zweiten Nulldurchgang genau 10ms nach dem ersten
"emuliere", und dann das selbe passiert (egal, ob Nulldurchgang oder
Timer), ist dies als Fehlerquelle unwarscheinlich. (Habe allerdings
auch schon mit dieser Zeitspanne experimentiert, ohne Erfolg. Jetzt
sind es wieder genau 10ms).

Komische Sache, das.

Gruß,
Sebastian

von Sebastian (Gast)


Lesenswert?

Hallo zusammen,

ich habe mein Problem gelöst. Dieser Post dient dazu, eine Lösung
anzubieten, falls jemand das selbe Problem hat.

Das Problem war (sozusagen) die Nulldurchgangskennung. Wie oben
beschrieben, habe ich auf den fallenden Nulldurchgang getriggert, dann
einen Timer gestartet, der mir exakt 10ms später den Zeitpunkt des
steigenden Nulldurchgangs anzeigen sollte.

Das Problem war das exakt 10 ms später. Da ich einen 8-Bit-Timer (bei
8MHz) verwendet habe, war es nicht möglich, 10,00000 ms abzupassen,
sondern nur 10,012 ms. Ich ging von der irrigen Annahme aus, das die
0,012 ms, die ich bei der Hälfte der Halbwellen verspätet zünde, sich
nicht bemerkbar machen (zumal Glühwendeln ja den Ruf haben träge zu
sein). Und somit hatte ich die Ungenauigkeit schon aus dem Auge
verloren, als ich das Programm fertig hatte.

Irrtum! Das Flimmern eines 10 us zu spät zündenden Triacs sieht man
deutlich!

Ich verwende jetzt einen 16-Bit-Timer, mit dem ich genau 10,00000ms
erreiche. Und das Flimmern ist weg.

Also: Bei Dimmern kommt es auf jede us an!

Danke, an alle, die versucht haben, mein Problem mitzulösen. Das
Problem war ICH.

Gruß,
Sebastian

von Stefan Kleinwort (Gast)


Lesenswert?

Hi Sebastian,

die 12us alleine werden sicher nicht das Problem ausgemacht haben. Bei
einem Timer, der mit 8Mhz/1024 (Prescaler = 1024) läuft, hast Du eine
zeitliche Ungenauigkeit von 128us, je nachdem, auf welchem Wert der
Prescaler beim Beschreiben des Timers gerade steht. Vielleicht hätte
man Dein Problem auch durch Rücksetzen des Prescalers lösen können.

Viele Grüße, Stefan

von Sebastian (Gast)


Lesenswert?

Hallo Stefan,

Bei 8 Mhz und einem Prescaler von 1024 (256 geht nicht, damit kommt man
max. auf 8,2 ms), TCNT=0xb2 hat man eine Overflow-Zeit von 10,016 ms,
abzüglich der gewollten 10 ms bleiben 0,016 ms = 16 us Abweichung vom
Soll (nicht 12, oben hab ich mich vertan).

Und in der Tat, als ich das entdeckt und bereinigt hatte, war das
Flimmern weg. Ich bin also ziemlich sicher, dass das das Problem gelöst
hat, da ich sonst nix gemacht habe.

Gruß,
Sebastian

von Sebastian (Gast)


Lesenswert?

Noch mal schnell zum Thema Nulldurchgang:

Ich habe den Nulldurchgang mittels Optokoppler und Schmitt-Trigger
direkt an den 220V dedektiert. Damit hat man eine sehr exakte
Nulldurchgangserkennung, die sehr einfach zu kallibrieren ist, auch
ohne Scope (hab immer noch keins, obwohl ich zwischenzeitlich überlegt
hatte, mir eins zuzulegen).
@leo9: Du darfst mich also bewundern. Musst aber nicht, wenn Du nicht
willst ;)

Eine Nulldurchgangskennung nach dem Trafo (á la Semitone-Dimmer) hat
den Nachteil, dass die Spannung an der Sekundärwicklung immer eine
Phasenverschiebung gegenüber der Spannung an der Primärwicklung hat. Da
kann man ohne Scope nix machen (es sei denn, man hat viel Geduld und
spielt so lange mit den Timings, bis es passt).
Das Dumme ist, dass diese Phasenverschiebung Lastabhängig ist, d.h. je
mehr Strom man aus dem Trafo zieht, um so stärker wird sie. Also muss
man entweder sicher sein, dass die entnommene Leistung fast konstant
ist, oder man hat fast keine Chance, das sauber hinzukriegen.

So long,
Sebastian

von Stefan Kleinwort (Gast)


Lesenswert?

Der Umstieg von 8-Bit-Timer auf 16-Bit-Timer war die Lösung. Damit hast
Du nicht nur die 12us zuviel behoben, sondern auch ein viel größeres
Problem: je nachdem, auf welchem Wert der Prescaler beim
Nulldurchgang-IR steht:

Wenn der Prescaler kurz vor dem Nulldurchgang übergelaufen war, dann
dauert es bis zu 1024 / 8000000Hz = 128us bis zum nächsten Timer-Tick,
d.h. bis der Timer von Null nach 1 zählt.

Wenn der Prescaler kurz vor dem Überlaufen ist, dann kommt der
Timer-Tick direkt nach dem Nullsetzen des Timers.

Diese 128us zeitliche Ungenauigkeit hast Du durch den Umstieg auf den
16-Bit-Timer jetzt nicht mehr.

Viele Grüße, Stefan

von Sebastian (Gast)


Lesenswert?

OK, jetzt hab ichs kapiert.

Danke.

Gruß,
Sebastian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.