Skocz do zawartości
rpp

Sterowanie PWM (lampą LED) z poziomu Profiluxa

Rekomendowane odpowiedzi

Zmotywowany przez jednego z forumowiczów postanowiłem zmierzyć się z tematem, który robiąc własną lampę LED niestety rozwiązałem w niezbyt dobry sposób czyli jak sterować LEDami z poziomu Profiluxa.

Jak wiadomo Profilux nie ma wyjścia PWM. W momencie gdy budowałem swoją lampę na rynku nie przystawki z GHLa (LED Control 4 Passive). Mając Profiluxa koniecznie chciałem móc nim sterować także oświetleniem więc jedynym znanym mi wyjściem było zastosowanie ściemnianych zasilaczo-driverów Meanwell ELN60-48D. Mają one możliwość sterowania 1-10V co w praktyce jest lekką ściemą bo przy napięciu sterowania < 1.8V po wyłączeniu danego kanału następuje seria niekontrolowanych błysków LEDów. Startowanie z poziomu 1.8V za to daje stosunkowo duży prąd na diody więc już na dzień dobry jest dosyć jasno.

Czyli rozwiązanie przeciętne.

Należy mieć na uwadze fakt, że jasność diody nie jest liniowa wraz ze wzrostem płynącego przez nią prądu czy też wypełnienia sygnału PWM. To czego oczekujemy przy wschodach/zachodach symulowanych przez nasze lampy to pewnie max. 5-10% faktycznej wydajności diody - później oko owszem zauważy różnicę ale nie jest ona aż tak drastyczna jak właśnie te początkowe 5% mocy.

Niestety nikt ze znanych mi osób nie korzysta z rozwiązania GHLa a wywalać ponad 200zł żeby przekonać się, że jest podobnie jak w przypadku Meanwelli to trochę nieporozumienie więc postanowiłem zbudować coś samodzielnie (skoro lampa jest DIY to i częściowe sterowanie może być DIY).

Na początek poszedł układ analogowy oparty na układzie TL084 (OPAMP) ale niestety poległem bo za chiny mi to nie działało tak jak powinno, a bez osprzętu typu oscyloskop trudno było nawet zweryfikować czy generuje mi ten oczekiwany PWM czy nie. Dodatkowo w przypadku gdyby rozjaśnianie/ściemnianie nadal następowało zbyt radykalnie (a było takie ryzyko) to w tym przypadku nie ma za bardzo szans na korekty.

Tak więc dochodząc do sedna zacząłem kombinować z mikroprocesorami Atmela nie mając wcześniej żadnego doświadczenia z takimi ustrojstwami (na szczęście programowanie jako takie nie jest mi obce ale mikroprocesorów nigdy nie programowałem).

I tak powstał taki twór (tu świeci na 1% wypełnienia PWM - minimalny poziom do uzyskania z Profiluxa przy 8 bitowym PWM czyli całkiem nieźle szczególnie porównując do Meanwelli):

gallery_7763_1765_63369.jpg

A tu 5% PWM i lekka kombinacja z Profiluxem żeby rozjaśnianie nie było tak szybkie (wg Profiluxa to 50% mocy danego kanału):

gallery_7763_1765_20635.jpg

Generalnie można zrobić praktycznie dowolną kombinację robiąc albo typowo liniowe wypełnienie (czyli 100% zgodność ze wskazaniami Profiluxa - tam 50% na kanał - tu 50% wypełnienia PWM) albo jakąkolwiek inną zależność (typu 30% Profiluxa - 3% PWM).

A skoro mikroprocesor to szkoda żeby się marnował więc do tego można dopiąć wyświetlacz pokazujący % danego kanału, dodać czujniki temperatury do umieszczenia na radiatorze wraz ze sterowaniem wiatrakami (prędkość zależna od temperatury), itp. czyli mój plan na najbliższą przyszłość.

