Hallo zusammen, das Thema Phasenanschnitt (50Hz Netzspannung) wurde schon etliche male behandelt. Eine passende Software dafür konnte ich jedoch leider nicht finden. Mein Problem: Ich habe einen Phasenanschnittsdimmer mit ATMega8 gebaut. An den OC1A-Pin ist ein TRIAC angeschlossen, über einen Jumper kann ich entweder am ICP-Pin oder am INT0-Pin ein Rechtecksignal einlesen, welches bei jedem Nulldurchgang seinen Zustand umkehrt. Nun meine Frage: Wie kann einen möglichst effizienten Code generieren, der mir den TRIAC nach einer eingestellten "Dimm-Verzögerung" (z.B. 8ms) einschaltet und kurze Zeit später, jedoch auf jeden Fall bei t < 10ms, wieder ausschaltet? Das Ganze eben möglichst ohne 3 Interrupts dafür zu benutzen o.ä.. Leider blicke ich bei den ganzen "Phase Corrected Frequency Corrected PWM Modes" etc. im Datenblatt nicht ganz durch bzw. sehe noch nicht, wie ich diese Funktionen geschickt einsetzen kann... Wäre für Tipps sehr dankbar! Schöne Grüße, Alex
Als Trigger muss man erst mal ein gefiltertes Netz verwenden. Ohne rabiaten Filter, der die Harmonischen rigoros wegmacht ist nichts. Dann einen Timer laufenlassen. Immer jeweils vom Trigger her. Und gleichzeitig die Periode pruefen, ist sie nicht relativ genau 20ms, dann macht man zur Sicherheit nichts. Einen durchgehenden Timer wuerd ich nicht verwenden, der laeuft dem Netz ueber eine gewisse Zeit davon und es knallt. Das Problem mit der Filterung ist, dass man das Netz selbst veraendert.
A...aha Soooo. schrieb: > Dann > einen Timer laufenlassen. Immer jeweils vom Trigger her. Genau, ich wollte auch bei jedem Wechsel des Trigger-Signals (es wechselt, wie gesagt, bei jedem Nulldurchgang) den Timer "resetten". >Und gleichzeitig die Periode pruefen, ist sie nicht relativ genau 20ms, dann >macht man zur Sicherheit nichts. Richtig, das hatte ich mir auch überlegt. Nun dennoch die Frage, wie man dazu geschickt die Timer-Funktionen des AVRs nutzen kann ohne alles in Software und mit Interrupts zu erledigen. Kann man nicht vieles davon in Hardware realisieren (mit den ganzen Timer-Spezialmodi)? Gruß, Alex P.S.: >und es knallt. Was denn und warum? Stimmt im schlimmsten Fall nicht einfach der "Dimm-Wert" nicht?
Gast
#1972633
PWM ist hier nicht ganz angebracht. Es ist ja dein AC-Netz, das die Zeitvorgaben liefert, und nicht du, der du z.B. eine Grundfrequenz für PWM festlegst. Eine Überlegung: Was macht dein Prozessor denn noch? Nur Phasenanschnitt? Rechne dann doch einmal aus, wie sehr der sich langweilen wird zwischen den Nulldurchgängen. Ansonsten kann man sowas für zwei Kanäle prima mit den beiden Auffangregistern (Compare) eines Timers machen. ist zwar immer noch mit Spatzen auf Kanonen geschossen, macht aber nichts :-)
Was soll den geschnitten werden? Ohmsche oder Induktive Last?
Markus Müller schrieb: > Was soll den geschnitten werden? > Ohmsche oder Induktive Last? In erster Linie Ohm'sche Last. Ich glaubte jedoch (bis zu deiner Frage), dass induktives Dimmen genauso funktioniert... :-) >Was macht dein Prozessor denn noch? Es ist noch ein lokales User-Interface (1 LED, ein Drehencoder, ein Button) dran und eine ZigBee Schnittstelle (per UART) für "ein Bisschen" Kommunikation mit anderen Geräten. Ist aber nicht so "zeitkritisch". >Ansonsten kann man sowas für zwei Kanäle prima mit den beiden >Auffangregistern (Compare) Es ist nur 1 Kanal. Aber erläutere mir bitte mal genauer, wie du das meinst...
Gast
#1972656
Nun, parametrier einen Timer in der Art, sodass er innerhalb einer Halbwelle gerade nicht überläuft. Er soll am Ende der Halbwelle den Wert X erreichen. Mit einem Auffangregister setzt du diesen Wert X TOP ein, das wäre dann einer von den CTC-Modi. Dadurch wird der Timer am Ende der Halbwelle wieder zurückgesetzt. Dann leg eine Tabelle mit Vergleichswerten an. '0' wäre volle Leistung, X wäre gar keine Leistung, dazwischen dann z.B. noch linearisieren. Legst du nun einen dieser Vergleichswerte in ein zweites Auffangregister (das erste sorgt ja bereits fürs Rücksetzen des Timers), so hast du deinen Zündzeitpunkt.
Hallo, Ich weiß ja nicht, was Du damit willst. Dein Timer wird doch eine Rahmenzeit von 10 ms == 180° haben, um jede Halbwelle anzuschneiden.Damit schaltet der Timer immer bei 10 ms ab. Der Trigger ist der Nulldurchgang der Netzspannung. Alex Bürgel schrieb: > "Phase Corrected Frequency Corrected PWM Modes" Phase corrected PWM würde bei einem Phasenwinkel von 0,2° bei 89,9° eine Signal auf High setzen und bei 90,1° wieder zurück auf Low. Also hättest Du als kleinsten Zündwinkel 90° == 50%. Ergo könntest Du auch nur von 50..100% dimmen. Das ist sicher nicht das gewünschte Verhalten.
Bei Induktiver Dimmung braucht man zwei Messungen: - Spannung / Nulldurchgang - Stromfluss durch den Verbraucher Beides über Optokoppler mit dem Oszi betrachtet gibt eine interessante Erkenntniss.
Gast
#1972690
Alex Bürgel schrieb: > Nun meine Frage: Wie kann einen möglichst effizienten Code generieren, Ich habe für eine Thyristorgleichrichtung von meinem Labornetzteil das ganze in einen Timer-Interrupt gelegt, der alle 51us aufgerufen wird. (Ich hatte keine anderen Ressourcen im PIC16F876 mehr frei). Dort wird dann die Entprellung des Eingangssignals, messen der Periodendauer-Hälften und die Ausgabe an die Thyristoren durchgeführt. Die Berechnung der Anschnittwerte erfolgt separat im Hauptprogramm. Das ganze braucht etwa 13% der Rechenzeit, 46 Assembler-Befehle und erlaubt einen Phasenanschnitt mit knapp 0,5% Auflösung und Jitter. Gruß Anja
>Ich weiß ja nicht, was Du damit willst.
Es soll ein Dimmer für Glühlampen und 230V-Halogenlampen bis 500W sein
(wobei mir zunächst 60W reichen). Ferner dachte ich eigentlich auch
Niedervolthalogenlampen mit Ringkerntrafo damit dimmen zu können.
Bevor mir hier irgendetwas explodiert: Was sollte ich denn beim Dimmen
eines Ringkerntrafos erwarten? Meiner Erwartung nach steigt der Strom
beim Einschalten irgendwann innerhalb einer Halbwelle halt "langsam" an,
die Spannung ist natürlich sofort die aktuelle Sinusspannung.
Ausschalten tut sich der TRIAC doch von alleine wenn U ~ 0V und I ~ 0A
ist. Es gibt im übrigen auch einen Snubber mit 100nF/33Ohm über dem
TRIAC.
Das mit dem CTC kann ich mir noch nicht so recht vorstellen, muss mir
das nochmal anhand des Datenblatts durch den Kopf gehen lassen...
Gruß,
Alex
>das ganze in einen Timer-Interrupt gelegt, der alle 51us aufgerufen wird.
Ja klar, so kann man es machen... ich hatte nur gehofft anstatt alle
xxµs einen Interrupt zu generieren einfach diverse Hardware-Funktionen
nutzen zu können. So verfügt der "Input-Capture" ja z.B. über einen
"Noise Canceller" und der Output Compare hat 12 Betriebsmodi (oder so).
Da sollte es doch eine Kombination geben, mit der man so was
alltägliches mit nur 1 Interrupt lösen kann und dennoch
Störungsresistent etc. ist...
Gast
#1972759
Hallo Alex, ich hatte im Sommer mal angefangen, einen Dimmer in Bascom zu schreiben, der etwa so läuft, wie Du es Dir vorstellst. Gedacht ist das Ding für Glühlampenlast bis 3 kW und Einknopfbedienung (Taster). Ist alles noch ziemlich provisorisch, geht aber im wesentlichen schon. Es läuft alles automatisch im Timer1 eines Attiny:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
131 | |
132 | |
133 | |
134 | |
135 | |
136 | |
137 | |
138 | |
139 | |
140 | |
141 | |
142 | |
143 | |
144 | |
145 | |
146 | |
147 | |
148 | |
149 | |
150 | |
151 | |
152 | |
153 | |
154 | |
155 | |
156 | |
157 | |
158 | |
159 | |
160 | |
161 | |
162 | |
163 | |
Vielleicht nutzt es. Ralph
A...aha Soooo. schrieb: > Als Trigger muss man erst mal ein gefiltertes Netz verwenden. Ohne > rabiaten Filter, der die Harmonischen rigoros wegmacht ist nichts. Hmm, komisch, mein 12-Kanal Dimmer funktioniert seit Jahren ausgezeichnet, auch ohne rabiaten Netzfilter. Die Kunst ist die Erkennung aller Nulldurchgänge, und zwar möglichst nahe an der Nullinie. Das habe ich mit einem Optokoppler mit Wechselspannungseingang gelöst. Dann gibt man dem Timer noch ein bisserl Reserve, so dass maximal 95% Leistung eingestellt werden können und dann ist alles super. Der Controller muss die Nulldurchgänge natürlich sauber erkennen, weshalb man hinter dem Optokoppler am besten einen Analog-Komparator-Eingang anstelle eines normalen Portpins nimmt. Diesen stellt man dann so ein, dass die Nullinie im Sinus einen schmalen Puls im Controller auslöst. Da der Analog-Komparator einen Interrupt auslösen kann, kann man die CPU zusätzlich entlasten. Als Leistungsstufe habe ich SSRs mit Snubbern hergenommen. Es hat sich herausgestellt, dass es sinnvoll ist, die SSRs den gesamten Leuchtzyklus nach dem Zünden eingeschaltet zu lassen, da es bei langen Lampenleitungen und zu kurzen Zündpulsen zu Flackern in kleinen Dimmstufen gekommen ist.
Gast
#1992232
Hey Knut ! Vielen Dank für Deinen hilfreichen Tipp mit dem Analog-Comparator ! ( Ich quäle mich schon lange und das Gute lag so nah ;-)) Kannst Du mir bitte verraten, welches SSR Du benutzt ? Danke + Gruß Olaf
Gast
#1992236
Ach so, vergessen zu schreiben, wie ich es mache: Ich nehme den Timer0 und teile ihn durch 1024. Bei 16 MHz habe ich dann nach 10 ms einen Zählerstand von 157. Das Capture Register muss dann also auf 157 minus irgendetwas gesetzt werden. In der Capture-Interrupt-Funktion dann EINSCHALTEN und in der AnalogCompare/INTx Interrupt-Funktion dann AUSSCHALTEN (benutze MOSFET´s) Just my 2 cents Olaf
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.