Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 8 kwi 2026, o 18:43


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 38 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 14 cze 2016, o 21:15 
Offline
Nowy

Dołączył(a): 10 lip 2015
Posty: 11
Pomógł: 0

Witam.
Temat znany, przerabiany wiele razy a jednak stwarza problemy.
Bardzo proszę o sprawdzenie schematu i kodu.

Problemy:
Żarówka się ściemnia, lecz delikatnie miga. Mam prawdopodobnie problem z detekcją zera. Próbowałem obliczyć czas pomiędzy kolejnymi przejściami przez zero -wyniki poniżej.

Kod:
10064
9988
10012
9816
240
9944
9960
10060
9848
240
9892
9912
10100
9864
10144


Jak widać, zdarza się, czasami częściej, czasami rzadziej, że wartości odbiegają mocno od 10000 us.

Kod starałem się napisać jak najprostszy:

Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Obrazek

Z góry dzięki.



Ostatnio edytowano 29 cze 2016, o 16:35 przez Stachulec, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 cze 2016, o 21:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

digitalWrite i serial.println działają bardzo wolno, blokują procesor. Użycie zmiennej typu long też nie pomaga, to kilkanaście linijek asemblera. Ten układ jest wrażliwy czasowo.
Nie wiem jak to napisać w Arduino, ale wywalił bym long, serial i zmienił digitalWrite na normalne ustawienie portu

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 cze 2016, o 23:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Skąd masz ten schemat ???

Obrazek

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2016, o 06:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
SylwekK napisał(a):
Skąd masz ten schemat ???

Wprawdzie bez gasika, ale błędu nie dostrzegam.
Detekcja zera troszkę inna (sch.I), ale wykonawczy...

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2016, o 06:13 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

A ten rezystor nie powinien czasem w bramkę wchodzić a nie do neutralnego?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2016, o 06:38 
Offline
Nowy

Dołączył(a): 10 lip 2015
Posty: 11
Pomógł: 0

@SylwekK. Przed MOC3020 miałem zamontowany MOC3063, lecz jak wyszło w praniu optotriak z detekcją zera się jednak nie nadaje. Schemat ten, co prawda bez gasika wziąłem z noty katalogowej. Pewnie to błąd, ale zapomniałem popatrzeć do noty MOC 3020 i sprawdzić jakie jest zalecane podłączenie. Z tego co się doczytałem, to gasik przy obciążeniu rezystancyjnym nie jest wymagany.

Układ detekcji zera zaczęrpnąłem z : http://serwis.avt.pl/manuals/AVT1399.pdf

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2016, o 07:50 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

Zerknij na poniższy link. Może CI coś pomoże, na pewno nie zaszkodzi.
http://www.elektroda.pl/rtvforum/topic3205740.html
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2016, o 07:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Normalnie przeraża mnie ta mnogość wersji podłączenia triaka. Ja od lat stosuję jedno sprawdzone rozwiązanie czasem tylko z gasikiem jeśli obciążenie jest indukcyjne i nie ma prawa nie działać.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2016, o 08:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1188
Lokalizacja: Kraków
Pomógł: 95

SylwekK napisał(a):
Normalnie przeraża mnie ta mnogość wersji podłączenia triaka. Ja od lat stosuję jedno sprawdzone rozwiązanie czasem tylko z gasikiem jeśli obciążenie jest indukcyjne i nie ma prawa nie działać.
Pochwalisz się tym rozwiązaniem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2016, o 08:12 
Offline
Nowy

Dołączył(a): 10 lip 2015
Posty: 11
Pomógł: 0

Tom277 napisał(a):
Zerknij na poniższy link. Może CI coś pomoże, na pewno nie zaszkodzi.
http://www.elektroda.pl/rtvforum/topic3205740.html
Pozdrawiam


Dzięki, zrealizuję i dam znać co i jak :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2016, o 09:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Co do detekcji zera - nie twierdziłem że złe, tylko takie ...rozbudowane.
Może w Twoim przypadku masz źle dobrany R3 - od niego zależy szerokość "szpilki zerowej"; spróbuj inne wartości ( ale tak raczej w górę np.15k, 22k ...) i sprawdzaj powtarzalność detekcji.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2016, o 09:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