Oczywiście nie obyło się bez strat - czyli przez moją nieuwagę jeden wyświetlacz LCD i jeden mikroprocesor poszedł w piach :wallbash:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Witam w klubie posolonego (bo przecież że nie posypanego tą drugą przyprawą elektronika :D

Pięknie ładnie i od tego zaczyna się przygoda. Zazdroszczę ci tego uczucia - kiedy po raz pierwszy na LCD pojawiają się te oczekiwane literki.... potem jest już coraz trudniej :thumbsup:

8 bitów - do którego timera podłączyłeś driver? użyj 10 bitowego PWM z Timera1 - będzie o wiele fajniej. Pomiar A/D - uśredniasz? skąd napięcie odniesienia ?

Fajnie że sie zdecydowałeś. Gratuluje :)

BTW - to ci pomoże: http://www.societyofrobots.com/member_tutorials/files/ATMega8.pdf

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Leszek - na razie to mocno testuję co będę potrafił zrobić.

Użyłem Attiny44 i wyjście podpiąłem do Timer1 ale ustawiłem go z ciekawości na 8 bitów żeby zobaczyć jak to będzie wyglądało.

Mój sąsiad trochę mi pomógł i przygotował tablicę 255 elementową gdzie zrobił coś w stylu "odwrotnego logarytmu" czyli przypisał do poszczególnych wartości wejściowych wartości do ustawienia w PWM tak żeby przyrost napięcia wejściowego powodował w miarę liniowe optyczne odczucie rozjaśniania LEDów. Dlatego A/D w sumie nie uśredniam bo i tak po przejściu z 10bit. ADC na 8bitów na potrzeby tej tablicy samo się w pewnym sensie uśrednia (Profilux generuje w miarę stabilne napięcie +/- 0.01V).

Jeśli chodzi o napięcie odniesienia to generalnie ADC skonfigurowałem tak (pisane w Bascomie bo było mi najprościej na początek):

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Zastanawiam się tylko czy jest konieczność używania zewnętrznego rezonatora czy przy takich założeniach (PWM, pomiar temperatury + sterowanie wiatrakami) nie wystarczy wewnętrzny oscylator (czy to tego procka czy w przyszłości Atmega8 jak się rozpędzę).

A mam jeszcze prośbę - jakbyś mi odpisał na moje ostatnie PW dot. właśnie generatora PWM w Atmega8 to byłbym wdzięczny :-)

EDIT: czyli są dwa PWM 16bit i 1 PWM 8bit - na potrzeby dwóch kanałów LED i jednego kanału dla wiatraków będzie to idealne :-)

Edytowane przez rpp

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zerknij w PDF odnośnie M8 - ten który wkleiłem wyżej. Konfigurując rejestry zgodnie z tabelą - ustaw 10 bitów FastPWM - konfiguracja clear up/down - musisz mieć zgodną z hardware, wartość wypełnienia wpisujesz do rejestrów OCR1A i B - oczywiście dla danego kanału.

W attiny44 masz 16 bitowy Timer1 - zrobisz na nim 10 bitowy PWM z wyjściami na nogach PA5 i PA6

EDIT: 16 bitów PWM sobie odpuść bo dla naszych celów sie nie nadaje choć wygląda pięknie ma wady, w zależności od trybu nie uzyskasz albo maximum albo minimum wypełnienia.

Wewnętrzny rezonator starczy - ustaw go tylko na 8MHz - czym wyżej tym wyższa będzie fPWM - efekt migotania mniejszy.

Odniesienie z dla A z VCC - ok, ale użyj jakiegoś układu filtrujacego zakłócenia - nie podłączaj AVCC "na pałę" do VCC - zerknij do PDFa tam jest ładnie napisane jaki dławik, jaki kondensator etc.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A jeszcze jedno - w Waszych lampach jak przyjęliście podawanie % dla danego kanału? Czy jest to faktyczny % wypełnienia PWM czy może bardziej "jak to nasze oko postrzega"?

