Inteligentny dom #5

in #polish6 years ago

logo.png

Dzisiejszy wpis zacznę trochę nietypowo. Na początku zrobię delikatny wstęp na temat pewnego zagadnienia, które bardzo mocno wykorzystywane jest we wszelkiej maści urządzeniach elektronicznych. Dopiero później przejdziemy do samej implementacji tego w BB.

Modulacja szerokości impulsu

Groźnie brzmiąca nazwa prawda? Na samym początku mojej przygody z energoelektroniką, bardzo się bałem tego określenia 😊 Jak się później okazało niesłusznie.

Angielska nazwa to "Pulse-Width Modulation", w skrócie PWM. Jest to rozwiązanie, które stosowane jest w zasilaczach, konwerterach czy falownikach. Jest ono również wykorzystywane w małych urządzeniach, znajdujących się wokół Was.

Jeśli korzystacie np. z tzw „żarówki LED” w jej trzonie znajdziecie urządzenie, które właśnie wykorzystuje tego PWMa. Ok, ale co to właściwie jest i na czym on polega?

Sama nazwa tego zjawiska bardzo dobrze je opisuje. Wyobraźmy sobie taką sytuację: mamy źródło napięcia stałego o wartości 12V. Podłączoną do niego mamy żarówkę.
Przez określony czas, załóżmy 1 sekundę, żarówka świeci nieprzerwanie. Teraz spróbujmy ten czas trochę poszatkować. Zamontujmy w obwodzie między źródłem a żarówką łącznik, który będzie zwierać i rozwierać obwód z odpowiednią częstotliwością.
W zależności od tego jak będzie wyglądać proporcja czasu gdy łącznik jest załączony do czasu gdy jest wyłączony, odbiornik będzie zachowywał się inaczej. Zarówka ma pewną bezwładność, która sprawi, że przy wyłączeniu napięcia na moment, ona nie przestanie się żarzyć a jedynie lekko przygaśnie by po chwili znowu otrzymać pełną wartość energii. Jeśli nasz łącznik będzie klikał z odpowiednio dużą częstotliwością (większa niż 50 razy na sekundę, gdyż tyle jest w stanie zauważyć ludzkie oko), nasz wzrok nie zauważy przygaszania żarówki, a uśredni ten efekt tak, że będziemy widzieć iż świeci ona ciemniej.
W taki oto sposób jesteśmy w stanie regulować wartością napięcia wyjściowego używając tylko dwóch stanów: załączony i wyłączony.

Jest to rozwiązanie dużo lepsze pod względem energetycznym niż w przypadku używania tranzystora, który np. jest otwarty tylko częściowo. W takim wypadku grzeje się on zdecydowanie bardziej. Dlatego też PWM w tym wypadku wygrywa, gdyż praktycznie nie występują straty.

Są również tutaj pewne wady tego zastosowania. Urządzenia, które wykorzystują PWM bardzo mocno „zanieczyszczają” sieć energetyczną powodując liczne zakłócenia. W takim wypadku konieczne jest stosowanie odpowiednich filtrów, tak by sprostać wymaganiom kompatybilności elektromagnetycznej (EMC).
Kluczowe jest również wykonanie odpowiedniej instalacji a także odpowiednie dzielenie obwodów tak by możliwie jak najbardziej ograniczyć prąd płynący przez urządzenie z PWMem.

Stosunek czasu załączenia do czasu wyłączenia nazwany jest wypełnieniem. Często wyraża się go w procentach, dzięki czemu można łatwo go poczuć.

Przejdzmy do konkretów

Kończąc przydługawy wstęp, spróbujmy wykorzystać PWM do sterowania jasnością świecenia diody LED. To właśnie wykorzystując pwm można to zrobić.
Zanim jednak weźmiemy się za kodzenie, wspomnę jeszcze o jednej rzeczy, z którą się ostatnio spotkałem w domu rodzinnym.
Mianowicie, moi rodzicie mają lampkę z tzw ściemniaczem. W przypadku gdy korzysta się tam ze zwykłej żarówki urządzenie takie działa idealnie. Nie jest tam jednak zastosowany PWM a układ z triakiem, którego zasada działania jest zgoła inna.
Opowiem o tym dokładniej gdy będziemy implementować takie sterowanie w naszym komputerku.
Wracając jednak do meritum, rodzicie zamienili zwykłą żarówkę na oświetlenie ledowe i zaczęli stosować ten ściemniacz. Jak się okazało regulacja jasnością działała tylko do pewnego stopnia i bardzo krotko… „żarówka” LED padła. Jeszcze nie zdiagnozowałem jej i nie sprawdziłem co się dokładnie stało, ale podejrzewam, ze na skutek pracy urządzenia w nietypowych dla niego warunkach, elektronika odmówiła posłuszeństwa.

Reasumując, jeśli chcemy ściemniać ledy, musimy regulować napięcie przed samymi diodami a nie na urządzeniu, które te diody zasila.

Trochę kodu.

W nawiązaniu do dokumentacji możemy napisać następujący kod obsługujący PWM:


import Adafruit_BBIO.PWM as PWM
PWM.start("P8_13", 25, 1000)

Jak widzicie, wywołanie funkcji PWM jest bardo prostę. Dwie linijki załatwiają nam wszystko 😊
Składnia jest bardzo prosta. Na początku po wywłoaniu funkcji PWM.start wypisujemy wartości, które określają początkowo:

  • numer pinu
  • procentowe wypełnienie
  • częstotliwość PWMa.

W momencie gdybyśmy chcieli w trakcie programu zmienić parametr wypełnienia, możemy skorzystać z polecenia:


PWM.set_duty_cycle("P8_13", 90)

W taki oto sposób w bardo łatwo możemy zaimplementować sterowanie urządzen, które wymagaja PWMa. Oczywiście możemy dodać tutaj zane ze wcześniejszych wpisów dodatki jak deklarowanie przez użytkownika wartości wypełnienia czy częstotliwości, ale wydaje mi się, że na tą chwilę nie ma sensu tego powtarzać.

Niestety ze względu na to, że mój aparat w telefonie nie jest najlepszy, próba zrobienia zdjęć przy różnych waraintach wypełnienia spaliła na panewce. Musici emi uwuerzyć, że regulacja wypełnieniem faktycznie wpływa na jasność świecenia diody :) A jeśli nie chcecie uwierzyć to zapraszam do samodzielnych testów! :)

Podsumowanie

Mam nadzieję, że udało mi się Wam przybliżyć czym jest PWM a także jakie korzyści płyną z jego wykorzystywania. Dzięki PWMowi bedziemy mogli sterować również silnikami elektrycznymi prądu stałego, które zamonotowac będziemy mogli chociażby w wspomnianych przez mnie kiedyś roletach czy jakimś robocie, który będzie kosił nam trawę 😊
Mam nadzięję, że ktoś pójdzie moimi śladami i sam zacznie co majsterkować przy mini komputerku typu BBB czy rasberry :)
Dziękuję za każdy upvote i komentarz!

Sort:  

This post is supported by $2.12 @tipU upvote funded by @cardboard :)
@tipU voting service guide | STEEM Monsters Lottery | For investors.

Congratulations! By using @tipU service today you have won STEEM MONSTER Booster pack :) Please go to https://steemmonsters.com and login to claim your reward

More info about the @tipU STEEM MONSTERS lottery :).

Coin Marketplace

STEEM 0.19
TRX 0.15
JST 0.029
BTC 62763.51
ETH 2579.20
USDT 1.00
SBD 2.72