Temperatura - jak ją mierzyć?
Wystarczy, że kupisz popularny tani czujnik temperatury DS18B20.
Cena w dniu 14.04.2011 około 5.00 zł
Pomiar temperatury to jeden z ciekawych i niezbyt skomplikowanych projektów dających wiele satysfakcji.
Częstym problemem jest konwersja odczytanej temperatury na postać możliwą do wyświetlenia. Rozwiązanie tego problemu znajdziesz tutaj: Temperatura - konwersja na wyświetlacz
Jeżeli masz w swoim mikrokontrolerze dostępny przetwornik ADC i wolny jakiś kanał pomiarowy, to możesz skorzystać z termistorów, które są znacznie tańsze (koszt około 1 zł - cena 2011r.).
Przykładem takiego układu jest rodzina MCP9700, MCP9701. To termistory, które za niską cenę oferują wystarczające parametry dla wielu zastosowań.
PWM (ang. Pulse-Width Modulation) to generowany z wybraną częstotliwością np. 1kHz sygnał o różnym Duty Cycle, czyli współczynniku wypełnienia stanem wysokim i niskim. Najlepiej przedstawią to poniższe przykładowe animacje:
Poniżej inny rodzaj sygnału PWM tzw. Fast PWM:
Duty cycle - to właśnie procent wypełnienia przebiegu i obliczany jest stosunkiem czasu trwania sygnału wysokiego do czasu trwania pełnego jednego cyklu.
Dokładne informacje o dostępnych rodzajach PWM i sposobach jego ustawiania znajdziesz w datasheet swojego mikrokontrolera.
Każdy przycisk lub styki przekaźnika, kontaktronu, czy impulsatora stykowego (enkodera) mają tendencję do drgania w czasie zwierania i/lub rozwierania. Zjawisko to jest stricte mechaniczne i zwane jest drganiem styków (ang. Bouncing).
Zjawisko to trwa od kilkudziesięciu mikrosekund do kilkudziesięciu milisekund, zarówno przy zwieraniu jak i rozwieraniu styków:
pomyłki kierunku obrotu i ilości impulsów w enkoderze (impulsatorze),
itp
Na poniższym filmiku autor demonstruje projekt, który nie jest zabezpieczony przed drganiami styków. Program powinien po naciśnięciu przycisku zmienić stan diody na przeciwny. Ale losowa ilość drgań styków, powoduje losowe zmiany stanu diody LED:
Każdy styk drga inaczej.
Styk stykowi nierówny więc i drgania bywają różne. Styki jakiegoś elementu tego samego producenta i typu (np. microswitch, czy kontaktron), ale pochodzące z dwóch różnych partii mnogą mieć różne właściwości, przez co różne okresy drgań.
Aby pokazać zjawisko wykonałem prosty test 14 różnych elementów stykowych wykorzystując mikrokontroler ATmega8 taktowany kwarcem 16MHz. Test polegał na zliczaniu drgań styków od momentu wykrycia pierwszego zbocza i zakończeniu po wystarczająco długim czasie, by uznać stan styków za stabilny.
Elementy stykowe były podłączane do wejścia T0 Timer0, co pozwoliło zliczać ilość drgań przy przełączaniu przycisków z maksymalną możliwą dla tego mikrokontrolera prędkością (zgodnie z: Jak mikrokontroler "widzi" sygnał cyfrowy?):
Zwróć uwagę na różnice w ilości drgań styków:
tych samych elementów stykowych pomiędzy kolejnymi próbami,
występujące pomiędzy poszczególnymi testowanymi elementami.
Z dokumentacji producenta przekaźników Relpol S.A w temacie drgań styków przekaźnika:
sprzętowo - np. prosty filtr RC lub specjalne układy takie jak MAX6816, MAX6817 czy MAX6818,
programowo (kilkukrotne sprawdzenie, czy stan styków (przycisku, przekaźnika, itp) jest taki sam w ciągu np. 20 milisekund).
Technik pozbywania się tego problemu (ang. Debouncing) jest bardzo dużo i zależą od tego, jakie peryferia masz dostępne w swoim mikrokontrolerze. Budując swój projekt musisz zabezpieczyć się przed tym zjawiskiem.
Co zrobić, gdy nie znam parametru maksymalnego czasu drgań?
Jeżeli nie znasz parametru gwarantowanego maksymalnego czasu drgań styków danego elementu (brak dokumentacji lub producent nie podał w niej tej danej) powinieneś podejść do tego problemu od drugiej strony. Wystarczy przyjąć maksymalny możliwy czas reakcji (opóźnienia) jaki możesz dopuścić na stwierdzenie, że styki zostały rozwarte, czy też zwarte.
Przykład 1:
Jeśli mówimy o zwykłym przycisku (który będzie przyciskany palcem) wystarczy przyjąć, że nie będzie on mógł być wciśnięty częściej niż na przykład 8 razy na sekundę. Dlaczego 8 razy? Spróbuj pobić ten wynik :-)
Mamy więc 8 okresów złożonych ze stanów wysokich i niskich, czyli łącznie 16 kolejnych stanów styków. W związku z czym możemy przyjąć czas drgań równy 1/16 sekundy, czyli 62,5ms, co jeśli będziesz potrzebował możesz zaokrąglić w dół na przykład do 60ms.
Przykład 2:
Jakieś urządzenie załącza przekaźnik, którego styki podłączone są do wejścia mikrokontrolera. Przekaźnik włączany i wyłączany jest w dużych odstępach czasowych np. raz na 10 minut, a styki zwarte są przez sekundę. Reakcja mikrokontrolera nie może być spóźniona więcej niż 0,5 sekundy
Jaki maksymalny czas eliminacji drgań styków więc przyjąć?
Odpowiedź: Nieco krócej niż 0,5 sekundy.
Takie zasady postępowania dają pewność prawidłowej eliminacji drgań styków dla każdego przypadku jaki spotkasz na swojej drodze.
Zawsze jest jakieś ale:
Przykład 3:
Załóżmy że mamy przypadek enkodera (impulsatora) pokrętła głośności we wzmacniaczu audio. Pokręcenie nim z dużą prędkością kątową może spowodować, że styki nie zdążą się ustabilizować, gdy już muszą zmienić stan na przeciwny. Dochodzi wtedy do zjawiska nałożenia się drgań, co skutkuje brakiem możliwości prawidłowego rozpoznania poszczególnych faz obrotu enkodera. Na ten temat więcej znajdziesz w artykule: Impulsator stykowy
Jaki wtedy należy przyjmować maksymalny czas drgań styków?
Można lub należy przyjmować więc standardowy jak w przypadku wolnego kręcenia na zasadzie przykładu nr 1, ale dodatkowo zastosować trochę cyfrowej "inteligencji", czyli np. jeśli to wspomniany wzmacniacz audio, to można przyjąć, że:
jeśli wcześniej był nastawiony głośno, to oznacza chęć szybkiego zmniejszenia głośności,
jeśli wcześniej był nastawiony cicho, to oznacza, że może przez przypadek pokręcił zbyt szybko i nie należy gwałtownie zwiększać głośności.
Należy jednak wziąć pod uwagę, że zasada taka może być stosowana w popularnym sprzęcie, ale dla DJ-a może być nie do zaakceptowania :-)
Resumując:
To my decydujemy co jest dla nas ważne i to my decydujemy o tym, jaki czas drgań styków (przy braku danych z dokumentacji) należy przyjąć - myśl jednocześnie jak inżynier i użytkownik urządzenia, które projektujesz, ale nie ryzykuj (skracając czas eliminacji drgań styków), gdy nie ma ku temu powodów.
Delay - jest be!
Przy tej okazji należy wspomnieć, że powyższe ogólne zasady postępowania przy braku dokumentacji elementu zawierającego styki mogą być nieakceptowalne dla przypadków, w których programista używa funkcji opóźnień typu delay() i trudno zaakceptować, że mikrokontroler będzie kręcił się w kółko przez np. 0,5 sekundy.
Należy więc podkreślić, że eliminację drgań styków warto (gdy jest to możliwe) opierać o timer i przerwania. Większość projektów urządzeń opartych o mikrokontrolery wykorzystuje jakiś timer do odmierzania stałych okresów. Wystarczy więc fragment programu eliminacji drgań styków dodać do przerwania tego timera i już mamy problem z głowy :-)
Co więcej większość projektów nie wykorzystuje wszystkich timerów, można więc często zaprząc jeden z nich tylko i wyłącznie do obsługi zadania eliminacji drgań styków.
Eliminacja programowa
Eliminacja drgań za pomocą programu nie jest zadaniem trudnym. Jednakże ze względu na to, że zależy ona od tego, co masz dostępne w swoim mikrokontrolerze oraz ile masz wolnej mocy obliczeniowej (czyli de facto jak napisany jest Twój główny program), stąd nie ma jednego najlepszego rozwiązania.
Oto kilka linków do programowego pozbywania problemu:
zwiększenie obciążenia mikrokontrolera dodatkowym zadaniem, co czasami jest nieakceptowalne.
Eliminacja sprzętowa za pomocą kondensatora
Rys. 3.1
Najczęstszą formą jest zastosowanie kondensatora podłączonego równolegle do przycisku. Kondensator eliminuje drgania "wygładzając" sygnał podawany do mikrokontrolera.
Ale to nie jest bezpieczne rozwiązanie!!! W momencie gdy przycisk zostanie naciśnięty, cały zgromadzony w kondensatorze ładunek, w ułamku sekundy zwierany jest do masy, a prąd który płynie przez przycisk jest, co najmniej duży :-)
Jest to na tyle istotne zagrożenie, że na przykład Atmel postanowił w marcu 2011r. zmienić swoją notę AVR042 z 2005r. na nową i opisał to zjawisko na przykładzie podłączenia przycisku do pinu RESET:
Przetłumaczony tekst:
Atmel AVR042 - 03/2011:
W czasie gdy przycisk zostanie naciśnięty zwiera kondensator do masy, prąd płynący przez przycisk może osiągać bardzo duże wartości (tzw. szpilki).
Niestety drugie zdanie z powyższej kopii fragmentu noty AVR042 jest nieco mylące, ponieważ informuje o tym, że te szpilki powodują drgania styków.
Faktycznie jest inaczej! To drgania styków w połączeniu z dużym prądem rozładowania kondensatora i innymi elementami (o tym piszę w dalszej części), powodują powstanie szpilek w ilości odpowiadającej ilości drgań przycisku.
Potwierdził to support Atmela w odpowiedzi na moje pytanie o nieścisłość tego zapisu i zapewnił, że zmienią notę przy najbliższej okazji:
Atmel 21.10.2011 14:22
Dear Jacek,
Yes you are correct. The current through the switch from the capacitor does
not make the switch to bounce.
...
We will have this intimated to our internal resources and hope will be made easy to understand in future as soon as possible.
Best Regards,
Atmel Technical Support Team
Trzymam Atmela za słowo i zobaczymy, czy i kiedy to zmienią :-)
W dalszej części noty Atmel dokładnie wyjaśnia dlaczego te szpilki powstają:
No to tłumaczymy zjawisko:
ścieżki na płytce PCB oraz przycisk mają pewną indukcyjność (małą, ale jednak jest)
w momencie przyciśnięcia przycisku następuje zwarcie kondensatora do masy,
duży prąd zwarcia oraz indukcyjność, powodują wygenerowanie szpilki zgodnie ze wzorem
szpilka ma ma znacznie większe napięcie, niż dopuszczalne na pinach mikrokontrolera
Jak duże napięcie ma szpilka?
Napięcie szpilki można w przybliżeniu wyliczyć z następującego wzoru:
gdzie: Vi - napięcie wygenerowanej szpilki L - indukcyjność ścieżek PCB i przycisku di - zmiana prądu dt - czas trwania przepływu prądu
Zjawisko przedstawione wzorem jest bardzo podstępne ponieważ, gdy prąd jest duży, to kondensator rozładowuje się szybko, to wartość ułamka gwałtownie rośnie. I dlatego właśnie szpilki są tak niebezpieczne.
Zobacz jak powstaje 300V na niewielkim przekaźniku zasilanym zaledwie 12V: Przekaźnik i zakłócenia
W przypadku kondensatora i przycisku, oczywiście tak duże napięcie nie powstanie, ale pamiętać należy o tym, że większość mikrokontrolerów może zostać uszkodzonych, gdy napięcie na pinie mikrokontrolera przekroczy napięcie dopuszczalne o zaledwie 0,5V-1V.
Ile szpilek powstanie?
Ilość drgań styków jest nieprzewidywalna. Może być jedno, ale może też ich być kilkanaście. Zależy to od samego przycisku, jego stanu oraz innych czynników, jak temperatura itp. Często jest też tak, że przy naciskaniu jest generowanych więcej drgań niż przy puszczaniu, ale są wyjątki :-)
Jak długo trwa to zjawisko?
Z reguły drgania styków przycisku trwają od kilku do kilkudziesięciu milisekund.
Jakie są tego skutki? Powstawanie szpilek o wysokim napięciu może powodować:
uszkodzenia mikrokontrolera,
generowanie zakłóceń dla całego układu.
Generowanie zakłóceń na sąsiednich ścieżkach
Skoro wyżej napisałem już o zakłóceniach, które generowane są przez prąd z rozładowywanego kondensatora w momencie zwarcia go przyciskiem do masy, bez zastosowania rezystora zmniejszającego prąd (rys. 3.1), to zobaczmy jakie zakłócenia generowane są przez to zjawisko na sąsiednich ścieżkach urządzenia.
Eksperyment wykonany został przez janbernat dla ścieżki A znajdującej się obok ścieżki B.
Obie ścieżki o długości ok. 60mm leżące obok siebie w znacznej (jak na aktualne metody wykonywania PCB) odległości, bo aż 2mm. Do ścieżki A podłączony był przycisk oraz kondensator zaledwie 100nF (rys. 3.1). W układzie nie użyto rezystora ograniczającego prąd rozładowania kondensatora.
Zakłócenie wygenerowane na
ścieżce B
Po prawej stronie pokazałem oscylogram powstającego zakłócenia na ścieżce B, generowanego na niej przez prąd rozładowania kondensatora (zwarcie) na ścieżce A, w momencie naciśnięcia przycisku. Wygenerowana szpilka zakłócenia ma ponad 0,6V.
W przypadku gdy ścieżka B jest sygnałem cyfrowym, istnieje szansa, że nie wpłynie to na działanie mikrokontrolera lub całego urządzenia - szansa, a nie pewność! Ale może być także przypadek, gdy zakłócenie jest wygenerowane na wejściu przerwania zewnętrznego ustawionego na zbocze narastające lub opadające. Wtedy powstająca szpilka może być "złapana" jako żądanie przerwania.
W przypadku gdy ścieżka B jest sygnałem analogowym (np. wejście przetwornika ADC), zakłócenie może mieć znaczący wpływ na wynik pomiarów.
Oczywiście gdyby ścieżki leżały znacznie bliżej siebie, były dłuższe, grubsze, szersze, itp., to zakłócenie byłoby znacznie większe, co mogłoby spowodować nieprawidłowe działanie także wejść cyfrowych.
Wielkość zakłócenia zależeć będzie także od tego jak duży kondensator zostanie zastosowany oraz czy będzie to "przeciętny" kondensator, czy o niskim ESR (tzw. Low ESR). Największe zakłócenie powstanie, gdy będzie to duży kondensator typu Low ESR, gdyż wtedy prąd rozładowania kondensatora osiągnie możliwie największą wartość,
Nie ma jednej twardej zasady, kiedy zakłócenie będzie powodować problemy, a kiedy nie, a wszystko zależy gdzie zakłócenie trafia i jak zaprojektowana jest reszta urządzenia. Ale po co ryzykować, skoro można zastosować się do punktu opisanego poniżej.
Jak temu zaradzić? Trzeba ograniczyć prąd rozładowania kondensatora, co można zrobić dołączając do przycisku szeregowo rezystor z przedziału 100Ω - 330Ω (rys. 3.2, rys. 3.3):
W momencie gdy przycisk zostanie naciśnięty, prąd rozładowania kondensatora będzie ograniczony i w efekcie będzie generował szpilki znacznie mniejsze lub wcale. Dla eksperymentu wykonanego przez
janbernat opisanego powyżej, zastosowanie rezystora R10 o wartości zaledwie 100Ω zredukowało zakłócenia prawie do zera. Jednakże Ty stosuj zalecenia Atmela, czyli 330Ω.
Rys. 3.2 AVRy
Dlatego drugim istotnym elementem jest dioda, która zabezpiecza dodatkowo wejście mikrokontrolera, zwierając "szpilkę" do zasilania Vcc. Niektóre mikrokontrolery posiadają diodę wbudowaną w wejście mikrokontrolera, co pozwala Ci na jej pominięcie (sprawdź w datasheet Twojego mikrokontrolera).
Także w nowszych dokumentach dot. Xmega od roku 2011 Atmel sugeruje użycie rezystora 100Ω w szereg z przyciskiem (rys. 3.3): XMEGA Schematic Checklist
Zalety:
eliminacja sprzętowa nie wymaga rozbudowy programu, przez co skracasz go i odciążasz mikrokontroler (nie tracisz mocy obliczeniowej),
zabezpieczony pin i mikrokontroler przed szpilkami powstającymi przy naciśnięciu przycisku,
Rys. 3.3 Xmega
Wady:
duża ilość dodatkowych elementów zewnętrznych,
zbyt duży kondensator nie pozwala stosować takiego rozwiązania do impulsatorów (enkoderów) stykowych lub kontaktronów czy przycisków, które są zwierane i rozwierane z dużą częstotliwością (czytaj: Impulsator vs drgania styków).
Rezystor R8
Dla porządku należy dodać jeszcze, że w przypadku pinu RESET w mikrokontrolerach firmy Atmel rodziny AVR (np. ATmega8), rezystor R8 powinien mieć wartość od 4,7k do 10k. W innych mikrokontrolerach mogą być inne wartości - sprawdź datasheet - więcej opisałem tutaj: Minimalne podłączanie pinów
We własnym zakresie możesz przeprowadzić prosty eksperyment:
Podsumowanie Eliminując drgania styków sprzętowo poprzez podłączenie kondensatora, powinieneś:
dodać rezystor R10 - najlepiej zawsze,
dodać diodę - jeżeli wejście mikrokontrolera nie zawiera takiej diody.
Oceń artykuł. Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły. Pozdrawiamy, Autorzy
Zasilanie mikrokontrolera to "temat rzeka". Wielu początkujących elektroników nie docenia tego tematu tracąc godziny, a nawet dni na dochodzeniu kiedy i dlaczego ich układy przestają pracować prawidłowo. Szukają błędów w programach, przerabiają je, a okazuje się, że wystarczy jeden kondensator 100nF i problemy znikają.
mikrokontrolery mogą działać nieprawidłowo przy złym filtrowaniu zasilania
powinny mieć dodatkowe filtry zasilania, nawet gdy pracują z baterii
posiadają wiele wejść zasilających (w szczególności te większe mikrokontrolery)
często mają rozdzielone zasilanie części cyfrowej od części analogowej mikrokontrolera.
różne mikrokontrolery (nawet tego samego producenta) mogą mieć różne potrzeby dot. filtrowania zasilania
stasiu2323 [Atmega8][c] - zawieszanie procesora
Dołożyłem kondensator 100nF w pobliżu pinu VCC procesora ... procesor przestał się zawieszać.
Rys. ATmega8 - Napięcia zasilania
Napięcie zasilania
Każdy mikrokontroler ma dokładnie określony poziom napięć zasilających, przy których producent gwarantuje jego poprawną pracę. Czasami mikrokontroler o tym samym typie może być produkowany w 2 wersjach, w które różnią się dopuszczalnymi napięciami zasilania.
Z reguły z napięciami zasilania związane są także maksymalne zakresy częstotliwości taktowania mikrokontrolera.
Najczęściej popełniane błędy nowicjuszy?
nie filtrują zasilania wcale lub tylko przy stabilizatorze napięcia
umieszczają filtry zasilania daleko od mikrokontrolera
nie podłączają wszystkich wejść zasilających "bo układ przecież działa"
nie podłączają zasilania części analogowej "bo przecież jej nie używam"
Dobre praktyki zasilania mikrokontrolerów
każdy pin zasilający Vcc(Vdd) powinien być zaopatrzony w kondensator 100nF do masy, umiejscowiony jak najbliżej mikrokontrolera,
stabilizator wraz z kondensatorami które znajdziesz w jego datasheet, powinien gwarantować stabilne zasilanie przy największym możliwym poborze mocy przez projektowany układ,
podłączaj zasilanie części analogowej nawet wtedy, gdy jej nie używasz.
sevotharte Programowy PWM - silnik DC
Problem odnaleziony. Zabrakło kondensatora przy AREF do masy. Teraz silnik śmiga, aż miło. Więc przestroga - dbajmy o filtrację zasilania, ja o niej zapomniałem :-)
Mikrokontroler i inne układy scalone
Rys. Kondensatory to podstawa!
Nie oszczędzaj na kondensatorach !
Czytaj datasheet oraz wytyczne producenta mikrokontrolera dot. jego zasilania:
niektóre mikrokontrolery wymagają wielu kondensatorów filtrujących (z reguły 100nF) - patrz rysunek po prawej oraz poniżej.
dodatkowo warto także przewidzieć jeden lub więcej kondensatorów magazynujących energię - z reguły 10µF.
Odległość kondensatorów od mikrokontrolera Kondensatory filtrujące powinny być umieszczone jak najbliżej nóżek zasilających.
Popatrzmy jakie zalecenia daje producent mikrokontrolerów STM firma STMicroelectronics w swojej nocie AN2586
Rys. Ogólna zasada dla rodziny STM32F10xxx
Rys. STM32F100xx
Czerwoną strzałką zaznaczyłem istotną informację: Nx100nF + 1x10µF. Co to oznacza?
N - to liczba par pinów zasilających. Tym zapisem producent mikrokontrolera zapisał zasady, które opisałem czerwonym kolorem wyżej, czyli po jednym kondensatorze 100nF na każdą parę pinów zasilających oraz jeden kondensator magazynujący na każdą grupę pinów zasilania.
Na rysunku po prawej przykład tej zasady dla mikrokontrolerów rodziny STM32F100xx. Kolory odpowiadają zasadzie pokazanej na rysunku powyżej.
RS
Jestem po pierwszych próbach z kondensatorkami 100 nF ... i jestem pozytywnie zaskoczony ich działaniem.
Aby sprawdzić w skrajnych warunkach to rozwiązanie podłączyłem trzy styczniki równolegle, zasilanie na triaki jak i na transformator zasilający elektronikę podpiąłem z jednej fazy i jestem pod wrażeniem.
A jak to jest dla mikrokontrolerów AVR firmy Atmel?
Tak samo - zasady są identyczne. Szczegółowe przykłady znajdziesz w linkach na końcu tego artykułu.
Certino
Poczyniłem następujące zmiany:
... przy atmedze 3 x 100nF ceramiki na każdą parę VCC-GND.
Układ przestał się restartować, zaczął działać stabilnie.
Pozostałe układy scalone
Podobne zasady filtrowania zasilania dotyczą wszystkich innych układów scalonych. Ich prawidłowa praca także zależy od prawidłowego zasilania, więc tak samo jak mikrokontroler są narażone na zakłócenia i tak samo jak on je generują.
UWAGA!!!
Zawsze podłączaj wszystkie piny zasilające mikrokontrolera.
Podobnie w większości innych układów scalonych.
Regulatory napięcia
Poniżej przykład stabilizatora zasilania w oparciu o rodzinę 78xx (gdzie xx to napięcie na wyjściu): L78xx Datasheet (PDF)
Rys. Schemat najpopularniejszej wersji stabilizatora rodziny 78xx
Kondensatory na rysunku to zwykle kondensatory ceramiczne.
Do wyżej pokazanych kondensatorów, powinieneś/możesz przewidzieć dodatkowo kondensatory elektrolityczne lub tantalowe, zarówno na wejściu jak i wyjściu. Ich wielkość jest niestety zależna od Twojego projektu, więc sam musisz je dobrać. Poniżej kilka zasad ich dobierania:
Kondensator na wejściu stabilizatora zwiększaj, gdy źródło napięcia:
jest podłączone długim przewodem
jest słabo wydajne, a Twój projekt pobiera znaczny prąd "skokami".
Kondensator na wyjściu stabilizatora zwiększaj, gdy Twój projekt:
jest podłączony długim przewodem do stabilizatora,
Twój projekt pobiera znaczny prąd "skokami",
pracujesz na granicy maksymalnego prądu stabilizatora.
Kondensatory te powinny się mieścić mniej więcej w przedziale 10µF do 470µF.
W bardzo specyficznych i działających na granicy parametrów stabilizatora przypadkach, zastosuj do 1000µF.
Jednakże wtedy lepszym rozwiązaniem jest zastosowanie mniejszego kondensatora typu Low ESR (mała impedancja).
Jeżeli nie masz kondensatora Low ESR, możesz użyć dwóch zwykłych połączonych równolegle, co spowoduje łączny spadek ESR, tak uzyskanego kondensatora.
Rys. Zamiast jednego dużego daj dwa mniejsze.
Dioda zabezpieczająca regulator napięcia
W przypadku niektórych regulatorów napięcia w sytuacji gdy na wyjściu regulatora podłączony jest duży kondensator magazynujący energię, producenci regulatorów zalecają stosowanie diody zabezpieczającej (D2 na schemacie poniżej).
Jej zadaniem jest rozładowanie kondensatora C1 na wyjściu regulatora, w przypadku zwarcia na jego wejściu. Chroni ona w ten sposób regulator napięcia przed uszkodzeniem, a producenci z tego powodu zalecają ją stosować z reguły od napięć dla regulatorów o napięciu wyjściowym większym od 7V. Nie ma więc potrzeby jest stosowania w przypadku regulatora 7805 (5V), ale...
... przypadku zasilania systemów cyfrowych, dioda ta powoduje także szybsze odcięcie zasilania mikrokontrolera, co w niektórych przypadkach może być istotne, ponieważ bardzo często mikrokontrolery mogą pracować na napięciach niższych niż pozostała część urządzenia, a co w czasie zanikania napięcia może powodować nieprawidłową pracę urządzenia.
Rys. Przykład prawidłowego stosowania regulatora napięcia
Na schemacie jest dodatkowo zamontowana dioda D1. Jej celem jest zabezpieczenie, przed odwrotnym podłączeniem do akumulatora. Warto ją zastosować w przypadku, gdy nie posiadasz złącz przewodu akumulatora, które uniemożliwiają nieprawidłowe podłączenie.
Odległość kondensatorów od stabilizatora Istotnym jest, by wszystkie omówione wyżej kondensatory filtrujące pracę stabilizatora, były umiejscowione jak najbliżej jego pinów.
UWAGA!! 79xx to nie to samo, co rodzina 78xx 79xx służą do stabilizacji napięć ujemnych np. -5V, -12V, itp
Obudowa może zmylić
Pomyłki się zdarzają nie tylko początkującym, choć zapewne im częściej:
PJimi Faktycznie - stabilizator był zamontowany odwrotnie.
Zanim podłączysz zasilanie dokładnie sprawdzaj podłączenie regulatora napięcia, by nie mieć takich niespodzianek i strat :-)
Ale to nie jedyne miejsce możliwych problemów. Drugim niebezpieczeństwem jest budowanie układów "na pamięć" stosując różne regulatory napięcia:
Rys. Przykład regulatorów napięcia 5V (od lewej 78L05, 7805, LM1117-5.0)
Jak widzisz przyjmowanie, że jest jeden standard wyprowadzeń dla wszystkich typów stabilizatorów napięcia, jest ryzykowny :-)
UWAGA! Zawsze sprawdzaj
pinologię (wyprowadzenia) w datasheet.
Lekceważyć czy nie?
Aaa, po co to wszystko, przecież układ mi działa ...
mayekk Układ prosty jak barszcz, jednak coś jest nie tak. Przemierzyłem, szukałem, poddaje się :/ ... Robiłem już podobne układy na innych uC do sterowania silnikami krokowymi pod +24V i nie było problemu.
... a jednak fizyki nie da się oszukać, tylko po co tracić czas i nerwy, podczas gdy wystarczy wydać niewiele groszy, które zapewnią Ci spokój i bezawaryjną pracę: Lekceważyć, czy nie?
Przykład totalnie złego schematu
Myślę, że nie ma co opisywać - jeżeli znajdziesz tam choć jeden kondensator daj mi znać :-)
Ja sprawdzałem lupą - nie ma żadnego.
Rys. "Kwiatek" znaleziony na forum, przysłuży się innym jako negatywny przykład :-)
Jest wiele możliwych przyczyn niepoprawnej pracy mikrokontrolerów. Nie opiszę tutaj wszystkich możliwych a jedynie parę najważniejszych (inne niż niepoprawny program):
źle filtrowane zasilanie
nieużywane piny (nóżki mikrokontrolera)
praca w zmiennym polu elektromagnetycznym (obok silnika, itp)
praca mikrokontrolera i silnika lub przekaźników na tym samym zasilaniu
wspólna masa z urządzeniem generującym duże zakłócenia
dotykanie układu lub nóżek palcami - ulubione zajęcie nowicjuszy :-)
cewki silników, przekaźników, itp.
Rys. Brudne zasilanie
1. Źle filtrowane zasilanie
Stabilne zasilanie to absolutna podstawa. Bez tego daj sobie spokój z mikrokontrolerami. Sam mikrokontroler potrafi pobierać prąd rzędu kilkudziesięciu mA, a do tego dochodzą jeszcze inne układy zewnętrzne, które do niego podłączasz.
MIKROKONTROLER TAKŻE JEST ŹRÓDŁEM
ZAKŁÓCEŃ DLA SAMEGO SIEBIE !
mayekk
Zasilanie nie ma elementów filtracyjnych wskazanych w datasheetach. Uznałem, że przy prądzie rzędu 60-80mA nie powinno się nic dziać, ale nie pomyślałem, że sam PWM może (i najpewniej będzie) generował zakłócenia...
... tak bywa, ale ważne, że wnioski wyciągnięte zostały poprawnie.
Tu sprawa jest bardzo prosta. Każdy niepodłączony i/lub niezaprogramowany pin jest antenką zbierającą zakłócenia.
Typowym objawem jest niekontrolowana reakcja mikrokontrolera na zbliżanie ręki lub innych przedmiotów do mikrokontrolera.
Jeżeli nie potrzebujesz jakiegoś pinu sprawdź w dokumentacji Twojego mikrokontrolera co powinieneś z nim zrobić. A jeżeli nie znajdziesz takiej informacji to możesz zrobić jedną z tych czynności:
zaprogramować pin jako wyjście i ustawić na nim 1 lub 0
zaprogramować pin jako wejście i włączyć wewnętrzny rezystor pull-up lub podłączyć zewnętrzny np. 1kΩ
Przykładem tego problemu niech będzie temat, w którym kol. Modecom601 nadział się na zakłócenia jeszcze przed włączeniem rezystora pull-up - czytaj tutaj.
NIGDY NIE ZOSTAWIAJ NIEPODŁĄCZONYCH PINÓW NIE ZAPROGRAMOWANYCH !
Rys. Zakłócenia elektromagnetyczne
3. Praca w zmiennym polu elektromagnetycznym
Czasami układy narażone są na pracę w takim środowisku, na przykład w pobliżu silnika elektrycznego, czy spalinowego (łuk elektryczny na świecach), anten nadawczych, itp. To bardzo trudne środowisko i trzeba się nieźle napracować by zadaniu sprostać.
Czasami takie zakłócenia przenoszą się przez wspólną masę, ale na to jest sposób - optoizolacja czyli transoptory - patrz pkt. 5.
Rys. Rozdzielanie zasilania
4. Praca mikrokontrolera i silnika lub przekaźników na tym samym zasilaniu
Dobrą praktyką jest rozdzielanie zasilania mikrokontrolera od silników czy przekaźników, ze względu na to, iż są one wrednymi generatorami zakłóceń. Najprostrzym sposobem jest zastosowanie osobnych stabilizatorów dla zasilania mikrokontrolera, i osobny dla silników czy przekaźników. Wtedy nadal zasilanie pochodzi ze wspólnego źródła, ale układy osobno stabilizują napięcia dla poszczególnych elementów projektu.
5. Wspólna masa z urządzeniem generującym duże zakłócenia
Czasami zakłócenia są tak silne, że przenoszą się nawet przez wspólną masę. Wtedy najprostrzym sposobem jest rozdzielenie galwaniczne (elektryczne) układu mikrokontrolera od układu generującego zakłócenia np. silnika. Jak to zrobić?
Wystarczy użyć optoizolacji czyli najprościej mówiąc przesyłać sygnał za pomocą światła a nie prądu :-) Rozdzielamy zasilania i nie łączymy mas razem.
Więcej o transoptorach napisałem tutaj: Transoptor
Przykład błędnego użycia transoptora:
Rys. ŹLE, bo zasilanie i masa nadal są wspólne
Rys. Nie dotykaj!
6. Dotykanie układu lub nóżek palcami
To ulubione zajęcie nowicjuszy, po którym często piszą:
"Ratunku! Gdy dotykam pin mikrokontrolera on głupieje!!!"
Mikrokontrolery zbudowane są w technologiach o baaardzo niskim poborze prądu przez co są podatne na wszelkie zakłócenia np. z ładunków elektrycznych na skórze człowieka, czy rezystancji i pojemności skóry. Dlatego dotykanie pinów, a nawet samej obudowy prawie zawsze będzie generować zakłócenia w pracy mikrokontrolera.
A jest na to prosta rada: NIE DOTYKAJ ! Bo i po co?
MIKROKONTROLER MOŻE ULEC USZKODZENIU PODCZAS DOTYKANIA GDYŻ ŁADUNEK ZGROMADZONY NA PRZEDMIOCIE (SKÓRA CZŁOWIEKA, ŚRUBOKRĘT, ITP) MOŻE MIEĆ KILKADZIESIĄT TYSIĘCY WOLTÓW !!!
Ale jeżeli chcesz to ryzykuj, jak to mówią górale o nauce jazdy na nartach:
"Jak sie nie wyrócis, to sie nie naucys".
7. Cewki silników, przekaźników, itp.
Cewki urządzeń indukcyjnych są generatorami tzw. szpilek (nagły wzrost napięcia na cewce), które powstają w momencie wyłączania cewki. Szpilki te mogą powodować nieprawidłową pracę i/lub uszkodzenia mikrokontrolerów, tranzystorów, itp.
Co z tym problemem zrobić?
Jest kilka rozwiązań, ale dla Ciebie najlepszym będzie dodatkowa dioda (lub diody) Schottky, w ostateczności zwykła prostownicza. Dioda powinna być podłączona jak najbliżej cewki.
Takie zabezpieczenie stosuje się także w przypadku silników DC. Więcej na ten temat możesz przeczytać tutaj:
Zapewne wiesz, że silnik DC, to silnik prądu stałego, którego kierunek obrotów zależy od tego, na które wejście podasz plus, a na które minus.
Sterowanie takim silnikiem jest proste, ale nie może on być podpięty bezpośrednio do mikrokontrolera, ponieważ prąd płynący przez silnik jest zbyt duży i uszkodzi mikrokontroler. Dlatego stosuje się tzw. mostek H (ang. H-bridge).
Mostek możesz zbudować z 4 tranzystorów, ale ja preferuję gotowe scalaki zawierające taki mostek, jak np.
Sam mostek działa według zasady pokazanej na poniższych animacjach.
Diody - do czego służą?
Silnik DC generuje zakłócenia w postaci tzw. szpilek które mogą mieć napięcie znacznie wyższe od Vcc. Dlatego do tranzystorów dołączane są diody Schottky w sposób pokazany na schemacie po prawej, a ich zadaniem jest eliminowanie powstających szpilek. Więcej na ten temat dowiesz się tutaj: Szpilki jak eliminować?
Nie wszystkie układy scalone zawierają w/w diody, dlatego powinieneś uważnie czytać ich dokumentację.
Co się stanie jeżeli nie zastosuję diod?
prawie pewna jest nieprawidłowa praca mikrokontrolera (losowe objawy),
w najgorszym przypadku możesz uszkodzić mikrokontroler i/lub mostek H.
Przekonało się o tym wiele osób, a w komentarzach poniżej napisał o także Dominik więc pozwolę sobie zacytować fragment:
Dominik
Dopóki nie podniosłem wypełnienia do momentu aż silnik się uruchomił wszystko git. Ale gdy przekroczyłem tą granicę mikrokontroler zaczął się restartować. Więc wbijam na blog, szukam i jest! Znalazłem gdzieś w odzysku diodę shottky, podłączam i ave :D Silnik śmiga jak ta lala :D
W urządzeniach z silnikami, przekaźnikami, itp. (elementy indukcyjne) warto dodać kondensator na pinie RESET. Ale może to spowodować problemy z zaprogramowaniem mikrokontrolera, więc razem z kondensatorem warto dodać jumper ze zworką, by móc go odłączyć na czas programowania. Więcej na ten temat: RESET vs kondensator
Kierunek obrotów
Mostek H pozwala na prostą klontrolę nad kierunkiem obrotów silnika DC.
Mostek H można wykonać na setki sposobów. Oto kilka wariantów:
Prędkość obrotowa
Prędkość obrotową można sterować za pomocą tzw. PWM, który obrazowo pisząc reguluje średnią ilość prądu, który przepływa przez silnik. Prąd ten reguluje się tzw. "Duty cycle" czyli wypełnieniem. To bardzo prosta technika, a odpowiednie peryferia są prawie w każdym mikrokontrolerze.
Mikrokontrolery są "wręcz stworzone" do odmierzania jednostek czasu. Dlatego w sieci można znaleźć wiele tego rodzaju projektów.
Ale jest jeden istotny problem - dokładność odmierzanego czasu.
Na problem ten wpływają:
mikrokontrolery mają wewnętrzne liczniki 8 lub 16 bitowe,
oscylatory są z reguły są wielokrotnością liczby 10 np. 2.000.000 Hz
oscylatory mają ograniczoną dokładność (od 0,0005% do kilku procent)
oscylatory z biegiem czasu oraz temperatury zmieniają swoją wartość
Dokładność oscylatorów
Istotnym elementem odmierzania czasu jest dokładność źródła sygnału zegarowego. Dokładność określana jest z pomocą jednostki zwanej PPM (ang. Parts Per Million). To ogólnie stosowana jednostka, nie tylko w elektronice, która określa ułamkową część parametru jakiego dotyczy. W przypadku oscylatorów stosuje się ją do określenie dokładności utrzymania częstotliwości oraz jej zmiany z powodu starzenia czy temperatury.
Wzór: Przykład przeliczenia ppm na procenty
Oscylatory RC
Prawie wszystkie mikrokontrolery zawierają w sobie wewnętrzne oscylatory RC lub umożliwiają podłączenie zewnętrznych. Ich dokładność jest dość niska i zbliżona do ±2% (czyli 20.000ppm). Oznacza, że w skrajnym przypadku pomiar jednej sekundy może się różnić (zarówno w dół jak i w górę) o:
Wzór: Maksymalna odchyłka pomiaru 1 sekundy
dla oscylatora RC o dokładności 2%
Niby niewiele, ale gdy popatrzysz na całą dobę to:
Wzór: Maksymalna odchyłka zegara na dobę dla oscylatora RC o dokładności 2%
A to jest nie do przyjęcia! Jak sobie z tym radzić?
stosując zewnętrzny rezonator kwarcowy
stosując zewnętrzny sygnał zegarowy (wysokiej jakości generator wzorcowy)
dokonać kalibracji
Rezonator kwarcowy
Z punktu widzenia elektronika rezonatory kwarcowe (zwane kwarcami) są tanim elementem dającym bardzo stabilny i dokładny sygnał zegarowy dla układów z mikrokontrolerami. Większość z nich jako podstawę ma liczbę 10.
Dokładność rezonatorów kwarcowych waha się od kilku do kilkudziesięciu PPM. Najpopularniejsze i najtańsze są z przedziału pomiędzy ±10-50ppm.
Większość wymaga dodatkowo zastosowania dwóch kondensatorów, których wartość podana jest przez producenta rezonatora.
Kwarce podlegają procesowi starzenia, który wynosi np. ±5 ppm/rok
Ten kwarc ma kolosalną zaletę. Jego podstawą jest liczba 2, a nie 10. Dlatego łatwo można wykorzystywać najprostsze ośmio i szesnastobitowe timery w mikrokontrolerach uzyskując dokładny okres trwania jednej sekundy. Oczywiście dokładność samego kwarcu jest nadal problemem, a dodatkowo nie produkuje się tych kwarców dokładniejszych niż 20ppm - technologia wymięka :-).
Rezonator kwarcowy - ważne zasady!
Rys. Przykład prowadzenia
ścieżek na PCB
Aby zapewnić odporność kwarcu na zakłócenia, powinieneś:
montować go najbliżej mikrokontrolera jak się da (2-5mm),
kondensatory jak najbliżej kwarcu,
otoczyć kwarc i kondensatory ścieżką masy jak na rysunku,
jeżeli ma metalową obudowę to podłącz ją do masy,
na pinach sąsiadujących z pinami kwarcu nie powinno być sygnałów szybkozmiennych.
Zewnętrzny sygnał zegarowy
Większość mikrokontrolerów pozwala na taktowanie mikrokontrolera zewnętrznym sygnałem zegarowym. Umożliwia to podłączenie do mikrokontrolera wzorcowego generatora wysokiej jakości, gdy projektowany układ wymaga aż takiej dokładności zegara. Jak ktoś ma możliwość może podłączyć nawet sygnał z zegara atomowego :-)
Dodatkowo umożliwia to wspólną synchronizację pracy różnych układów na jednym sygnale zegarowym.
Kalibracja
Trzeba użyć kalibracji czyli poprawki, która będzie sukcesywnie korygowała ten problem. Kalibrację dokonywać można na kilka sposobów:
programowo
sprzętowo
sprzętowo i programowo jednocześnie
Rozwiązań sprzętowych i programowych jest wiele i zależą od wybranego przez Ciebie mikrokontrolera, dlatego nie opisuję ich tutaj, a jedynie sygnalizuję problem.
Moduły RTCC i RTC
RTCC (ang. Real-Time Clock and Calendar) to moduł wewnętrzny lub zewnętrzny, który jest kompleksowym zestawem liczników zegara. Ułatwia budowę urządzeń, ale nie jest niezbędny, by poprawny zegar zrobić. Zaletą tych modułów jest to, że z reguły mają dodatkowe układy do kalibracji, które znacznie zwiększają dokładność budowanych z ich wykorzystaniem zegarów.
Niektóre mikrokontrolery mające w sobie moduł RTC lub RTCC mają osobne wejścia do podłączenia kwarcu zegarkowego 32.768 Hz. To kolosalna zaleta, ponieważ procesor może wtedy działać na zupełnie innym kwarcu, podczas gdy RTCC działa na kwarcu zegarkowym. Ba, możliwe jest nawet zatrzymanie czy uśpienie procesora, a RTCC działa dalej - ot takie czary :-)
Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).
Sponsorzy:
Blog wykorzystuje pliki cookie zgodnie z ustawieniami Twojej przeglądarki. Aby dowiedzieć się więcej o polityce dot. plików cookie i javascript, kliknij ten link:
Polityka dot. plików cookie i javascript
Zapamiętaj ten artykuł w moim prywatnym spisie treści.