Docelowo to na 99% przesiądę się na Atmega8 ale na razie muszę opanować to co mam teraz :-) Chcę pokombinować jeszcze z pomiarem temperatury za pomocą interfejsu 1wire (wystarczyłoby pewnie zwykłe ale jak się bawić to na całego :-) ) i zrobić na tej podstawie sterowanie prędkością wiatraków.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tabela wartości z logarytmem to był idealny pomysł - uśmiechnąłem się jak to czytałem, bo w RT tak mam to zrobione - M1280 to ma troszkę pamięci można poszaleć.

W Tiny44 ja bym nie robił se harakiri tylko zrobił liniowo. 10 bitów PWM, wartości od 0-1000 (tak 1000 nie 1023) i masz z górki. A te 23 oczka od góry to w przełożeniu na prąd w okolicy max wypełnienia to są śmiesznie nieistotne pojedyncze mA.

W Bascom czy to Tiny44 czy Mega8 - nie ma różnicy. Zmienisz nagłówek i wio. Szkoda czasu siadaj na większy od razu.

Edit: jak już wiatraki sterujesz i temperaturę czytasz - dołóż zegar RTC jakiś i wywal Profiluxa w cholerę.... a przynajmniej odepnij go od lampy.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@markus892 - częściowo tak ale głównie Darek zaczął mi marudzić, żebym mu pomógł złożyć lampę. Chciał ze sterowaniem z Profiluxa a to co mam w tej chwili jest kiszkowate więc zacząłem kombinować jak to usprawnić.

@loccutus - to z ciekawości jak masz tabelę z logarytmem jak założyłeś pokazywanie na ile % świeci lampa? Czy zgodnie z % wypełnienia PWM czy raczej zgodnie z wartością indeksu z którego odczytujesz % wypełnienia PWM?

@chodi - a ja się uparłem, że chcę mieć sterowanie z Profiluxa i co na to poradzę? ;-)

Edytowane przez rpp

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

kurna chodi płytkę popełnił - teraz już wiem skąd pytanie o goldpiny do LCD... ::woot: Łukasz - wiesz co jest najlepszego w SMD ? nóżek nie trzeba obcinac = połowa syfu na biurku znika. Przekonałem cie do tej zabawy - daj mi troche czasu to cie na SMT przeciągnę :ninja:

Wartości % widoczne na LCD - odpowiadają pobranym z tabeli wartościom wyliczonym w excelu i przypisanym do każdego "oczka procentowego" po czym są przepisywane do właściwego rejestru OCRxy. Naprawdę kupa z tym roboty a wszystko to żeby 50% wydawało się rzeczywiście o połowę ciemniejsze niż 100% :)

Uparłeś sie na tego profiluxa - ok - robimy zakłady kiedy zmienisz zdanie ?? :whistling:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Leszek - czyli jeśli dobrze zrozumiałem to podany % to takie "optyczne" odczucie jasności danego kanału a nie wypełnienie PWM?

Co do Profiluxa - podobno tylko krowa nie zmienia poglądów :-)

Skoro już dobrałem się do mikroprocesora to obawiam się, że bardzo szybko zrezygnuję z Profiluxa bo dorobienie prostego menu pozwalającego na zaprogramowania czasów start/stop to kolejny krok głównie w celu poznawczym własnych możliwości :-)

Ale nie chcę się rzucać od razu na głęboką wodę, więc na razie i tak uważam za ogromny sukces zaprogramowania układu, dopięcie do tego wyświetlacza, wygenerowanie PWM i nawet przed chwilą odpaliłem 2 czujnikowy pomiar temperatury.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dokładnie tak - procenty są dla ludzi nie tylko w prockach :laugh:

Już się rzuciłeś na głęboką wodę tylko nawet sobie z tego sprawy nie zdajesz - ta zabawa jest jak narkotyk, zaczyna się niewinnie od mrugania ledem i "hello world" na LCD, - kończy się ... cholera wie gdzie - jeszcze nie dotarłem :woot:

To kiedy robimy zlot forumowych elektroników ??

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się

×