@Marhef, przykład w tym poście na dole http://www.elektroda.pl/rtvforum/viewto ... 5#12789855.
Działa bezawaryjnie od kilku lat. Zresztą to nie jedyny układ, który robiłem w identycany sposób i to jakieś 20lat temu jeszcze na TTL'ach.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2016, o 23:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Moje zdanie:
Żadna detekcja nie zadziała, jeśli używa się serial.printf
Ta funkcja zżera czas, podobnie jak ustawianie pinu przez digitalWrite, które jest bardzo skomplikowaną, długotrwałą, blokującą funkcją.

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2016, o 07:51 
Offline
Użytkownik

Dołączył(a): 22 sty 2014
Posty: 1806
Zbananowany użytkownik

Pomógł: 168

sq5rix napisał(a):
Moje zdanie:
Żadna detekcja nie zadziała, jeśli używa się serial.printf
Ta funkcja zżera czas, podobnie jak ustawianie pinu przez digitalWrite, które jest bardzo skomplikowaną, długotrwałą, blokującą funkcją.


Ech to Arduino... Fajne jest ale na szybsze, mocniejsze procki :) Biedna Medzia może się nie wyrabiać :(

Z resztą ten kto robił ten schemat chyba nie wie że kondensator przesuwa fazę... Masakra jakaś? jak to niby ma złapać synchronizację? Dowód? Proszę bardzo:

TWÓJ UKŁAD
Obrazek
UKŁAD PORZĄDNIE ZROBIONY
Obrazek

Jak widzisz w tym drugim nie ma przesunięcia fazowego od zera...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2016, o 10:06 
Offline
Nowy

Dołączył(a): 10 lip 2015
Posty: 11
Pomógł: 0

sq5rix napisał(a):

Z resztą ten kto robił ten schemat chyba nie wie że kondensator przesuwa fazę...


W takim razie, skoro SFH620 ma dwie diody święcące ustawione przeciwstawnie, to wystarczy że usunę kondensator. Zastanawiam się tylko po co on w takim razie tam jest ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2016, o 10:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Kondensator jest tam pewnie z powodu rozpędu tego kto to projektował, bo podobny układ stosuje się w prostych zasilaczach beztransformatorowych i służy on jako ogranicznik prądu. Nie ma to znaczenia gdy robimy jakąś kontrolkę led czy małą lampkę nocną czy nawet kiedy to służy do zasilania jakiejś prostej elektroniki na uC do momentu kiedy nie jest potrzebny sygnał przejścia przez zero. Natomiast rezystor 1M równolegle do kondensatora służy do jego rozładowania po odłączeniu zasilania z dwóch powodów:
1) Najważniejszy, przy nierozładowanym kondensatorze i ponownym włączeniu do gniazdka napięcia mogą się zsumować (w zależności w jakiej akurat fazie jest przebieg sinusoidy) i docelowo nie będzie 230, ale np. 400V, co prawda w impulsie, ale wystarczającym do uwalenia reszty układu.
2) Po prostu stwarza się możliwość, że przy macaniu układu mogłoby użytkownika je... przepraszam, kopnąć :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2016, o 15:09 
Offline
Nowy

Dołączył(a): 16 maja 2016
Posty: 24
Pomógł: 3

sq5rix napisał(a):
Moje zdanie:

Z resztą ten kto robił ten schemat chyba nie wie że kondensator przesuwa fazę...

Kondensator jest właśnie po to by przesunąć fazę, lub mówiąc inaczej delikatnie opóźnić sygnał.
Dzięki temu uzyskujemy to, że impuls, a dokładnie jego narastające zbocze jest niemalże w momencie przejścia przez zero. Bez tego kondensatora narastające zbocze byłoby przed przejściem przez zero (różnica jest niewielka). Niejako przy okazji ogranicza się wydzielanie ciepła, bo mamy rezystor 1M zamiast 30k.
Tak więc autor schematu wiedział co robi. Taki obrazek jaki otrzymał kolega Nefarious19 ja miałem dla kondensatora nie 47n a 470n.

Odrębną kwesta jest czy i jak bardzo szkodliwe jest podanie impulsu (zbocza) przed przejściem przez zero. W większości przypadków nie będzie to miało znaczenia, a jeśli byłoby to ważne, to można to łatwo skompensować poprzez proste opóźnienie.

Polecam lekturę:
http://www.instructables.com/id/Arduino ... e-circuit/
na http://www.instructables.com/ jest jeszcze parę podobnych projektów - warto przejrzeć.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2016, o 15:41 
Offline
Nowy

Dołączył(a): 10 lip 2015
Posty: 11
Pomógł: 0

Panowie,
układ detekcji zera przerobiony.

Obrazek

Wszystko działa aż miło. Nie przeszkadza nawet Serial.println oraz digitalWrite.

Wyniki pomiaru czasu w us pomiędzy zerami poniżej:
Kod:
10048
9972
10036
9984
10040
9976
10040
9980
10036
9984
10032
9984
10036
9980
10040
9980
10036
9980
10036
9980
10036
9980
10040
9980
10040
9976
10040
9980
10036
9976
1004


Jedynym problemem są grzejące się oporniki 47k.

Zastosować 47k 5W?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2016, o 15:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Ciekawe, jednak Arduino się wyrabia :)
Dobrze wiedzieć... Kolejny mit rozwiany.

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2016, o 18:37 
Offline
Nowy

Dołączył(a): 10 lip 2015
Posty: 11
Pomógł: 0

Panowie, odgrzewam kotleta, ponieważ nadal jest mały problem.

Żarówka pulsuje. Tym większe pulsowanie im rzadziej Timer1 zwiększa zmienną i o jeden. Myślałem, że zwiększając zmienną przepełnienia Timera odciążę mikrokontroler poprzez rzadsze wywoływanie funkcji zalacz(). Tymczasem efekt jest odwrotny. Im czesciej wywołuje funkcję zalacz() tym mniej odczuwalne jest pulsowanie światła. Wiem, że im rzadziej wywołuje funkcję zalacz() to zmniejszam rozdzielczość ściemniania, lecz mimo wszystko czas od wykrycia zera pomimo mniejszej rozdzielczości powinien być odmierzany za każdym razem tak samo.

Pomiary czasu pomiędzy przejściami przez zero:
Kod:
10024
10008
10012
9984
10040
9992
10040
9964
10036
9992
10036
9992
10016
9992
10036
10000
10012
9988
10028
9996
10040
9992
10020
9984
10028
9996
10024
9996


Kod programu:

Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Czasy pomiędzy kolejnymi zerami wg mnie są zadowalające. Różnica na poziomie 50us nie powinna mieć wpływu na migotanie żarówki.
Być może jest jeszcze jakaś kwestia której nie jestem świadomy a może mieć wpływ na jakoś opisywanego sterowania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2016, o 05:55 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Stachulec napisał(a):
lecz mimo wszystko czas od wykrycia zera pomimo mniejszej rozdzielczości powinien być odmierzany za każdym razem tak samo.
Obawiam się, że się mylisz. Częstotliwość taktowania timera i częstotliwość sieci energetycznej na pewno nie są zsynchronizowane. Jeżeli na przykład częstotliwość taktowania mikrokontrolera będzie wynosiła 1,0005MHz zamiast dokładnie 1MHz (szczególnie może się tak zdarzyć w przypadku taktowania mikrokontrolera wewnętrznym generatorem RC), to każdy półokres sieci daje 5 taktów błędu i przy braku synchronizacji ten błąd się sumuje (czyli po 40 półokresach wynosi 200 taktów, czyli 0,2ms!). W takim przypadku, przy Twoim sposobie sterowania - im większy będzie interwał pracy timera, tym bardziej punkt załączenia triaka będzie "pływał" w stosunku do przejścia przez zero. Spróbuj zerować TCNT1 w przerwaniu od detekcji zera. To powinno poprawić stabilność wyzwalania triaka.

