PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timerproblem (Phasenanschnitt)



dansteu
30.10.2006, 08: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

jojo3
31.10.2006, 05:19
Du Konfigurierst den Interrupt auf Change, willst du pro Nulldurchgang
wirklich 2x auslösen?
Da ja der Null-Impuls, wenn auch nur kurz, ein Recheck ist.
Desweiteren hab ich die Erfahrung gemacht, das der Einfach-Nullspannungs-Dedektor nur mit Optpkoppler oft nicht präzise genug ist,
du solltest noch einen Schmitt-Trigger spendieren.

dansteu
02.11.2006, 17:03
Hallo jojo3!

Sorry, dass ich mich erst so spät melde!



Du Konfigurierst den Interrupt auf Change, willst du pro Nulldurchgang
wirklich 2x auslösen?

Ich versteh dann nicht, warum ich dann pro Sekunde "nur" hundert Impulse zähle (wäre ja eigentlich richtig). Wenn ich zwei mal pro Nulldurchgang auslöse, müssten es ja 400 Impulse sein, oder?

Meine Nulldurchgangserkennung ist aber auch zugegeben sehr sehr einfach aufgebaut. Ich versuch jetzt mal eine besser Erkennung aufzubauen, indem ich einen Brückengleichrichter verwende.


Desweiteren hab ich die Erfahrung gemacht, das der Einfach-Nullspannungs-Dedektor nur mit Optpkoppler oft nicht präzise genug ist,du solltest noch einen Schmitt-Trigger spendieren.

Ist keine schlechte Idee! Wenns mit obigen nicht klappt versuch ichs so!

Danke dir für deine Hilfe!

Gruß Daniel

dansteu
02.11.2006, 17:36
Ich versteh dann nicht, warum ich dann pro Sekunde "nur" hundert Impulse zähle (wäre ja eigentlich richtig). Wenn ich zwei mal pro Nulldurchgang auslöse, müssten es ja 400 Impulse sein, oder?


Meinte eigentlich 200 Impulse!