PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dimmer für 230V



Marco78
09.06.2006, 22:34
Das Unterforum gibt ja schon vor, das es sich um ein Bascom-AVR-Projekt handelt.

Das ganze soll, wenn's fertig ist ein Dimmer werden, der per IR oder Taster geregelt werden kann.

Hier der Code:

$regfile = "at26def.dat"
$crystal = 16000000

Led Alias Porta.4
Triac Alias Porta.7
Taster Alias Pina.2

Config Porta.4 = Output
Config Porta.7 = Output
Config Porta.2 = Input
Porta = &B0000100 'PullUp von Pin PA2 aktivieren

Dim A As Word
Dim B As Word
Dim C As Integer

Config Int0 = Change 'bei jeder Halbwelle reagieren
Enable Int0
Enable Interrupts
On Int0 Int0_isr

Set Led

Do

If Taster = 0 Then
Incr A
Waitms 10 'entprellen
End If

If A = 10 Then A = 0

Loop


Int0_isr:

Waitms A
Set Triac
Waitus 100
Reset Triac

Return


Im Prinzip funktioniert das auch so, aber...
Das dimmen ist mehr ein unryhtmischen flackern. Es sieht so aus, als ob einige Nulldurchgänge nicht erkannt werden.
Ein Oszilloskope habe ich nicht. Solche Tipps helfen mit weniger.

Außerdem verwende ich einen MOC3043. Der Diodenstrom ist zwar richtig "eingestellt", aber der MOC hat eine eigene Nulldurchgangserkennung. Ich weiss nicht, ob das ein Grund ist, bzw was diese Erkennung überhaupt bewirkt. Einen externen Pin hat sie nicht.

Des weiteren bräuchte ich noch eine gute Idee, wie man die Regelung realisieren kann. Und wieviel Schritte sind sinnvoll? Ich denke 64 sind mehr als genug. Wobei ich auchschon Projekte mit 256 Schritten gesehen habe.

Das ganze soll später aus Platzgründen auf einem Tiny25 oder Tiny 45 laufen. Ich habe jetzt nicht geschaut, ob der im Gegensatz zum Tiny26 noch einen zweiten Timer hat.
Ein Timer wird ja schon für den IR-Empfang gebraucht.

Allerdings steht auch im Datenblatt zum Tiny26:
• Peripheral Features
– 8-bit Timer/Counter with Separate Prescaler
– 8-bit High-speed Timer with Separate Prescaler
2 High Frequency PWM Outputs with Separate Output Compare Registers
Non-overlapping Inverted PWM Output Pins

Wie kann man den zweiten Timer denn nutzen?

Ich habe mich ja auch schon bemüht und schon viel mit Google gesucht und hier im Forum. Da habe ich u.a. https://www.roboternetz.de/phpBB2/viewtopic.php?t=9822&postdays=0&postorder=asc&start=22 gefunden. Aber damit wurde ich auch nicht schlauer was die Lösung aller Probleme angeht.

Ich seh grade, das im Schaltplan ein Teil fehlt. Netz-N ist auch mit 1M an GND angeschlossen, wie Netz-L über 1M an INT0.

Rage_Empire
09.06.2006, 22:58
soweit ich weiß läuft ein dimmer netzsynchron. also klappt das so mit dem timer-pwm an dem 230vac-netz nicht.
ein dimmer hat das prinzip von einer phasen-anschnitt-steuerung. dies ist hier nicht der fall.
Leider kann ich das aber nicht ins detail erklären, da ich mit netzzeugs(230VAC) bisher nur wenig zu tun hatte.

Ich hoffe, daß ich trotzdem mit den ansätzen helfen konnte.

izaseba
09.06.2006, 23:30
Genau, Du mußt schon genau wissen, wann der Nulldurchgang stattfindet, sonst ist nichts mit Phasenanschnitt.
Wo kriegt der AVR seine Spannungsversorgung her ?
hast Du da einen Trafo ? wenn ja würde ich einen Optokoppler dran machen und mit dem Ausgang einen Externen Interrupt ansteuern.
Damit weißt Du wann Du bei Null bist, kannst Deine Zeit abwarten und erst dann den Triac zünden.

