Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Relpol
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Detekcja przejścia przez zero.

05 Lis 2015 21:34 2883 20
  • Poziom 13  
    Witam,

    Zbudowałem taki oto układ.

    Detekcja przejścia przez zero.

    podpiąłem to pod arduino, pod przerwanie zewnętrzne które jest wyzwalane zboczem narastającym. Przy częstotliwości 50Hz w sieci energetycznej przejście przez zero odbywa się co 10ms. Niestety przerwanie wyzwalane jest w moim przypadku co 20ms. Jeżeli dobrze rozumiem zastosowany transoptor ma dwie diody led i każda z nich zapala się dla każdej połówki sinusoidy więc przy każdym przejściu przez zero obie diody są wygaszone i wtedy otrzymuje stan wysoki na pinie mikrokontrolera, ponieważ jest on podciągnięty do zasilania. Więc teoretycznie wszystko powinno działać dokładnie co 10ms - mam rację?

    Pozdrawiam
    Kuba
  • Relpol
  • Poziom 39  
    Na moją logikę gdyby obie diody dawały impuls to impuls był by co 5ms.
  • Relpol
  • Moderator Mikrokontrolery Projektowanie
    @shady79 To jeszcze pokazałbyś kod - założę się, że masz przerwanie od zbocza - narastającego lub opadającego, czyli wykrywasz tylko moment zgaśnięcia jednej diody, stąd przerwanie co 20 ms. BTW, w tym układzie nawet jeśli włączysz przerwanie z obu zboczy, to co prawda, będzie ich 2xtyle, ale z pewnością nie będą co 10 ms...
  • Poziom 13  
    tmf napisał:
    @shady79 To jeszcze pokazałbyś kod - założę się, że masz przerwanie od zbocza - narastającego lub opadającego, czyli wykrywasz tylko moment zgaśnięcia jednej diody, stąd przerwanie co 20 ms. BTW, w tym układzie nawet jeśli włączysz przerwanie z obu zboczy, to co prawda, będzie ich 2xtyle, ale z pewnością nie będą co 10 ms...


    Tak inicjalizuje przerwanie
    attachInterrupt(0, zero_crosss_int, RISING);

    natomiast w funkcji zero_cross_int
    sprawdzam czas jaki upłynął od ostatniego jej wywołania i na tej podstawie wiem co ile milisekund wywoływane jest przerwanie. W tym przypadku dostaje czas między 19 a 20ms

    Gdy próbowałem wyzwalać przerwanie innymi stanami pinu np. HIGH, CHANGE niestety było dużo gorzej - czasy były na prawdę dziwne.

    Czy w tym przypadku detekcja zera działała by lepiej?
    Detekcja przejścia przez zero.
  • Poziom 39  
    Sprawdź pod zasilaczem prądu stałego czy obie diody na pewno są sprawne w transoptorze.

    Dodano po 48 [sekundy]:

    shady79 napisał:
    Czy w tym przypadku detekcja zera działała by lepiej?

    Bez różnicy. Ten sam efekt tylko więcej elementów.
  • Moderator Mikrokontrolery Projektowanie
    shady79 napisał:
    tmf napisał:
    @shady79 To jeszcze pokazałbyś kod - założę się, że masz przerwanie od zbocza - narastającego lub opadającego, czyli wykrywasz tylko moment zgaśnięcia jednej diody, stąd przerwanie co 20 ms. BTW, w tym układzie nawet jeśli włączysz przerwanie z obu zboczy, to co prawda, będzie ich 2xtyle, ale z pewnością nie będą co 10 ms...


    Tak inicjalizuje przerwanie
    attachInterrupt(0, zero_crosss_int, RISING);

    natomiast w funkcji zero_cross_int
    sprawdzam czas jaki upłynął od ostatniego jej wywołania i na tej podstawie wiem co ile milisekund wywoływane jest przerwanie. W tym przypadku dostaje czas między 19 a 20ms

    Gdy próbowałem wyzwalać przerwanie innymi stanami pinu np. HIGH, CHANGE niestety było dużo gorzej - czasy były na prawdę dziwne.

    Czy w tym przypadku detekcja zera działała by lepiej?
    Detekcja przejścia przez zero.


    Nie, pokazany schemat nic nie wnosi, poprzendi jest ok. Skoro przerwanie masz przy zboczu narastającym, to znaczy, że masz przerwanie tylko od jednej diody, więc prawidłowo jedno co 20 ms. Rozrysuj sobie sinusoidę, a następnie zaznacz kiedy świeci każda z diod, stanie się jasne, dlaczego jak włączysz oba zbocza (change) to czasy robią się dziwne. Podpowiem - one nie są dziwne, to ty je żle interpretujesz :)
  • Poziom 39  
    tmf napisał:
    Skoro przerwanie masz przy zboczu narastającym, to znaczy, że masz przerwanie tylko od jednej diody

    Kolega tmf się myli. Przerwanie na narastające zbocze jest jak najbardziej ok i powinno być co 10ms. Obie diody przy zaniku napięcia dają zbocze narastające na wyjściu transoptora. Należałoby sprawdzić ten transoptor czy jest sprawny, ewentualnie zmniejszyć wartość R1.
  • Poziom 13  
    excray napisał:
    tmf napisał:
    Skoro przerwanie masz przy zboczu narastającym, to znaczy, że masz przerwanie tylko od jednej diody

    Kolega tmf się myli. Przerwanie na narastające zbocze jest jak najbardziej ok i powinno być co 10ms. Obie diody przy zaniku napięcia dają zbocze narastające na wyjściu transoptora. Należałoby sprawdzić ten transoptor czy jest sprawny, ewentualnie zmniejszyć wartość R1.


    Też tak myślę, może być jedna z diod uwalona. Na szczęście mam jeszcze jeden w zapasie.

    Teraz po wymianie transoptora jest ok, zero wykrywane co około 10ms.
    Mam w związku z tym inne pytanie, Chcąc uzyskać np. 50% wypełnienia sinusoidy powinienem zaraz po wykryciu zera zrobić zwłokę 5ms a następnie dać impuls na załączenie triaka. Po chwili zmienić stan pinu który wyzwala triaka. Prąd przez triaka przestanie płynąć gdy nastąpi przejście przez zero.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Niestety w takim przypadku żarówka świeci może w połowie ale strasznie mruga.

    co ciekawe przy tak wyglądającej funkcji przerwania

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Żarówka teoretycznie powinna świecić mocno i jenostajnie. U mnie mruga jak stroboskop. Domyślam się że coś jest nie tak z detekcją zera, bo w tym przypadku czasy detekcji zera mam takie:

    0 0 0 0 8 0 0 0 10 0 0 0 0 8 0 0 0 11 0 0 0 0 8 0 0 0 10 0 0 0 0 8 0 0 0 0 10 0 0 0 9 0 0 0 0 9 0 0 0 0 8 0 0 0 10 0 0 0 0 9 0 0 0 10 0 0 0 0 8 0 0 0 11 0 0 0 0 9 0 0 0 0 9 0 0 0

    tak jakby coś zakłócało przerwanie, zero świadczy o tym jakby funkcja przerwania odpalała się dwa razy na raz?? Jak to zinterpretować?
  • Poziom 15  
    Po pierwsze przy takim sposobie wykrywania zera sieci nigdy nie będzie dokładnie 10 ms pomiędzy przerwaniami mikrokontrolera. Najlepiej wykrywać zero sieci co 20 ms, za pomocą transoptora z jedna diodą jeśli w układzie jest wymagana separacja od sieci, a czas do odpalenia triaka w drugiej połówce odmierzać za pomocą timera. Takie działanie zapewni jednostajne świecenie żarówki. W przypadku mrugania żarówki najprawdopodobniej dostaje ona napięcie tylko jednej połówki sinusoidy.
    Triak może się wyłączyć również wcześniej niż w zerze sieci. W przypadku gdy prąd płynący przez triaka jest zbyt mały, załączenie triaka krótkim impulsem może nie wystarczyć do jego odpalenia.
  • Poziom 21  
    Kolego shady79, zbudowałeś komparator okienkowy, a czy zastanawiałeś się jak szerokie jest okienko? I jaki czas upłynął od rzeczywistego przejścia przez zero napięcia w sieci, do sygnalizacji przez transoptor?
  • Poziom 13  
    Rasel napisał:
    Kolego shady79, zbudowałeś komparator okienkowy, a czy zastanawiałeś się jak szerokie jest okienko? I jaki czas upłynął od rzeczywistego przejścia przez zero napięcia w sieci, do sygnalizacji przez transoptor?


    Prawdę mówiąc skorzystałem z rozwiązania gotowego, natomiast nie mam chwilowo książki więc nie mogę zobaczyć jak autor sobie programowo to rozwiązał, próbuję sam dojść do pewnych wniosków, jednak w ciemno kiepsko to idzie... pamiętam, że odpowiedni dobór rezystora R1 ma wpływ na szerokość generowanego impulsu przejścia przez zero. Jak rozumiem nie potrafię się zsynchronizować odpowiednio z przebiegiem sinusoidy. A powiedźcie czy może mieć wpływ na detekcję zera to że arduino zasilam z portu USB komputera? To jest źródło napięcia 5V do zasilania układu, możliwe ze mało stabilne i gdy odpalam triaka wprowadza on jakieś zakłócenia do pracy przerwania.
  • Poziom 21  
    Od strony sprzętowej masz tu dwa problemy:

    1. Brak histerezy, niwelowany w pewnym stopniu przez opóźnienie czasowe w przerwaniu (pod warunkiem, że przyjmowanie kolejnych przerwań w tym czasie jest wyłączone).

    2. Na moje oko, to detekcja zera następuje przy napięciu bliższym 200V niż 0V.

    Policzmy natężenie prądu płynącego przez R1 gdy następuje zmiana stanu z wysokiego na niski (przyjmijmy że stan niski na wejściu procesora = 0,7V):

    It = (5V - 0,7V) / R1

    Jaki jest współczynnik CTR zastosowanego transoptora: wg katalogu 20...300. Więc teraz łatwo policzyć minimalny prąd diody LED w transoptorze, przy którym mamy stan niski na wejściu procesora:

    Id = It * 20%...300%

    Teraz kolej odnieść to do napięcia w sieci 230V:

    U = Id * (R2 + R3)

    To ile to będzie V?
  • Poziom 17  
    Cytat:
    Kolego shady79, zbudowałeś komparator okienkowy, a czy zastanawiałeś się jak szerokie jest okienko? I jaki czas upłynął od rzeczywistego przejścia przez zero napięcia w sieci, do sygnalizacji przez transoptor?


    Te "Okienko" daje minimalny offset który jest stały dla każdego impulsu synchronizacji, więc nie wpływa to na poprawne wysterowanie triaka. Można to zlikwidować programowo wprowadzając odpowiednie przesunięcie.

    Cytat:
    pamiętam, że odpowiedni dobór rezystora R1 ma wpływ na szerokość generowanego impulsu przejścia przez zero


    I to jest prawda, przy większej wartości rezystora R1, tranzystor wyjściowy szybciej wchodzi w nasycenie a co za tym idzie skraca się długość impulsu synchronizacji.

    Napięcie w porcie USB jest w miarę stabilne. Błędów bym szukał po stronie programowej.
  • Moderator Mikrokontrolery Projektowanie
    n0name10 napisał:
    Cytat:
    Kolego shady79, zbudowałeś komparator okienkowy, a czy zastanawiałeś się jak szerokie jest okienko? I jaki czas upłynął od rzeczywistego przejścia przez zero napięcia w sieci, do sygnalizacji przez transoptor?


    Te "Okienko" daje minimalny offset który jest stały dla każdego impulsu synchronizacji, więc nie wpływa to na poprawne wysterowanie triaka. Można to zlikwidować programowo wprowadzając odpowiednie przesunięcie.


    Najprościej je zlikwidować robiąc przerwania od obu diod transoptora - zero wypada dokłanie pomiędzy nimi.
    Ja bym się zastanowił czy Arduino się wyrabia - przez te wszystkie magiczne operacje kto wie ile czasu jest tracone. Można odpalić ten kod w symulatorze i zobaczyć ile czasu potrzeba na wejście w przerwanie i jego obsłużenie.
  • Poziom 25  
    Jeśli ma to być regulacja fazowa, OK3 nie może mieć układu włączania w zerze
  • Poziom 17  
    Cytat:
    Jeśli ma to być regulacja fazowa, OK3 nie może mieć układu włączania w zerze

    I nie ma, autor zastosował nie odpowiedni symbol dla moc3021.
  • Poziom 13  
    Mam taki program. Niestety coś jest nie tak bo nie jest w ogóle triak wyzwalany. Podejrzewam że coś nie tak jest z wyzwalaniem przerwania lub timera. Program był pisany na atmega8 ja mam arduino UNO więc trochę go przerabiałem i chyba coś spaprałem.

    zerknijcie proszę...

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 8  
    Cytat:
    Niestety coś jest nie tak bo nie jest w ogóle triak wyzwalany.


    Na schematach jest błąd. Triak musi mieć nogę A1 od strony zasilania, a nie obciążenia.
  • Poziom 13  
    Na innym programie układ ten działa, więc układ jest dobry.
  • Poziom 13  
    W pełni działający program.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Pozdr.
    Kuba