6/2008 Pomocnik lampki nocnej - przepełnienie

Jeżeli masz jakieś uwagi dotyczące bieżącego lub archiwalnych numerów "Elektroniki dla wszystkich" lub zauważyłeś błędy czy nieścisłości to jest to odpowiednie miejsce aby o tym napisać.
ODPOWIEDZ
rmj
-
Posty: 2
Rejestracja: 27 paź 2008, 16:19
Lokalizacja: Gdańsk

6/2008 Pomocnik lampki nocnej - przepełnienie

Post autor: rmj » 27 paź 2008, 17:05

Witam, chciałbym zgłosić problem i prawdopodobną przycznynę problemu występującą w programie Pomocnika lampki nocnej. Układ wykonałem zgodnie z opisem w EdW 06/2008. Program do kontrolera pobrałem ze strony https://elportal.pl/ftp_05/200806avt2868.zip. Układ zaprogramowałem za pomocą Bascoma i płytki z kitu AVT 3500. Układ uruchomił się bez problemu i działa prawidłowo na czasach ściemniania mniejszych od 20 min i 28 s. Jeżeli czas jest większy okazuje się, że po upływie 20min i 28 s od zaczęcia ściemniania żarówki, żarówka zapala się z pełnym blaskiem i rozpoczyna sie ponownie proces ściemniana do czasu wielokrotności 20min i 28s czyli około 40min i 56s. Po przekroczeniu tej granicy żarówka znów się zapala i cały proces znów sie powtarza aż do 45 min kiedy to zgodnie z oczekiwaniami następuje wygaszenie żarówki. Aby znaleźć przyczynę postanowiłem zanalizowć program i okazało się, że najprawdopodobniejszą przyczyną problemu jest przepełnienie w obliczeniu czasu opóźnienia zapłonu triaka. Jest tam mianowicie takie równianie

Kod: Zaznacz cały

temp  = (((T - t_normal) * (L_ZERO - L_OFFSET)) / t_dimmer) + L_OFFSET
przepełninie występuje przy obliczaniu nawiasu

Kod: Zaznacz cały

((T - t_normal) * (L_ZERO - L_OFFSET))
który jest prowadzony na typie unsigned long int więc wynik na żadnym etapie nie może być większy od 2^32, różnica

Kod: Zaznacz cały

L_ZERO - L_OFFSET
jest stała i wynosi 35000, jeżeli założyć

Kod: Zaznacz cały

t_normal=0
to przepełnienie wystąpi dla

Kod: Zaznacz cały

T=2^32/35000=122714
. T jest to czas w 10ms co daje około 20 min i 28 s.

Zastanawiam się jakby rozwiązać problem. Narazie nie mam doświadczenia w kompilowaniu programów w C więc nie moge poeksperymentować. Jakby ktoś podesłał mi info jak szybko można zacząć kompilować w C programy byłbym wdzięczny i spróbował rozwiązać problem.

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 27 paź 2008, 17:17

Po co operować na takich dużych liczbach? Nie prościej sobie zrobić zmienne: sekundy, minuty, godziny i odpowiednio je zwiększać?

rmj
-
Posty: 2
Rejestracja: 27 paź 2008, 16:19
Lokalizacja: Gdańsk

Post autor: rmj » 27 paź 2008, 18:39

Jeżeli chodzi o zliczanie czasu to pewnie by można zastosować takie rozwiązanie, jednak nie wiem czy było by to prościej ponieważ tutaj chodzi o obliczanie kąta zapłonu triaka na podstawie czasu który upłynął od włączenia układu w trybie ściemniania, który to jest z zakresu 0,25ms do 10 ms i jest zwiększany o wyliczoną stałą podczas każdej połowki sinusoidy. Powoli zastanawiam się nad zupełnie innym rozwiązaniem, mianowicie żeby skok kąta zapłonu był stały a czas ściemniania regulować przez ilość połówek sinusoidy które by upływały pomiędzy poszczególnymi zwiększeniami kąta.

[ Dodano: 2008-10-30, 16:27 ]
Udało mi się poznać tajniki kompilacji w C więc poprawiłem program wg poprzednich moich uwag. Obecnie problem przepełnienia nie występuje a przez dobór odpowiednich parametrów można uzyskać np. efekt lekkiego przyciemnienia na początku ściemniania oraz lekko rozświetlonej żarówki na końcu. Wybór czasów ściemniania zworkami pozostaje bez zmian. Więcej w komentarzach programu

[ Dodano: 2008-11-03, 11:13 ]
Pojawił się kolejny problem. Podczas ściemniania triak dość głośno brzęczy i właściwie dyskwalfikuje to układ jako pomocnik lampki nocnej, ponieważ brzęczenie przeszkadza podczas odpoczynku. Czy ktoś wie jak temu zaradzić? Próbowałem trochę załagodzić przez dołączenie do traka równolegle kondensatora rzędu kilkuset nF jednak skończyło się to na uszkodzeniu mikrokontrolera.
Załączniki
schemat.jpg
proj.zip
program
(2.24 KiB) Pobrany 695 razy

ODPOWIEDZ