dansteu
30.10.2006, 09:11
Hallo,
ich habe ein Problem mit der Phasenanschnitt Steuerung über einen Triac.
Die Nulldurchgangserkennung habe ich mit einem Optokoppler realisiert.
Funktioniert soweit auch ganz gut (Jede Sekunde werden genau Hundert Nulldurchgänge gezählt).
Als Optotriac für die Zündung verwende ich einen MOC3020 und als Schalttriac einen BTB12 (Ein- bzw. Ausschalten fünktioniert einwandfrei).
Ich besitze leider kein Oszilloskop, was natürlich die Überprüfung meiner Software sehr schwierig macht.
Vielleicht kann mir jemand bei eine kurzen Blick auf die Software helfen, um evtl. Grundprobleme zu beseitigen.
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 19200
Config Pind.2 = Input
Config Pind.5 = Output
Portd.2 = 1
Triac Alias Portd.5
Config Timer1 = Timer , Prescale = 8
'16 bit timer mit prescaler 8 und 16 Mhz ergibt
'Zeitspanne von 0 - 32 ms
Config Int0 = Change
On Int0 Int0_isr
On Timer1 Timer_irq
Enable Interrupts
Enable Timer1
Enable Int0
Dim X As Word
X = 55536 '5ms
'************************************************* *************************
'************************************************* *************************
Do
nop
' Incr X
' Print X
' Waitms 100
Loop
'************************************************* *************************
'************************************************* *************************
Int0_isr:
Start Timer1
Return
'*************************
Timer_irq:
Stop Timer1
Timer1 = X
Set Triac
Waitus 30
Reset Triac
Return
Mein Gedanke war: Bei Nulldurchgang wird ein Interrupt ausgelöst, indem der Timer1 gestartet wird. Dieser zählt dann je nach gewünschter Helligkeit eine bestimmte Zeit ab und löst einen Timerinterrupt aus, in der der Triac kurz gezündet wird. Dieser löscht sich beim Nulldurchgang selber und das ganze beginnt wieder von vorne.
ERGEBNIS: Lampe dimmt ca 2 mal in der Sekunde leicht runter und dann wieder hoch!?
Irgendwie scheint mir das so, als ob das nicht ganz synchron läuft.
Allerdings habe ich auch schon versucht Pausen einzufügen, da der Nulldurchgangs Interrupt ja nicht genau bei Null ausgelöst wird und zudem die Timerwerte von 0 - 10 ms zu ändern. -> ohne Erfolg.
Vielleicht hat jemand eine Idee, wo der Hund begraben sein könnte?
Gruß Daniel
ich habe ein Problem mit der Phasenanschnitt Steuerung über einen Triac.
Die Nulldurchgangserkennung habe ich mit einem Optokoppler realisiert.
Funktioniert soweit auch ganz gut (Jede Sekunde werden genau Hundert Nulldurchgänge gezählt).
Als Optotriac für die Zündung verwende ich einen MOC3020 und als Schalttriac einen BTB12 (Ein- bzw. Ausschalten fünktioniert einwandfrei).
Ich besitze leider kein Oszilloskop, was natürlich die Überprüfung meiner Software sehr schwierig macht.
Vielleicht kann mir jemand bei eine kurzen Blick auf die Software helfen, um evtl. Grundprobleme zu beseitigen.
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 19200
Config Pind.2 = Input
Config Pind.5 = Output
Portd.2 = 1
Triac Alias Portd.5
Config Timer1 = Timer , Prescale = 8
'16 bit timer mit prescaler 8 und 16 Mhz ergibt
'Zeitspanne von 0 - 32 ms
Config Int0 = Change
On Int0 Int0_isr
On Timer1 Timer_irq
Enable Interrupts
Enable Timer1
Enable Int0
Dim X As Word
X = 55536 '5ms
'************************************************* *************************
'************************************************* *************************
Do
nop
' Incr X
' Print X
' Waitms 100
Loop
'************************************************* *************************
'************************************************* *************************
Int0_isr:
Start Timer1
Return
'*************************
Timer_irq:
Stop Timer1
Timer1 = X
Set Triac
Waitus 30
Reset Triac
Return
Mein Gedanke war: Bei Nulldurchgang wird ein Interrupt ausgelöst, indem der Timer1 gestartet wird. Dieser zählt dann je nach gewünschter Helligkeit eine bestimmte Zeit ab und löst einen Timerinterrupt aus, in der der Triac kurz gezündet wird. Dieser löscht sich beim Nulldurchgang selber und das ganze beginnt wieder von vorne.
ERGEBNIS: Lampe dimmt ca 2 mal in der Sekunde leicht runter und dann wieder hoch!?
Irgendwie scheint mir das so, als ob das nicht ganz synchron läuft.
Allerdings habe ich auch schon versucht Pausen einzufügen, da der Nulldurchgangs Interrupt ja nicht genau bei Null ausgelöst wird und zudem die Timerwerte von 0 - 10 ms zu ändern. -> ohne Erfolg.
Vielleicht hat jemand eine Idee, wo der Hund begraben sein könnte?
Gruß Daniel