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



Teraz jest 25 kwi 2024, o 07:12


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 7 wrz 2017, o 00:48 
Offline
Nowy

Dołączył(a): 09 gru 2016
Posty: 4
Pomógł: 0

Cześć,
składam projekt na uczelnię, który ma w wymaganiach użyciu kilku "rzeczy" - RTC, diody itp. Jednym z wymagań było sterowanie natężeniem power leda. Znalazłem moduł nazywający się FemtoBuck, który ułatwia sterowanie takimi ledami, dlatego stwierdziłem - czemu nie, wygląda w porządku, upraszcza cały układ, chętnie zobaczę coś nowego. Na stykówce powoli doprowadzałem do działania kolejne rzeczy, najpierw zwykłe diody, potem termometr, potem przyciski, potem wziąłem się za tego power leda - trochę posiedziałem, zadziałał, zabrałem się dalej za wyświetlacz, więcej przycisków oraz RTC, ale power leda odłączyłem - przecież działa, po co ma mi świecić. Być może to był błąd, bo gdy myślałem, że już mam wszystko i pozostało się tylko upewnić, to okazało się że power led zaczął mrugać (nie mogę powiedzieć, że nieregularnie, ale chociażby świeci w 4 fazach, a nie w 2 - słabo, średnio, słabiej, mocno, żadna z nich nie trwa tyle samo - mam nadzieję że w miarę rozumiecie). I od tego momentu nie udało mi się nic z tym zrobić.

Datasheet mówi, że do sterowania natężeniem oświetlenia mogę korzystać z fali o częstotliwości najlepiej nieprzekraczającej 500Hz. W swojej Atmedze odblokowałem to wewnętrzne dzielenie przez 8, czyli jak rozumiem jest taktowana zegarem 8MHz. Dodatkowo, FemtoBuck domyślnie daje maksymalny prąd 330mA, chyba że się zlutuje zworkę, to może dawać 660mA - nie robiłem tego, więc z datasheeta wnioskuję, że maksymalne natężenie oświetlenia otrzymam przy wypełnieniu 50% i będę mógł to natężenie zmniejszać, odpowiednio regulując wypełnienie. Cały sterownik musi być zasilany napięciem przynajmniej 7V.

Niestety za nic nie mogę namówić tego modułu do współpracy. Co jest dla mnie najdziwniejsze to fakt, że wcześniej było ok, a teraz już nie. Oczywiście od momentu, gdy na początku mi się udało, nieco się zmieniło. Doszedł wyświetlacz na sterowniku SSD1306, z którym komunikuję się przez SPI oraz moduł RTC DS1307 z komunikacją przez I2C oraz 3 przyciski. Zmieniłem zegar z 1MHz na 8MHz (poprzez ustawienie odpowiedniego fuse bitu) oraz grzebałem nieco w ustawieniach kompilatora i linkera, żeby możliwie zmniejszyć plik .hex.

Próbowałem już: ustawiania różnych częstotliwości z zakresu ~5Hz-1MHz, wypięcia wszystkiego z płytki i włożenia na nowo, zbudowania .hexa z wcześniejszymi ustawieniami linkera i kompilatora, wywalenia z kodu programu obsługi wyświetlacza, RTC, potem również wywalenie z kodu wszystkiego oprócz generowania fali, także fizyczne wypięcie wszystkiego niezwiązanego z tym sterownikiem, sprawdzanie na timerze0 i timerze1.

W tym momencie, przy moim stanie wiedzy już chyba nie wymyślę, co może być nie tak. Zamieszczam wycinki kodu odpowiedzialne za sterowanie LEDem:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


W razie czego dorzucam też cały kod programu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Zamieszczam też schemat według którego wszystko składam:
Obrazek

Z taką uwagą, że na stykówce już sobie darowałem mostek prostowniczy oraz linię SDA podciągnąłem z zewnątrz rezystorem 10k, bo o ile faktycznie producent zadbał o to, że na module RTC są rezystory podciągające, to żeby z nich skorzystać trzeba polutować zworki - a komuś mało wprawionemu w lutowaniu udało się zlutować tylko jedną. W każdym razie, akurat to działa.

Niestety nie posiadam oscyloskopu, natomiast pisząc tego posta stwierdziłem, że może chociaż miernikiem sprawdzę co się dzieje na wyjściu timera. Miernik pokazuje wahania pomiędzy 2,1V a 3,1V. Nie wiem jak wyglądają wskazania gdy mamy do czynienia z falą, czy jest to jakoś uśredniane, czy jest to maksimum, ale jeśli dobrze zrozumiałem, to dla tego sterownika (FemtoBuck) minimalne napięcie, które jest uważane za "1" to 2,5V - czyli może tu jest pies pogrzebany. Pytanie jednak jak to w takim naprawić, chyba że widzicie błąd gdzie indziej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 wrz 2017, o 13:28 
Offline
Użytkownik

Dołączył(a): 19 sty 2014
Posty: 83
Pomógł: 2

Czym zasilany jest układ (taki power led już trochę bierze)?
To czy układ ma być ustawiony na 330 mA czy 660 mA zależy od Leda i powinno być właściwie ustawione zgodnie ze specyfikacją led-a.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 wrz 2017, o 13:43 
Offline
Nowy

Dołączył(a): 09 gru 2016
Posty: 4
Pomógł: 0

jaca_76 napisał(a):
Czym zasilany jest układ (taki power led już trochę bierze)?

