Witam.
Mam układ 3 grzałek połączonych w trójkąt do 3-fazowej sieci, każdy triak jest włączany optotriakiem, podłączonym do pinów wyjściowych expandera. Pomiędzy wszystkie 3 fazy podpięte mam detektory przejścia przez 0 ( Link ) które podpięte są przez transoptory do wejścia expandera. Expander generuje przerwanie przy każdej zmianie pinu wejściowego (stąd też takich przerwań w moim układzie jest dokładnie 600 na s), każde przerwanie jest obsłużone w µC ( każdy triak ma przypisany swój detektor, więc na każdym opadającym zboczu przerwania wyłączam odpowiedniego triaka ) i ta część działa cacy
Problem pojawia się dopiero kiedy chcę włączać triak. Mój sposób na włączanie tego jest następujący.
Najpierw odmierzam czas opóźnienia (np połowę sinusoidy od przerwania na L1), następnie włączam triaka na L1. Następnie aby każdy triak był włączony na tym samym odcinku sinusoidy muszę zmienić czas przerwania na dokładnie 1/3 sinusoidy i skakać po fazach z L1 na L3 z L3 na L2 i z L2 na L1...
Widać to dość dobrze na obrazku
A- początkowe opóźnienie
B- stały czas 1/3pi okresu sinusoidy
na górze są narysowane przerwania z detektorów przejść przez 0
do odmierzania czasu wykorzystuję timer1. Wartość OCR1A obliczam ze wzoru OCR1A = (t*F_CPU/preskaler), gdzie t=1/3pi => 3.(3)ms
F_CPU = 14745600
OCR1_DEF = 6144, 1/3pi
obsługa przerwania timera1
aktualnaFaza jest zmienną przechowującą fazę na której timer ma włączyć triaka.
Niby wszystko ok. ale widać że żarówka (która póki co służy mi jako zamiennik grzałki
) nie świeci jednostajnie tylko cały czas przygasa dochodzi, aż do momentu dojścia do "końca" sinusoidy i zapala się pełnym światłem i znów przygasa...
Próbowałem zmieniać wartość timera ale niestety nic to nie daje (uzyskuję mniej więcej równe świecenie, ale po chwili albo zaczyna gasnąć albo świecić lepiej, albo chwilę gasnąć i chwilę świecić mocniej
)
Kiedy w obsłudze przerwania detektorów przejścia przez 0 umieściłem licznik liczący do 600, który po każdym zliczeniu wysyłał czas po RS232 do kompa i to samo zrobiłem z timerem okazało się że timer po ok. 10 min jest opóźniony o prawie 1 s w stosunku do licznika przerwań od detektorów...
Siedzę już nad tym od kilku ładnych chwil i nie mogę dojść do tego dlaczego triaki nie włączają się zawsze w tym samym miejscu. Mam nadzieję że dobrze nakreśliłem mój problem.
Pozdrawiam zawisza
Mam układ 3 grzałek połączonych w trójkąt do 3-fazowej sieci, każdy triak jest włączany optotriakiem, podłączonym do pinów wyjściowych expandera. Pomiędzy wszystkie 3 fazy podpięte mam detektory przejścia przez 0 ( Link ) które podpięte są przez transoptory do wejścia expandera. Expander generuje przerwanie przy każdej zmianie pinu wejściowego (stąd też takich przerwań w moim układzie jest dokładnie 600 na s), każde przerwanie jest obsłużone w µC ( każdy triak ma przypisany swój detektor, więc na każdym opadającym zboczu przerwania wyłączam odpowiedniego triaka ) i ta część działa cacy
Problem pojawia się dopiero kiedy chcę włączać triak. Mój sposób na włączanie tego jest następujący.
Najpierw odmierzam czas opóźnienia (np połowę sinusoidy od przerwania na L1), następnie włączam triaka na L1. Następnie aby każdy triak był włączony na tym samym odcinku sinusoidy muszę zmienić czas przerwania na dokładnie 1/3 sinusoidy i skakać po fazach z L1 na L3 z L3 na L2 i z L2 na L1...
Widać to dość dobrze na obrazku
A- początkowe opóźnienie
B- stały czas 1/3pi okresu sinusoidy
na górze są narysowane przerwania z detektorów przejść przez 0
do odmierzania czasu wykorzystuję timer1. Wartość OCR1A obliczam ze wzoru OCR1A = (t*F_CPU/preskaler), gdzie t=1/3pi => 3.(3)ms
F_CPU = 14745600
OCR1_DEF = 6144, 1/3pi
Kod: C / C++
obsługa przerwania timera1
Kod: C / C++
aktualnaFaza jest zmienną przechowującą fazę na której timer ma włączyć triaka.
Niby wszystko ok. ale widać że żarówka (która póki co służy mi jako zamiennik grzałki
Próbowałem zmieniać wartość timera ale niestety nic to nie daje (uzyskuję mniej więcej równe świecenie, ale po chwili albo zaczyna gasnąć albo świecić lepiej, albo chwilę gasnąć i chwilę świecić mocniej
Kiedy w obsłudze przerwania detektorów przejścia przez 0 umieściłem licznik liczący do 600, który po każdym zliczeniu wysyłał czas po RS232 do kompa i to samo zrobiłem z timerem okazało się że timer po ok. 10 min jest opóźniony o prawie 1 s w stosunku do licznika przerwań od detektorów...
Siedzę już nad tym od kilku ładnych chwil i nie mogę dojść do tego dlaczego triaki nie włączają się zawsze w tym samym miejscu. Mam nadzieję że dobrze nakreśliłem mój problem.
Pozdrawiam zawisza