Witam.
Napisałem sobie prosty program do sterowania fazowego:
Teoretycznie jest bardzo prosty:
1. Program czeka aż na wyprowadzeniu detfazy ustali się stan wysoki (detekcja przejścia przez zero)
2. Program uruchamia timer opóźniający. Do jego rejestru wpisano wartość 60536 co spowoduje, że timer odliczy 65536 - 60536 = 5000 taktów. Rezonator ma wartość 8MHz zatem 1 takt trwa 0,125 us. Ponieważ na wejściu zliczającym zegar jest dzielony przez 8 (prescale = 8) zliczenie 5000 taktów spowoduje rzeczywiste opóźnienie 5 ms. Takie opóźnienie sprawi, że do obciążenia zostanie przekazane 50% mocy.
3. Gdy timer przepełni się nastąpi przerwanie i włączy się triak.
4. Gdy na wejściu detfazy wykryty zostanie stan przejścia przez zero triak zostanie zgaczony
5 powrót do punktu 1
Niestety z jakiegoś powodu proram nie chce zadziałać. Triak cały czas pozostaje w stanie wygaszenia.
Ktoś podpowie mi coś mądrego?
Żeby nie było wątpliwości na detfazy mam prawidłowy przebieg prostokątny sprawdzony oscyloskopem, triak Q2 daje się włączać 'z palca' ( q2=0 ).
Napisałem sobie prosty program do sterowania fazowego:
$crystal = 8000000
$regfile = "8515def.dat"
Detfazy Alias Pinb.1
Config Detfazy = Input
Q2 Alias Portc.1
Config Pinc.1 = Output
Config Timer1 = Timer , Prescale = 8
Stop Timer1
On Timer1 Irq_t1 ' jeśli nastąpi przerwanie od timera Timer1 wykonaj procedurę Irq_t1
Enable Timer1
Enable Interrupts
Do
Bitwait Detfazy , Set
Q2 = 1
Load Timer1 , 60536 'ustawia wartość do której zlicza Timer1
Start Timer1 ' ponownie włącza odliczanie Timer1
Loop
Irq_t1:
Q2 = 0 ' włącza triak
Stop Timer1 ' zatrzymuje odliczanie
ReturnTeoretycznie jest bardzo prosty:
1. Program czeka aż na wyprowadzeniu detfazy ustali się stan wysoki (detekcja przejścia przez zero)
2. Program uruchamia timer opóźniający. Do jego rejestru wpisano wartość 60536 co spowoduje, że timer odliczy 65536 - 60536 = 5000 taktów. Rezonator ma wartość 8MHz zatem 1 takt trwa 0,125 us. Ponieważ na wejściu zliczającym zegar jest dzielony przez 8 (prescale = 8) zliczenie 5000 taktów spowoduje rzeczywiste opóźnienie 5 ms. Takie opóźnienie sprawi, że do obciążenia zostanie przekazane 50% mocy.
3. Gdy timer przepełni się nastąpi przerwanie i włączy się triak.
4. Gdy na wejściu detfazy wykryty zostanie stan przejścia przez zero triak zostanie zgaczony
5 powrót do punktu 1
Niestety z jakiegoś powodu proram nie chce zadziałać. Triak cały czas pozostaje w stanie wygaszenia.
Ktoś podpowie mi coś mądrego?
Żeby nie było wątpliwości na detfazy mam prawidłowy przebieg prostokątny sprawdzony oscyloskopem, triak Q2 daje się włączać 'z palca' ( q2=0 ).