Gruß Sebastian

Marco78
10.06.2006, 02:21
ein dimmer hat das prinzip von einer phasen-anschnitt-steuerung. dies ist hier nicht der fall.

Genau, Du musst schon genau wissen, wann der Nulldurchgang stattfindet, sonst ist nichts mit Phasenanschnitt.
Die 230V geh'n direkt an INT0 und lösen bei Nulldurchgangen den INT aus. So wie im Schaltplan gemalt und im Code ersichtlich!
Und im Code wird eine Zeit bis 10mS gewartet, bis der Triac zündet.

Stromi
10.06.2006, 15:20
Um das Signal am Int0 sauber zu filtern würde ich 'ne Z-Diode 5,1Volt par. anklemmen. Kann ja auch sein, dass dein Netz nicht so sauber ist....

uwegw
10.06.2006, 15:53
Ich vermute mal, dass das Problem in der Nulldurchgangserkennung des MOC liegt. Wenn er nen Eingangssignal reinbekommt, wartet er mit dem Schalten bis zum nächsten Nulldurchgang ab. Hat den Vorteil, dass beim bloßen Schalten von Lasten weniger Störsignale entstehen weil keine abrupten Spannungssprünge auftreten.
Für einen Dimmer ist dieses Verhalten jedoch nicht zu gebrauchen, hier braucht man sofort schaltende Triacs, die unmittelbar die Schaltsignale weitergeben.

Marco78
10.06.2006, 22:21
Um das Signal am Int0 sauber zu filtern würde ich 'ne Z-Diode 5,1Volt par. anklemmen. Kann ja auch sein, dass dein Netz nicht so sauber ist....
Das macht der AVR schon alleine. Siehe AppNote AVR182.


Ich vermute mal, dass das Problem in der Nulldurchgangserkennung des MOC liegt.
Das denke ich auch bald. "Einfaches" schalten funktioniert nämlich. Die seperate Nulldurchgangserkennung wird wohl das Problem sein. Ich werd das ganze Praxismäßig wohl auf Eis legen müssen, bis ich einen richtigen MOC habe.

Bis dahin kann ich mir ja Gedanken über die zeitliche Steuerung machen. Bin da aber für Vorschläge offen ;)

Stromi
11.06.2006, 16:11
Soweit ich das erkenne, hat der Optokoppler keine Nulldurchgangserkennung. Geh' mal auf www.reichelt.de und schau mal auf's Datenblatt.

ThunderD
11.06.2006, 17:39
Eine fertige Dimmerschaltung mit Erklärung und Pc Ansteuerung ist auch bei http://www.pcdimmer.de/ zu finden. Insofern sich den Thread noch jemand mal ansieht.