Drugim problemem może być to (choć nie musi), że sterowanie bramką triaka wyłączasz dopiero w przerwaniu od detekcji zera. Jeśli impuls detekcji jest wąski i zbocze sygnału wywołującego przerwanie będzie za blisko faktycznego przejścia przez zero, to może się okazać, że wyłączenie jest za późno i żarówka będzie zasilana przez cały następny półokres sieci. Biorąc pod uwagę, że masz tam pewną niestabilność w czasach pomiędzy impulsami, może się okazać, że triak czasami zdąży się wyłączyć, a czasami nie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2016, o 10:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
andrews napisał(a):
Drugim problemem może być to (choć nie musi), że sterowanie bramką triaka wyłączasz dopiero w przerwaniu od detekcji zera.

Ten problem częściowo można rozwiązać przez dobranie rezystora R3 w układzie detekcji (p. Twój schemat ) - od niego zależy szerokość "szpilki zerowej" a tym samym moment włączenia triaka.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2016, o 16:35 
Offline
Nowy

Dołączył(a): 10 lip 2015
Posty: 11
Pomógł: 0

R3 czy R2?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2016, o 17:23 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Czy zrobiłeś zmianę w kodzie, o której pisałem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 06:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Stachulec napisał(a):
R3 czy R2?

R3 - zwiększając jego wartość rozszerzasz szerokość szpilki, te zasilające LED'y są mniej krytyczne; w.g mnie 10k to dużo za mało - 47k to już lepiej ale oscylogram by Ci pomógł.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 09:56 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

kicajek napisał(a):
R3 - zwiększając jego wartość rozszerzasz szerokość szpilki...

Jesteś tego pewien? ;)

W ogóle myślę, że nie tędy droga. Impuls powinien być możliwie jak najwęższy (zbocza jak najbliżej punktu zerowego sieci), ponieważ dokładniej i bardziej powtarzalnie można określić, kiedy przejście przez zero faktycznie następuje.
Moment wyłączenia triaka w odpowiednim momencie należy wyznaczać poprzez odmierzenie czasu od poprzedniego impulsu.

Poza tym, jak tak się przyjrzałem dokładniej schematowi, wartościom rezystorów i parametrom transoptora, to chyba jednak ten impuls jest dosyć szeroki, może nawet za szeroki...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 11:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
andrews napisał(a):
Jesteś tego pewien? ;)

...dlatego zwyczajowo przed każdą moją sugestią dodaję "w.g mnie" - nie jest to ani nakaz ani pewnik - to jest odpowiednik "ja bym może spróbował..."

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 12:53 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Mam wrażenie, że kolega się na mnie obraził.
Nie było moim zamiarem kogokolwiek urazić. Każdy ma prawo się pomylić, każdemu się to zdarza, a moja korekta nie była chyba jakoś szczególnie niegrzeczna?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2016, o 05:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
andrews napisał(a):
Mam wrażenie, że kolega się na mnie obraził.

Zapewniam, że absolutnie nie - odebrałem to raczej jako oczekiwanie na potwierdzenie mojej tezy, więc odpowiedziałem zgodnie z prawdą. Forum nie służy do wzajemnego obrażania się na siebie tylko do proponowania różnych ( w miarę bezpiecznych :) ) rozwiązań - a nóż ktoś trafi...

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2016, o 06:21 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

No cóż, chciałem tylko zwrócić uwagę, że zwiększanie wartości rezystora R3 spowoduje akurat efekt odwrotny, niż opisałeś (czyli zmniejszenie, a nie zwiększenie szerokości impulsu). W związku z tym, że autor tematu najprawdopodobniej nie posiada oscyloskopu, mógłby niepotrzebnie pobłądzić szukając rozwiązania.

Jak wcześniej napisałem, moim zdaniem (popartym jednak pewnym doświadczeniem), lepiej mieć zbocza impulsu detekcji zera jak najbliżej punktu zerowego, a moment wyłączenia triaka bazować na czasie od poprzedniego impulsu.

Niemniej biorąc pod uwagę, że autor wątku najwyraźniej ignoruje moje porady (nie, żebym się obraził :)), myślę że nie ma sensu drążyć tematu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 38 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO