Hallo! Ich hab vor, einen 10 Kanal Phasenanschnitt für á 300W Glühlampen zu basteln. Es soll so ähnlich wie das hier werden: http://www.youtube.com/watch?v=n7fIDNcdFz4 Von der Schaltung her hab ich kein Problem. Die ist im Nu gebaut. Allerdings hab ichs nicht so mit der Software. Das ganze soll auf einen ATmega8 laufen. Ich hab bei Farnell den hier gefunden. http://www.farnell.com/datasheets/20572.pdf Scheinbar kann man bei dem Teil nur durch das Verändern des Widerstandes die Lampe dimmen. Wäre auch für mich interessant - zumal ich mich nicht mit Timern und interrupts umherschlagen müsste. Hat jemand von euch Erfahrung mit den Dingern? Wie könnte man den Widerstand mit nem AVR simulieren? Wenn das nicht klappt - könnte mir jemand kurz einen Programmaufbau schildern wie ich das Programm mit einer herkömmlichen Triac Ansteuerung lösen kann? Bis jetzt hab ich soviel: Beim Nulldurchgang gibts einen interrupt und dann muss jeder Kanal eine bestimmte Zeit warten, bis er einen Impuls raus gibt. Wie sage ich zu jeder Zeit jedem Kanal, wie lange er warten respektive wie hell die Glühbirne leuten soll? Grüße Markus
mumpitz schrieb: > Ich hab bei Farnell den hier gefunden. > http://www.farnell.com/datasheets/20572.pdf Vermutlich liegt da aber am Poti eine Menge Spannung an. Das nützt dir nix, es sei denn du willst Potis einbauen und die per Servo drehen... Der Interrupt bei Nulldurchgang sollte kein Problem sein: Im einfachsten Fall legt man die Netzspannung direkt über einen großen Widerstand (so 300...1000kOhm) auf den Interrupt-Eingang. Und Netzspannung hat 50Hz, also dauert eine Halbwelle 10ms. Ist der triac die vollen 10ms an, dann bekommt die Lampe volle Leistung. Ist der Triac nie an, ist die Lampe aus. Nur noch als Info (hoffentlich weißt du das eh): Die Schaltung (auch der AVR) ist damit galvanisch mit dem Netz verbunden. Also im Betrieb nicht dran rumfummeln und KEINESFALLS im Betrieb einen ISP-Programmieradapter daran anschließen. Das könnte die Schaltung, den Programmieradapter und den PC auf einmal killen... Dieses Problem ließe sich mit Opto-Triacs und einem Optokoppler für den Nulldurchgangsdetektor lösen. Würde ich aber nicht machen, wenn die Schaltung nachher in ein isolierendes Gehäuse kommt ist es ja egal, dass der AVR galvanisch am Netz hängt.
Hallo! Das mit dem Interrupt und Potentialtrennung usw ist mir alles klar. Ich verwende die Potentialtrennung mit Optokopplern und zum Testen verwende ich einen Trenntrafo - das nix passiert. :o) Nach dem Interrupt warte ich mit einem Timer je nach Soll-Helligkeit und gebe dann den Zündmpuls raus. Soweit, so gut. Für einen Kanal wäre das ja auch kein Problem. Nur will ich wie in den Video einen Knight-Rider Effekt oder sonstiges machen. Die Eine lampe soll heller werden, die andere dünkler usw. Ich bräuchte also jeder Zeit die Volle Kontrolle über jeden Kanal. Da hab ich keine Ahnung wie das funzt... Wie könnte ich so einen Knigt-Rider Effekt oder sonstiges am besten ausprogrammieren (zumindest von der Struktur her)? Grüße Markus
10x 300w=3000W x 16-facher Einschaltstrom bei Halogenlampen? hohoho Wo war doch gleich die Sicherung?
Markus F. schrieb: > Der Interrupt bei Nulldurchgang sollte kein Problem sein: Im einfachsten > Fall legt man die Netzspannung direkt über einen großen Widerstand (so > 300...1000kOhm) auf den Interrupt-Eingang. Und was soll dann Deiner Meinung nach passieren?
Lutz schrieb: > Und was soll dann Deiner Meinung nach passieren? Dann sammelt er z.B. alle Störungen aller Schaltnetzteile blitzartig ein und steuert die Lampen damit.
Also gleich zum Patent anmelden: Ein wirklich nicht vorhersehbarer Zufallsgenerator ... @ Markus F.: Mal ernsthaft: Schau Dir mal im Datenblatt den Spannungsbereich zur Erkennung des Lowpegels bei den Pins an.
Lutz schrieb: > Mal ernsthaft: Schau Dir mal im Datenblatt den > Spannungsbereich zur Erkennung des Lowpegels bei den Pins an. Es gibt eine Applikationsnote wo das sogar gemacht wird. Das ist total egal der der Strom begrenzt wird und die internen Überspannungsdioden diesen Strom ableiten. Wichtig ist das der Widerstand bei einer entsprechenden Transiente eine passende Leistung und Spannung abhaben kann. Sonst gibt es einen Überschlag und dann macht es wirklich PENG!
Hallo! Ja das mit den 230V über einen Widerstand direkt auf den Eingang kenne ich. Ein Mitstudent hat das mal gemacht. Die Überspannungsdiode macht das möglich. Der Strom muss halt durch den Widerstand begrenzt werden damit die Leistung nicht zu groß wird für die Diode... ... egal ... wie könnte denn so ein Programmaufbau aussehen? Ich hab leider immer noch keine Ahnung -.- Grüße Markus PS: 10 Leuchttafeln á 20 Birnen á 15W = 3kW - das Ding wird abgehen!!! :-)
@ Nachtaktiver mumpitz: Ich habe nichts vom Strom als Problem geschrieben, sondern innerhalb welcher Bereiche die angelegte Spannung am Eingangspin dazu führt, daß der µC diesen als low erkennt (also sozusagen den Togglepunkt von High nach Low). Beim ATMega88PA ist low z.B. zwischen -0.5 V und 0.3 VCC V, high zwischen 0.6 VCC V und VCC + 0.5 V. Das ist ja nun ein erheblicher Spielraum, der die Nulldurchgangserkennung ohne irgendeine Kalibrierung extrem ungenau macht. Gemeint ist wohl die AN AVR182. Die ist ja schon etwas älter; evtl. haben sich die Schwellwerte ja seit dem verändert.
Moin Moin Also ich hab das mit dem Phasenanschneiden so gelößt. Einen Timer so eingestellt dass ich in 10ms (also eine 50Hz Halbwelle), 255 Timerinterrupts bekomme. Hinter dem Gleichrichter vom Netzteil für den Atmega8, kommt ein Spannungsteiler (mit einer 5V Zener) und von da gehts über einen 10K Widerstand an den externen Interrupt. Die natürlich kommt zwischen dem Trafo dem Glättkondensator eine Diode, damit ich mir den Nulldurchgang nicht wegglätte. Siehe Schaltschnipsel im Anhang. In der ISR vom Interrupt starte ich den Timer. Und schalte alle Ausgänge aus. Dann sollten die Triacs auch sperrend sein (da Nulldurchgang). Dann zähle ich die 255 Timerinterrupts mit. Jeder von meinem 5 Kanälen einen Totzeitwert in nem Array. Ist der Zählerwert größer dem Wert im Array schalte ich den Ausgang an. Der Triac wird über einen Optokoppler gezündet. Und bei nächsten Nulldurchgang geht der Spaß von vorne los. Quasi zum Netz synchrone Software-PWM. Das funktioniert meistens ganz so, nur wenn zu viel störender Mist (von Schaltnetzteilen und ähnlichem) auf der Leitung ist flackerts ab und zu mal). Ich hoff mal das war halbwegs zu verstehen. Wenn nicht meld ich mich morgen nochmal zu weniger später Stunde, mit ein paar Programm Schnipseln. Gruß Sebastian
@Lutz: Ich habe falsch zitiert. :) Ich wollte das "Was soll deiner Meinung nach passieren" - zitieren was sich danach angehört hat als ob alles mögliche passieren sollte nur nicht die gewünschte Erkennung. Hat sich aber inzwischen geklärt.
Hallo! Hab jetzt die Schaltung aufgebaut und bereits getestet. Funktioniert bis jetzt ganz gut und kann auch schon heller und dunkler werden. Ich hab feststellen müssen, dass meine Interrupts nicht beim Nulldurchgang kommen, sondern um 2,4ms früher. Das ganze sieht wie im Anhang aus und kommt aufgrund meines Optokopplers zusammen mit den Schaltschwellen meiner Hex-Inverter zustande. Ich hab mir gerade überlegt, dass ich die fallende Flanke als Interrupt nehmen sollte. Dann kann ich zwar nicht mehr komplett aussteuern, aber die Glühlampen sind sowieso zu hell. Also egal. Zum Programmaufbau... Der Interrupt startet einen Timer, der in meinem Fall in 6,6ms 255 Timer-Interrupts auslöst. Bei jedem Interrupt wird bis 255 eine Variable erhöht. Jedem Ausgang ist eine Zahl von 0-254 zugeordnet. Stimmt die Timervariable mit der des Ausganges überein, wird er kurz auf 1 gesetzt. Könnte das so funktionieren? Bzw. wie weise ich jedem der 10 Kanäle eine sich ständig ändernde Variable zu? Da werde ich ja alt beim Schreiben! @ Sebastian S. --> könntest du vielleicht zumindest die Eckpunkte deines Codes Posten? Damit ich was zum nachvollziehen hab... Grüße Markus
Moin Moin Eigentlich ist es genau der selbe Ansatz wie bei dir, aber klar ich kann mal die wichtigsten Schnippsel posten : Die ISR für den externen Interrupt :
1 | volatile uint8_t lamp_state[5]; |
2 | volatile uint8_t slices; |
3 | |
4 | ISR(INT0_vect ) { |
5 | uint8_t i; |
6 | |
7 | TCNT2 = 216; //Load timer |
8 | slices = 0; |
9 | |
10 | TCCR2 |= (1 << CS21); //Start timer |
11 | |
12 | for(i = 0; i < 5; i++) { |
13 | if(lamp_state[i] == 0) { |
14 | PORTC |= (1 << i); //lampstate = 0 => on all the time |
15 | }
|
16 | else { |
17 | PORTC &= ~(1 << i); |
18 | }
|
19 | }
|
20 | }
|
Und die Timer ISR, da wo der eigentliche Spaß passiert :
1 | ISR(TIMER2_OVF_vect) { |
2 | uint8_t i; |
3 | |
4 | TCNT2 = 216; //Reload the timer |
5 | |
6 | slices++; |
7 | |
8 | //Turn on lamps until next zero crossing
|
9 | for(i = 0; i < 5; i++) { |
10 | if(slices == lamp_state[i]) { |
11 | PORTC |= (1 << i); |
12 | }
|
13 | }
|
14 | |
15 | //Stop timer until next zero crossing
|
16 | //lampstate = 255 => off all the time
|
17 | if(slices == 254) { |
18 | TCCR2 &= ~(1 << CS21); |
19 | }
|
20 | |
21 | }
|
Die ganze Geschichte läuft mit 8mhz. Falls du ein paar Zahlen nachrechnen möchtest. Und PORTC geht zu den Optokopplern für die Triacs. Der Rest müsste sich eigentlich erschließen. Ich fahr jetzt erstmal in Urlaub. Gruß Sebastian
Tach mumpitz! > Das ganze sieht wie im Anhang aus und > kommt aufgrund meines Optokopplers zusammen mit den Schaltschwellen > meiner Hex-Inverter zustande. What? Hexinverter? Wenn man dir helfen soll wäre jetzt der richtig Zeitpunkt deine Schaltung zu posten. Ich kann mir nämlich nicht wirklich vorstellen, wozu man beim erkennen eines Nulldurchgangs mit einem AVR einen Hexinverter braucht. > Ich hab mir gerade überlegt, dass ich die fallende Flanke als Interrupt > nehmen sollte. Dann kann ich zwar nicht mehr komplett aussteuern, aber > die Glühlampen sind sowieso zu hell. Also egal. Der Hund liegt bei der ERKENNUNG des Nulldurchgangs begraben nicht bei der Auswertung des vermurksten Signals. Sprich, du solltest erst die Erkennung des Nulldurchgangs vernünftig hibekommen, bevor du versuchst den Zündpunkt zu optimieren. > Zum Programmaufbau... Der Interrupt startet einen Timer, der in meinem > Fall in 6,6ms 255 Timer-Interrupts auslöst. Bei jedem Interrupt wird bis > 255 eine Variable erhöht. Was auch ein richtiger Ansatz ist. Mir ist momentan nur noch nicht ganz klar, warum du den timer so konfigurierst, dass du mit 8 bit nur bis 6,6ms zählen kannst. Kleine Rechnung: Nehmen wir an du nutzt den internen 8MHz Oszillator. Du willst in 10ms 256 counts machen. Entspricht: 8.000.000Hz/100Hz/256-1 = 311,5. Heißt ohne prescaleing musst du bis 312 zählen. Um das dem Mega8 zu verklickern nimmst du Timer1 im CTC Modus mit OCR1A als top: OCR1AH = 1h; OCR1AL = 38h; TIMSK = 10h; TCCR1B = 9h; Jetzt kannst du im OCI1A deine 8 bit inkrementieren. Du solltest aber drauf achten, dass du keinen Überschlag machst. Also nur hochzählen, wenn kleiner 255. Im externen interrupt solltest du zwei Dinge tun: 1) TCNT1H und L auf 0 setzen und 2) den 8 bit Zähler auf 0 setzen. > Könnte das so funktionieren? Bzw. wie weise ich jedem der 10 Kanäle eine > sich ständig ändernde Variable zu? Da werde ich ja alt beim Schreiben! Wie gesagt, Konzept OK. Da das Dimmen in interrutps passiert, kannst du den Rest der Zeit wunderbar in einer Hauptschleife verbringen und dir entsprechende Sinuskurven ausrechnen. Oder du fängst erstmal langsam an und dimmst linear. Dazu baust du dir einfach eine feste Zeitbasis von meinetwegen 4ms und spielst mit den Dimmervariablen Ping Pong. Thor
Guten Morgen alle samt! Du hast recht. Ich sollte den Nulldurchgang tatsächlich etwas besser erwischen. Die verwendete Schaltung hab ich im Anhang beigefügt und stammt vom "Mikrocontroller gesteuertem 3 Kanal Dimmer" hier http://www.unmuth.de/pdf/doku_dimmer.pdf Allerdings hab ich statt R11 2k verwendet statt die dargestellten 1k, weil es mit 1k nicht geschaltet hat. Hab mal eine Simulation der Schaltung angehängt. Mit einem 10k Widerstand wärs schon besser. Allerdings bin ich mir unsicher, ob es dann noch schaltet, weil der Ausgang nur noch auf 2,5V kommt. Mit der Temperaturabhängigkeit usw... ich werds dann gleich ausprobieren. Wie das mit dem Programmaufbau funktioniert, muss ich mir jetzt noch mal genau durchdenken. Aber das kommt noch, wenn der Nulldurchgang einigermaßen genau ist. Gibt es noch eine bessere Möglichkeit mit Optokoppler den Nulldurchgang zu erkennen? Grüße Markus
Mhhh, dein Hauptproblem wird der wirklich gewaltige Vorwiderstand am Opto sein. Bei 3,25mA(und das ist ja der Maximalwert, spannend wird es erst bei den Stellen nahe 0V) werden die meisten Optos noch nicht so richtig warm. Laut Datenblatt kommt der 4N25 unter 0,5mA gar nicht mehr. Das entspricht einem Totband von 50V! Wenn man das durchrechnet ergeben sich allein durch diese 50V 0,5ms, die der Optokoppler zu früh dicht macht. Noch dazu kommt, dass der 14 ein Hysterese von 1V hat. Der Schaltet schon bei 1,4V aus. Im Bezug auf die 5V Amplitude des Eingangssignals, gleicht das eher einem blinde Kuh Spiel als dem zuverlässigen Treffen eines Nullpunktes. Der 14 ist für diese Anwendung ungeeignet. Seine Hysterese ist extrem von der Versorgungsspannung abhängig. Bei 4,5V Vh=0,98V und bei 6V schon 1,25V. Außerdem machen die Schwellspannungen(was noch schlimmer für deine Anwendung ist) einen Satz nach Oben um den Faktor 1,5. Dabei haben die mega doch schon einen wunderbar für den Zweck geeigneten Komparator onboard. Der hat nur ein paar mV Hysterese und noch besser: Du kannst dir die Schwellspannung über ein Poti einstellbar machen. Schaltungsbeispiel im Anhang. Thor
Ich hätte da mal einen Vorschlag als Diskussionsgrundlage, für die Nulldurchgangserkennung (Anhang). Der Elko (einige 10 µF) lädt sich wärend der Halbwelle über R1 auf die Z-Spannung der ZD auf. Wenn die Wechselspannung durch Null geht, wird der Transistor durch R2 aufgesteuert. Dazu muss die Spannung über R1 kleiner sein als die Elkospannung - Flusspannung der LED - Ube des Transistors. Jetzt kommen am OK nur noch schmale Impulse wärend des Nulldurchgangs an. Da R2 recht hochohmig ist (soll ja nicht viel Strom verheizen), könnte evtl auch eine Darlingtonkombination erforderlich sein. Die Dioden sollten alle Netzspannung sperren können. mfG ingo
Sorry, gerade ist mir aufgefallen, das ich die Diode vor der Basis verkehrt herum eingemalt habe. mfG ingo
Tach Ingo! Das ist gut. Ich habe es jetzt noch nicht vollständig durchgerechnet aber das sieht wirklich interessant aus. Ich werde das noch ein bisschen bebrüten und simulieren. Thor
OK, ein kleiner Fehler ist noch drin: Die Kollektor-Basis-Strecke wird bei einer negativen Halbwelle nicht grade erfreut sein. Lösung ist praktisch schon vorhanden, nur falsch angeschlossen. Die 100k an der Basis müssen in Serie zur Basis nicht parallel. Dann ist die Schaltung wirklich gut. Sie liefert zwar nur einen Impuls für den negativen Nulldurchgang aber hey, ein µC wird wohl noch 20ms mitzählen können. Mit einem 4N25 und 1k pullup sollten sich Schaltzeiten von unter 100µs erreichen lassen. Das ist gut. Thor
Hallo Alex! In Deinem letzten Modell hattest Du den Gleichrichter weggelassen, daher nur einen Nulldurchgangsimpuls. Habe hier nochmal den ursprünglichen Vorschlag simuliert, wenn du zu D6 kein Vertrauen hast und Sperrbelastung für die Transistoren vermeiden möchtest, kannst Du noch ne Diode mit der Anode an Basis Q2 und Kathode an die Kathode von D5, dann kann die Basis nicht positiver wie der Emitter werden. mfG ingo
Habe die Schaltung noch ein Wenig optimiert, in Richtung niedriger Stromverbrauch und höhere Auflösung: In der Simulation ist der Impuls hinter dem OK jetzt 20µs breit. Ich kenne den 4N25 zwar nicht, mit dem MB104 (etwas schneller als CNY17) halte ich mal 50µs für realistisch. und das ist 1/200 der Halbperiode, sollte also für eine Phasenanschnittsteuerung reichen. mfG ingo
Mal unabhängig von der Nulldurchgangserkennung: bedenke, dass Halogenlampen im kalten Zustand extrem niederohmig werden. Darum hat jeder professionelle Dimmer eine Vorheizung. Also sollte die Mindestleistung einstellbar sein, und zwar so, dass die Lampen immer leicht glimmen. Die Lebensdauer der Lampen wird so drastisch erhöht.
Ach ja wie schön, wenn man mal wieder nicht durchblickt. War gestern einfach schon zu spät. Du hast schon recht, deine Schaltung ist gut. Thor
Hallo! Zu mir noch mal - Jetzt hab ichs zwar geschafft das Teil wie beschrieben mit dem Timer1 in CTC Modus 256 Interrupts in 10ms zu machen und ich habs auch geschafft eine 100W Lampe damit zu Dimmen. Auch für mehrere Kanäle wäre nicht mehr viel Arbeit zu machen. Jetzt hab ich mich ein bisschen mit dem Gedanken der synchronen Netzbelastung befasst und bin dabei auf folgenden Thread gestoßen: Beitrag "Welche Drossel für Phasenanschnitt bei 1,8kW" Darin wird gezeigt, dass man laut EVU 3kW nur ca. 2x pro Minute schalten. Meine Dimmerschaltung würde 100x pro Sekunde schalten!!! Somit ist das ganze Projekt hinfällig.
Mhhh, da ist was dran. 3kW sind nicht zu unterschätzen. > Darin wird gezeigt, dass man laut EVU 3kW nur ca. 2x pro Minute > schalten. Ich vermute +darf. Die Verordnung bezieht sich auf ungefilterte Verbraucher. > Meine Dimmerschaltung würde 100x pro Sekunde schalten!!! Das macht es sogar einfacher. Denn um so höher die Frequenz, desto kleiner wird die Filterdrossel. Logischerweise ist bei Phasenanschnitt die Schaltfrequenz immer die selbe. Die Drosselinduktivität richtet sich also nur nach der Durchgangsleistung. Ich habe mal einen von unseren 18kW Dimmern reparieren müssen. Der hatte pro 3kW Kanal eine Drossel mit etwa anderthalb kilo Eisen drin. Konnte man noch gut mit zwei Händen greifen. Für deine lächerlichen 300W würde ich sagen reicht pro Kanel etwa eine handgroße Drossel plus daumengroßem Entstörkondi. Diese Angaben sind jetzt erstmal ohne Gewähr, da nur grob über den Daumen gepeilt. Ich suche mal noch nach einere vernünftigen Formelsammlung für den Zweck. Thor
Hallo! Hm... wenn das mit dem Filter stimmt, dann wär echt interessant für mich! Wäre nett, wenn du ein paar Formeln oder zumindest richtwerte Hättest! Meinst du so einen Tiefpassfilter 2. Ordnung wie im Anhang? Dann bräucht ich eigentlich nur noch eine Sinnvolle Grenzfrequenz. Die Formel dazu ist einfach: 1/(2*pi*sqrt(L*C)) Dann bräucht ich noch eine dem entsprechende spule, die bei dem strom nicht in Sättigung geht und gut ist. Oder sehe ich da etwas falsch? Grüße Markus
oszi40 schrieb im Beitrag #1815675 am 12.08.2010 17:37:
> 10x 300w=3000W x 16-facher Einschaltstrom bei Halogenlampen? hohoho
Der Draht der Drossel sollte etwas dicker, als der der zuständigen
Sicherung sein. :-)
Hallo! oszi40 schrieb: > Der Draht der Drossel sollte etwas dicker, als der der zuständigen > Sicherung sein. :-) Naja so schlimm ists nun auch wieder nicht. Eine normale 16A Sicherung würds mit Sicherheit auch tun. Es ist ja nicht so, dass alle Lampe auf einmal eingeschaltet werden und wenn ich einen vergleichbaren Scheinwerfer ans Netzt stecke, dann funktioniert er auch noch... Das Problem, das mir mehr Sorgen macht, ist die Netzsynchronität. Eine Phase an der grenze zu betreiben und die restlichen drei mit undefinierter Last stell ich mir nicht optimal vor. Da würde mir die Überlegung besser gefallen, mit einer B6 einen Gleichspannungszwischenkreis zu zaubern und dann mit einer Halbbrücke voller MOSFETs die Lampen zum Leuchten zu bringen. Egal. Die Zeit reicht wohl nicht mehr, das Prjekt fertig zu stellen. Schade eigentlich. Hätte echt toll ausgesehen! Aber danke viel mals für euere Hilfe! Grüße Markus
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.