Marco78
11.06.2006, 21:18
Soweit ich das erkenne, hat der Optokoppler keine Nulldurchgangserkennung.
Doch, der MOC3043 hat eine Nulldurchgangserkennung. Und genau könnte das Problem sein :(
Ich werde berichten, wenn ich einen anderen Optokoppler habe.

Gento
11.06.2006, 22:59
mit hinkelsteine auf spatzen ?
Macht ein AVR nicht 10 000 AD Wandlungen/Sek bei 16 MHZ wo man sicher den Nulldurchgang erkennt ?
Mal der andere Ansatz.
Gento

Marco78
12.06.2006, 04:49
Der Nulldurchgang wird ja ohne Probleme erkannt!
Einfach 230V an INT0, INT bei Change und alle 10mS wird ohne noch größere Verzögerung ein INT ausgelöst.

Marco78
12.06.2006, 21:37
Es lag am MOC. Hab heute einen 3020 gekauft, Widerstand angepasst und es geht.
Jetzt hab ich nur das Problem, das ich nicht genau weiss, wie ich den 8-Bit Timer1 des Tiny26 nutzen kann.
Kann mir da jemand helfen?

Im Datenblatt steht er als Timer1.
Ich hab ihn mit Config usw nach RNAVR eingestellt.
Mit Timer0 funktioniert es alles. Aber wenn ich alles auf Timer1 umschreibe, kommt eine Fehlermeldung in der Zeile wo der Timer wieder vorgeladen werden soll.

Timer1 = Timervorgabe
erzeugt den Fehler:
Assigment Error[Timer1:0 Timervorgabe:6]

An der 6 für A=3 liegt es nicht.

Hier nochmal der ganze Code:


$regfile = "at26def.dat"
$crystal = 16000000

Led Alias Porta.4
Triac Alias Porta.7
Taster Alias Pina.2

Config Porta.4 = Output
Config Porta.7 = Output
Config Porta.2 = Input
Porta = &B0000100 'PullUp von Pin PA2 aktivieren
Config Timer1 = Timer , Prescale = 256
'Config Rc5 = Pinb.2

Dim A As Word
Dim B As Word
Dim C As Integer
Dim Address As Byte , Command As Byte

Dim Timervorgabe As Word
'Const Timervorgae = 131


Config Int0 = Change 'bei jeder Halbwelle reagieren
Enable Int0
Enable Interrupts
On Int0 Int0_isr
On Timer1 Timer_irq
Enable Timer1

Set Led


Do

'Getrc5(address , Command)


If Taster = 0 Then
Incr A
Reset Led
Waitms 10 'entprellen
Set Led
End If

If A = 4 Then A = 0
If A = 0 Then Timervorgabe = 131
If A = 1 Then Timervorgabe = 100
If A = 2 Then Timervorgabe = 48
If A = 3 Then Timervorgabe = 6


Loop


Int0_isr:

'Waitus C
'Set Triac
'Waitus 100
'Reset Triac
Start Timer1

Return


Timer_irq:

Timer1 = Timervorgabe

Set Triac
Stop Timer1

Waitus 100
Reset Triac

Return

Schluff
23.11.2006, 16:12
Hallo Marco,

ich baue zur Zeit auch an einem derartigen Dimmer. Mit dem elektronischen Teil bin ich vertraut, jedoch bisher weniger mit der AVR Programmierung. Dein letzter Code ist mir aber weitestgehend klar.
Hast Du mittlerweile einen lauffähigen Code, den Du hier posten könntest?

Und wo ist der Schaltplan hin? Kann auch sein, daß ich blind bin. Ich finde ihn jedenfalls nicht. Über diesen würde ich mich also auch sehr freuen! [-o<

Marco78
23.11.2006, 19:44
Ich denke mal, den Schaltplan siehst du nur, wenn du angemeldet bist.

Ich habe mir jetzt ein paar Tiny45 bestellt (sind auch schon da) weil ich keine Lust mehr hatte da rumzurätseln.
Es wundert mich aber doch, das es keine Lösung gibt was den Timer angeht.

Einen neueren Code habe ich bis jetzt noch nicht. Mir fehlt noch eine Routine für IR. Dieses Jahr werde ich das wohl auch nicht fertig bekommen.

Wo ist denn dein Problem bei der Programmierung? Vielleicht kann ich dir ja auch ohne neueren Code helfen.

Schluff
29.11.2006, 19:32
Deine Timerzeiten (Timervorgabe) sind mir noch nicht ganz klar. Wie kommst Du auf diese?
Alle 10ms beginnt eine neue Halbwelle. Ich gehe davon aus, daß Dein ZC-Interrupt genau beim Nulldurchgang auslöst.
Bei Timervorgabe = 131 würde der Triac bei 16Mhz und Prescale=256 ca. 2 ms nach Nulldurchgang auslösen.
Bei Timervorgabe = 6 nach ca. 0,1 ms.
Also kann die Lampe ja nur ziemlich schwach runtergedimmt werden, oder versteh ich da was falsch?

Löst Dein ZC-Interrupt denn überhaupt genau im Nulldurchgang aus, oder etwas später?

Ausserdem dürfte das Hoch- und Runterdimmer etwas zu schnell gehen, wenn bei Taster=0 in der Schleife nur 10ms gewartet wird, oder?

Danke!