Zasilacz sieciowy 12V 2,5A
jaca_76 napisał(a):
To czy układ ma być ustawiony na 330 mA czy 660 mA zależy od Leda i powinno być właściwie ustawione zgodnie ze specyfikacją led-a.

Dioda ma w parametrach pracy wpisany prąd 300-350 mA, czyli to powinno być ok.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 wrz 2017, o 20:13 
Offline
Użytkownik

Dołączył(a): 28 wrz 2016
Posty: 215
Pomógł: 14

Postawiłbym na to, że częstotliwość PWM'u jest za duża. Ale to tylko zgadywanka.
Ja bym tak podszedł do tematu.
1. Sprawdził moduł FemtoBuck z diodą, w ten sposób, że wejście CTRL pozostawił wiszące - wtedy dioda powinna świecić się pełnym blaskiem. Następnie zwarłbym to wejście do masy, dioda powinna zgasnąć. Jeśli tak się stanie, to moduł FemtoBuck i dioda są sprawne.
2. Do wyjścia Atmegi LED_Control podłączyłbym dwie diody led (zwykłe, przez rezystor), jedną do plusa, drugą do masy. W trakcie pracy programu obie diody powinny się świecić, a intensywność świecenia powinna się zmieniać przy zmianie wypełnienia PWM. Jeśli tak się dziej, to PWM działa.
3. Zastosowałbym największy z możliwych podział zegara PWM i ewentualnie obniżył taktowanie ATmegi.

_________________
de gustibus non est disputandum



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 wrz 2017, o 21:21 
Offline
Nowy

Dołączył(a): 09 gru 2016
Posty: 4
Pomógł: 0

Okej, wnioski z pierwszych 2 punktów:
FemtoBucka bym wykluczył, bo po sprawdzeniu punktu 1 wszystko działało w porządku. Natomiast jeśli chodzi o punkt 2, to zwykła dioda zachowywała się tak samo jak power led - mrugała, ale w nierównych odstępach (czyli coś jakby bardzo nierówne wypełnienie).
Popróbowałem jeszcze raz z różnymi częstotliwościami, niestety bez skutku, dioda po prostu mruga, a staram się testować mniej więcej wypełnienie 5% - zdecydowanie nie mruga z takimi proporcjami, jak już to znacznie bliżej 50%.
Co ciekawe, gdy ustawiam wypełnienie 50%, wykorzystując takie funkcje jak w programie (zmienne do kontroli czasu trwania "0" i całego cyklu oraz obliczenie czasu trwania "1" + przerwanie), to dioda trochę przygasa i wszystko jest ok. Gdy wcześniej udało mi się doprowadzić tę część układu do działania też tak to wyglądało na wypełnieniu 50%, więc obstawiam że jest to jedyny przypadek kiedy działa dobrze.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 wrz 2017, o 06:26 
Offline
Użytkownik

Dołączył(a): 28 wrz 2016
Posty: 215
Pomógł: 14

Żeby upewnić się, że część sprzętowa działa poprawnie spróbowałbym prostego programu na miganie diodą, tj LED_ON, _delay_ms(5), LED_OFF, _delay_ms(5). Ale to tylko dla pewności, bo jestem przekonany (ale nie pewny), że sprzęt jest OK.
Przyczyny upatrywałbym albo w blokującym działaniu procedur lub nakładania się sterowania wyjść. Np obsługa DS może zawierać delay'ie. Niestety bez znajomości bibliotek mogę tylko gdybać. Może spróbuj wywalić wszystkie biblioteki. Może to w nich jest konflikt.
Twoje PWM dla diody jest jakieś niestandardowe. W przerwaniu używasz licznika do sterowania PWM. A dlaczego nie użyć sprzętowego PWM i tylko zmieniać wartość.


Autor postu otrzymał pochwałę

_________________
de gustibus non est disputandum



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 wrz 2017, o 11:44 
Offline
Nowy

Dołączył(a): 09 gru 2016
Posty: 4
Pomógł: 0

W bibliotece z DS są delay'e, ale przecież one nie powinny wpływać na to, co dzieje się w przerwaniach. Tak zawsze myślałem.
Niemniej jednak muszę się ze wstydem przyznać do lenistwa, bo chciałem złożyć projekt jak najszybciej i zastosowałem CTC - bo przecież już go znałem i korzystałem, trochę programowo wszystko obsłużę i będzie ok. Dlatego bardzo dziękuję za uwagę z niestandardowym PWM, trochę porządniej podszedłem do sprawy, przeczytałem wreszcie o innych trybach i po zastosowaniu sprzętowego PWM udało mi się uzyskać upragniony efekt. Tak się przejechałem, bo chciałem zrobić szybko i "byle działało" zamiast troszkę się wysilić i zrobić dobrze ;) Ogarnięcie sprzętowego PWM zajęło 15 minut, a nad moim problemem siedziałem dobre parę dni, niestety.
Mimo wszystko i tak trochę dręczy mnie dlaczego ten mój sposób "naokoło" nie działał, bo tak czysto teoretycznie nie wiem, co tam może być nie tak.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 wrz 2017, o 12:13 
Offline
Użytkownik

Dołączył(a): 28 wrz 2016
Posty: 215
Pomógł: 14

Wszystko dobre, co się dobrze kończy. Jak skończysz nie zapomnij pochwalić się tu na forum. I gratulacje, że się nie zniechęciłeś i uzyskałeś zaplanowany efekt.
Co do DS, to są tam przebiegi czasowo krytyczne i mogą być blokowane przerwania.

_________________
de gustibus non est disputandum



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: 8 ] 

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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO