logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATMEGA32/AT90CAN32][C/ASM] Regulacja fazowa obciążenia

djmdp 30 Kwi 2010 10:34 2601 4
REKLAMA
  • #1 8019233
    djmdp
    Poziom 16  
    Witam, jednym z elementów mojego projektu jest regulacja fazowa mocy oddawanej do obciążeń rezystancyjnych (Oświetlenie), mniej indukcyjnych, problem polega na tym, że po wstępnym napisaniu fragmentu kodu już widzę, wyzwalanie triaka jest nieprecyzyjne, teraz moje pytanie dlaczego? Załączam fragment kodu i schemat obwodu triaka i detekcji przejścia przez zero. Domyślam się, że ten drugi układ (jako odniesienie do odliczania czasu włączania triaka zmieniając fazę, jest mało precyzyjny, powodując mruganie, nierówne przerwania zera sieci). wartości licznika są w odpowiedniej tablicy i za pomoca switchy zmieniam ich wartość powodując zmianę fazy, żarówka ściemnia się itd, ale problem właśnie w tym mruganiu (nierówne włączanie triaka względem przeciwnych połówek sinusa), czy można wykluczyć jako powód poniższy kod?
    
    ISR(INT2_vect)
    {
    	triac_time=*(power+indeks_tab);
    	triac_timer=1;
    	TIFR=2;
    }
    ISR (TIMER0_COMP_vect, ISR_NOBLOCK)
    {
    	TCNT0=0; 
    	preskala--;
    	if(triac_timer==1)
    		{
    			triac_time--;
    				if(!triac_time)
    					{
    						TRIAC_ON;
    						triac_timer=2;
    					}
    		}
    	if(triac_timer==2)
    		{
    			triac_pulse--;
    				if(!triac_pulse)
    					{
    						TRIAC_OFF;
    						triac_pulse=2;
    						triac_timer=0;
    					}
    		}
    dalsza część przerwania
    }
    


    Przerwania od timera 0 co 100us, rozdzielczość regulacji fazy +- od 1 do 100, przerwanie timera 0 nie powinno blokować przerwania od zera sieci (co 10ms). Za komentarze jestem wdzięczny;)
    a jeszcze dodam, że impuls sterujący trwa 200us.

    https://obrazki.elektroda.pl/73_1272617102.png
  • REKLAMA
  • #2 8020014
    tmf
    VIP Zasłużony dla elektroda
    Jak synchronizujesz przerwanie timera z detekcją zera? Jeśli nie synchronizujesz to mas zjuż pływnaie +/-100us. Druga rzecz to rezystor podciągający przy transoptorze - 100k to sporo, w efekcie może i precyzyjnie detektujesz przejście przez 0, ale masz spore pływanie. Kolejna rzecz - lepiej zastosować podwójny transoptor, niż dwa oddzielne - w podwójnym diody mają bardzo zbliżone parametry i detekcja jest bardziej symetryczna.
  • REKLAMA
  • #3 8020208
    djmdp
    Poziom 16  
    Więc tak, akurat w testach mam 50k rezystor, ale definitywnie będzie tam 10k, więc zobaczymy wtedy, a mój tok rozumowania co do sterowania triaka jest taki, że: odbieram przerwanie od zera sieci na rosnące zbocze, w przerwaniu pobieram wartość wypełnienia zdefiniowaną i zapisaną przez użytkownika w tablicy power, wystawiam flagę startu zliczania timera wielokrtoności 100us, ustawiam flagę Timera 0 (natychmiastowe przerwanie po wyjściu z przerwania od sieci), timer zlicza wartość wybraną przez użytkownika i w odpowiednim czasie włącza Triak, następnie po włączeniu czeka jeszcze 200us i zmienia stan na niski ( w efekcie impuls sterujący trwający 200us) wszystkie wartości po tych operacjach są przywracane na początkowe i program czeka na kolejne przerwanie od sieci. Zrobiłem kolejny test i zmieniłem timer na 25us i zwiększyłem rozdzielczość podziału sinusoidy na części, w efekcie mam bardzo płynną regulację i w sumie nie widać mrugania wcale, ale nie mogę sobie pozwolić na to rozwiązanie,gdyż pojawiają się problemy z czujnikiem temp, ds18b20.oraz spora ilość zajętego RAMU. Tmf, może podsuniesz jakiś pomysł co do rozwiązania problemu? tzn swoją sugestię co do sterowania, bo widzę, że jesteś w temacie, nie chodzi o kod, bo sam go zbuduję, głównie o pomysł, a elektronikę poprawię wg sugestii.
  • REKLAMA
  • Pomocny post
    #4 8020363
    tmf
    VIP Zasłużony dla elektroda
    Przy odblokowaniu timera weź pod uwagę prescaler. Jeśli jest różny od 1 to on cały czas zlicza - trzeba go wyzerować, bo inaczej pierwszy impuls będzie po dosyć losowym czasie. Włączaj triak na dłużej - szczególnie przy kątach otwarcia rzędu 180 stopni prąd płynący przez triaka może być niewystarczający do jego podtrzymania. Jeśli możesz zmienić schemat, to zastanów się nad wykorzystaniem pinów OCx - możesz wyzwalać triaka sprzętowo bezpośrednio z timera, co ci rozwiąże problemy z np. 1-wire. Swoją drogą do OW też możesz zastosować UARTa, co likwiduje problemy zależności czasowych - wszystkim sprzętowo zajmie się procesor.
  • #5 8020862
    djmdp
    Poziom 16  
    Kurcze jakby kolega mieszkał bliżej to wypiłbym z nim piwko:) tak jest, zerowałem timer, ale w preskalerze znajdowały się oczywiście zliczane impulsy zegara podstawowego, zmiana preskalera powodowała dokładniejsze symetryczne impulsy, po resetowaniu w przerwaniu od sieci wartości preskalera są równiutkie impulsy, zero mrugania, o to chodziło:) Swoją drogą, myślałem, że ogólnie po zresetowaniu TCNT0, wartość timera to 0, i to wprowadziło mnie w błąd, zawsze jest coś w preskalerze, pozdrawiam i wielkie wielkie dzięki, zastanowie się nad Uartem do czujnika.
REKLAMA