Jak zwykle zaczynamy od ustalenia najważniejszych założeń jakie należy poczynić na początku każdego projektu.
Ponieważ projekt dopiero rusza (2013.08.12), to wszyscy czytelnicy mają wpływ na jego efekt końcowy. Dlatego zachęcam do pisania uwag i zadawania pytań w poszczególnych artykułach.
Konstrukcja mechaniczna
Założenia nasze nie będą dotyczyć części mechanicznej, której rozwiązanie pozostawiam Waszej inwencji.
Założenia nadrzędne
cel stricte edukacyjny,
minimalizowanie ilości elementów zewnętrznych,
minimalizowanie poboru energii,
minimalizowanie kosztów,
konstrukcja modułowa w celu łatwiejszej modyfikacji,
wykonanie części mechanicznej z elementów dostępnych "w szufladach" lub gotowych podwoziach lub z kupionych elementów jeśli ktoś woli :-)
Założenia dot. elektroniki
konstrukcja oparta o mikrokontroler ATmega8 (patrz wyjaśnienie w dalszej części artykułu),
projekty płytek PCB dla metody "żelazkowej",
... czekam na dalsze propozycje.
Założenia dot. programu
nie stosowanie funkcji opóźnień programowych i pętli oczekujących,
stosowanie programowych regulatorów prędkości robota oraz wykrywania i reagowania na przesuwającą się linię,
używanie wskaźników i struktur,
opracowanie bibliotek poszczególnych funkcjonalności,
... czekam na dalsze propozycje.
Funkcjonalności robota
podążanie za linią z możliwie największą prędkością,
odszukanie linii po wypadnięciu z trasy,
zapisywanie w czasie jazdy parametrów (prędkość, nastawy silników, stan czujników, itp) do pamięci, w celu ich późniejszej analizy,
określanie kierunku i prędkości obrotu kół,
dostosowywanie poziomu oświetlenia czujników linii do jakości podłoża,
zapamiętywanie trasy w celu dokonania szybszego drugiego przejazdu (w miarę wolnej pamięci lub jako osobny temat),
... czekam na dalsze propozycje.
Funkcjonalności analizy zebranych danych
Funkcjonalności te dotyczą narzędzi, które pomogą nam analizować pozyskane wyniki pomiarów w celu modyfikacji algorytmów zachowań robota. W tym zakresie należy opracować:
format zapisu danych do pamięci,
funkcjonalności bloga (niniejszej strony) w zakresie automatyzacji generowania tabel i wykresów na podstawie przesłanych danych.
Dodatkowe urządzenia pomiarowe
W celu testowania i maksymalizowania osiągów, w ramach niniejszego cyklu wykonamy w dalszej kolejności:
hamownię silników,
bramki pomiaru czasu przejazdu,
własny pilot podczerwieni RC-5 (o ile będzie takie zapotrzebowanie),
... czekam na dalsze propozycje.
Dlaczego ATmega8?
Uprzedzając ewentualne pytania wyjaśniam, że ATmega8 to świadomy i celowy wybór ze względu na to, iż ten mikrokontroler stosujemy w przypadku artykułów dla początkujących. Dlatego też naturalnym jest iż pierwszy robot, będzie oparty o ten właśnie mikrokontroler.
Drugim powodem i celem jest pokazanie, jak w przypadku ograniczonych możliwości sprzętowych (tego mikrokontrolera) kombinować w celu osiągnięcia założonych celów.
Kolejne roboty na XMega
Drugim robotem prezentowanym w tym cyklu artykułów będzie RoDonXM, czyli konstrukcja oparta o znacznie bardziej zaawansowany mikrokontroler, którym będzie jeden z rodziny XMega. W tym robocie położymy szczególnie nacisk na zwiększanie osiągów pokazując jednocześnie kierunki i możliwości modyfikacji.
Jeżeli cykl dot. robotów będzie się cieszył dużym zainteresowaniem, to zajmiemy się kolejnymi, nie tylko linefollower-ami.
Propozycje i pytania
Jeżeli masz propozycje lub uwagi dot. założeń to zapraszam do dyskusji w komentarzach do niniejszego artykułu.
Oceń artykuł. Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły. Pozdrawiamy, Autorzy
W poprzednim artykule określiliśmy ogólne założenia dot. robota RoDonM8, nadszedł więc czas na wstępne rozplanowanie dostępnych funkcjonalności mikrokontrolera do zadań stawianych przed robotem.
W każdym z poniższych punktów wyjaśniam każdą podejmowaną decyzję oraz wykazuję niezbędne piny i peryferia, które są potrzebne do realizacji danego zadania. Nieliczne przypadki pozostawiam, do rozstrzygnięcia w dalszej części projektowania robota.
Zaczniemy od:
Częstotliwość taktowania mikrokontrolera
Nasz robot będzie miał sporo zadań do realizacji, a większość z nich będzie niezwykle istotne dla poprawności działania i osiągów robota. Dlatego też powinniśmy na początek przyjąć, że mikrokontroler powinien pracować z możliwie największą częstotliwością zegara taktującego.
Jako, że w założeniach ustaliliśmy, że mikrokontrolerem tym będzie jeden z rodziny Atmega8, to zerkając do datasheet ustalamy, że graniczną częstotliwością taktowania jest 16MHz:
i jest ona osiągalna, ale tylko i wyłącznie przy zastosowaniu zewnętrznego zewnętrznego jego źródła, którym w naszym przypadku będzie rezonator kwarcowy. Kwarc do mikrokontrolera ATmega8 podłącza się do pinów XTAL1 i XTAL2:
Niezbędne peryferia:
piny XTAL1 oraz XTAL2
Wersja mikrokontrolera
W zakresie wersji mikrokontrolera ATmega8 mamy kilka elementów do rozpatrzenia:
Obudowa
Ze względu na fakt, iż wykorzystamy sporo (a może nawet wszystkie) piny mikrokontrolera Atmega8, należy przyglądnąć się jego różnym wersjom obudowy. Interesować nas będą tylko te, które łatwo można lutować:
Zauważ, że w przypadku ATmega8 w obudowie TQFP mamy więcej pinów niż w obudowie DIP. Konkretnie jest ich o cztery więcej i są nimi:
jeden pin Vcc,
jeden pin GND,
dwa piny przetwornika ADC (ADC6 i ADC7).
O ile dodatkowe piny zasilania nie mają dla nas żadnego znaczenia (choć oczywiście je podłączymy zgodnie z zasadami prawidłowego zasilania mikrokontrolerów), o tyle dwa dodatkowe kanały przetwornika ADC są dla nas bardzo pożyteczną cechą obudowy TQFP, która znacznie ułatwi nam realizację robota.
Dlatego też, do naszego robota wykorzystamy wersję w obudowie TQFP. Tych co obawiają się lutowania takiego układu pragnę pocieszyć, że jest to naprawdę prosta czynność, ponieważ raster (czyli odstępy między środkami sąsiednich nóżek) jest spory i wynosi 0,8mm co oznacza, że przy szerokości nóżki 0,3mm odstępy między krawędziami sąsiednich nóżek wynosi 0,5mm.
To jest bardzo przyjemny w lutowaniu raster, który spokojnie przylutujesz nawet lutownicą transformatorową, używając dużej ilości kalafonii. Także wykonanie płytki pod raster 0,8mm „metodą żelazkową” (powszechną wśród hobbystów) jest możliwe i nie powinno być z tym kłopotów.
Wersja mikrokontrolera
Mikrokontroler ATmega8 produkowany jest w 3 wersjach:
Atmega8,
Atmega8L,
Atmega8A.
Częstotliwość taktowania
Ponieważ ustaliliśmy, że mikrokontroler będzie pracował z najwyższą możliwą częstotliwością zegara taktującego, to zerkamy do datasheet szukając informacji pod kątem maksymalnych częstotliwości wybranych wersji, gdzie już na pierwszej stronie znajdujemy:
Atmega8 i Atmega8L:
Atmega8 i Atmega8L
Atmega8A:
Atmega8A
Jak widać wersja Atmega8L odpada ponieważ może pracować tylko z częstotliwością do 8MHz.
Pozostają nam więc do wyboru wersje ATmega8 i ATmega8A.
Napięcie zasilania
Zapewne zauważyłeś powyżej, że ATmega8 nie może pracować z napięciami niższymi niż 4,5V. Mogłeś także stwierdzić, że ATmega8A może pracować z częstotliwością od 0 do 16MHz, w pełnym zakresie napięć od 2,7 do 5,5V. Niestety tak nie jest, a pokazuje to wykres bezpiecznego obszaru pracy:
Atmega8A
na którym widać, że ATmega8A, by pracować z wymaganą przez nas częstotliwością 16MHz także wymaga co najmniej 4,5V.
Prąd w czasie pracy
Ponieważ nasz RoDonM8 będzie zasilany z akumulatorów lub baterii, stąd należy w miarę możliwości minimalizować pobór prądu, na wszystkich etapach jego projektowania. Dlatego też zerkamy do datasheet pozostałych na placu boju mikrokontrolerów w poszukiwaniu odpowiednich danych.
Dla Atmega8 znajdujemy:
Atmega8
i ustalamy, że Atmega8 podczas pracy z zegarem 16MHz przy zasilaniu 5V zużywać będzie około 20mA.
W przypadku Atmega8A:
Atmega8A
na wykresie ustalamy, że przy tej samej częstotliwości taktowania pobór prądu będzie w okolicach 11mA, czyli prawie o połowę mniejszy niż Atmega8. Stąd nasz wybór powinien paść na ATmega8A.
Podsumowanie
Najlepszą dla potrzeb RoDonM8 jest wersja Atmega8A w obudowie TQFP. W ostateczności możemy użyć wersji Atmega8, ale nie możemy użyć Atmega8L, gdyż nie pracuje z zegarem 16MHz.
Sterowanie silników
Do sterowania silników użyjemy scalonego sterownika silników lub wykonamy własny na tranzystorach MOSFET. Niezależnie od tego niezbędne będą nam dla każdego silnika:
kanał PWM do sterowania prędkością obrotów,
pin sterujący kierunkiem obrotów silnika.
Dobrze byłoby także wiedzieć jaki prąd pobiera każdy silnik, aby w pełni kontrolować jego parametry pracy oraz zabezpieczyć silniki przed uszkodzeniem. Potrzebne więc nam będzie na każdy silnik dodatkowo:
wejście przetwornika analogowo-cyfrowego.
W rezultacie otrzymamy następujący schemat blokowy:
Niezbędne peryferia:
timer z dwoma wyjściami PWM (w ATmega8 jest to Timer1),
dwa piny sygnałów PWM,
dwa piny sterujące kierunkiem obrotu silników,
dwa wejścia przetwornika ADC do pomiaru prądów silników.
Pomiary prędkość oraz kierunku obrotu kół
Wiedza o aktualnym kierunku i prędkości obrotu kół jest jednym z najistotniejszych elementów Linefollowera jak i innych robotów poruszających się za pomocą kół, co opisałem w osobnym artykule: Robotyka: Teoria - Prędkość obrotowa i kierunek obrotu kół
Wyjaśniłem tam, dlaczego musimy określać dla każdego koła faktyczne:
prędkość obrotów,
kierunek obrotów.
Wytłumaczyłem tam także dlaczego potrzebować będziemy, aż dwa czujniki na jedno koło, czyli w przypadku naszego RoDonM8 będą to łącznie cztery czujniki.
Z punktu widzenia programu, by dokładnie mierzyć prędkości obrotowe kół niezbędne jest dokładne wyznaczanie momentu, w którym czujnik wiodący trafia na np. czarne pole tarczy impulsatora. Aby ten moment uchwycić w miarę możliwości bez opóźnień, można wykorzystać przerwania zewnętrzne. W mikrokontrolerze ATmega8 mamy do dyspozycji piny INT0 oraz INT1 i wykorzystamy je podłączając do czujnika wiodącego enkdera.
W związku z tym nasz układ pomiaru prędkości i kierunku obrotu koła wyglądać będzie następująco:
Do pomiaru prędkości będzie nam potrzebny timer, który będzie zliczał czas upływający pomiędzy kolejnymi impulsami.
Reasumując, w ten sposób będziemy mogli zmierzyć aktualną prędkość obrotową oraz kierunek obrotu kół.
Niezbędne peryferia:
dwa piny przerwań zewnętrznych z możliwością ustawienia wybranego zbocza sygnału dla transoptorów wiodących (INT0 oraz INT1),
dwa piny dla transoptorów kierunku,
timer.
Czujniki linii
Jako czujniki linii wykorzystamy transoptory odbiciowe, które będą w stanie „widzieć” linię na tle pozostałej powierzchni, po której jedzie robot. Wybór konkretnych transoptorów zostawiamy na później, teraz ustalamy jedynie sposób realizacji tej funkcjonalności robota i wymagane piny.
Ponieważ sygnał z transoptorów jest sygnałem analogowym należy wybrać pomiędzy dwoma rozwiązaniami podłączenia ich do mikrokontrolera:
transoptory podłączone do zewnętrznych komparatorów,
transoptory podłączone do wejść analogowych przetwornika ADC mikrokontrolera.
Ponieważ jednym z nadrzędnych założeń RoDonM8 jest minimalizacja kosztów oraz wagi, a także samo-kalibracja, stąd ustalamy, że wykorzystamy sposób drugi, czyli przetwornik ADC.
Zgodnie z założeniami RoDonM8 wykorzystujemy mikrokontroler ATmega8A, który ma zaledwie maksymalnie 8 kanałów ADC. Ponieważ powyżej ustaliliśmy, że dwa kanały musimy wykorzystać do pomiaru prądu silników, stąd dla potrzeb czujników pozostanie nam maksymalnie 6 kanałów. To trochę mało o czym pisałem w temacie dot. listwy czujników.
Dodatkowo na tym etapie nie wiemy jeszcze ile w ogóle pinów nam zostanie. Dlatego decyzję w zakresie ilości czujników linii podejmiemy później, po ustaleniu niezbędnych pinów dla pozostałych funkcjonalności robota, co determinuje ilość pinów ADC, które pozostaną do naszej dyspozycji.Jeżeli pozostanie nam mało wejść ADC powinniśmy się zastanowić, jak powiększyć ich ilość.
Niezbędne peryferia:
piny ADC w ilości uzgodnionej w późniejszym czasie,
pin AREF z kondenstarorem,
pin AVcc z filtracją dobrą zasilania.
Pilot RC-5
Każdy robot powinien mieć możliwość reagowania na wydawane przez właściciela komendy. Mam tutaj na myśli przygotowanie robota do wykonania zadania poprzez wybór jakiejś opcji algorytmu, czy innych nastaw, które przed wyruszeniem na trasę należy ustawić.
Poza tym przy bardzo szybkim robocie istotnym jest posiadanie możliwości jego zdalnego zatrzymania na końcu trasy lub gdy z niej wypadnie poza planszę.
Timer możemy współdzielić z którąś z innych funkcjonalności robota, ponieważ komendy będą wydawane tylko w czasie jego postoju lub chęci zatrzymania.
W przypadku pinu przerwania nie mamy już takiego komfortu. Problem polega na tym, że mikrokontroler ATmega8 ma tylko dwa piny przerwań zewnętrznych, którymi są INT0 oraz INT1, a te już zarezerwowaliśmy dla określania prędkości i kierunku obrotu kół. Rodzina Atmega8 nie ma także możliwości generowania przerwań ze zmiany stanu innych pinów cyfrowych (ang. pin change interrupt).
Musimy więc poszukać innej możliwości, a jest nią wykorzystanie wbudowanego komparatora analogowego, którego nie będziemy wykorzystywać do innych celów:
W ten sposób będziemy mogli skutecznie wyłapywać zbocza sygnału RC-5 i odbierać komendy z pilota podczerwieni.
Niezbędne peryferia:
dwa piny komparatora,
komparator z przerwaniem,
timer (może być współdzielony z inną funkcjonalnością).
Zapamiętywanie parametrów jazdy
Jednym z naszych założeń, jest zapamiętywanie parametrów w czasie pracy robota. Rodzaj danych ustalimy w późniejszym czasie, ale na pewno będą to co najmniej:
prędkość obrotowa kół,
kierunek obrotu kół,
nastawione prędkości kół,
stan czujników,
podejmowane decyzje,
itp.
W tym celu niezbędna jest dodatkowa pamięć ponieważ w Atmega8, który jest podstawą RoDonM8, nie mamy wystarczających zasobów pamięci SRAM, ani EEPROM. Możemy rozpatrzyć więc dwie możliwości:
karta pamięci SD,
zewnętrzna pamięć EEPROM lub SRAM o sporej pojemności.
Karta pamięci SD
Karta pamięci SD (w szczególności microSD) jest fajnym rozwiązaniem ze względu na:
olbrzymią pojemność i swobodę ustalenia formatu danych (dane w formie binarnej lub tekstowej),
poręczność w zakresie wyciągnięcia z robota i odczytu w komputerze, co zaoszczędziło by nam piny do komunikacji z komputerem w celu odczytu danych.
Jednakże w naszym przypadku zastosowanie karty SD znacznie zmniejszy poziom dostępnej pamięci programu i z tego powodu rozwiązanie to jest dla nas niemożliwe do zaakceptowania. Dodatkowo karta SD pobiera znaczne ilości prądu, a chcemy minimalizować ten parametr, ze względu na źródło zasilania (akumulator, bateria) i jego ciężar.
Pozostaje nam więc zastosowanie zewnętrznej pamięci EEPROM lub SRAM.
Który interfejs do komunikacji?
Zanim wybierzemy rodzaj pamięci powinniśmy ustalić, który interfejs dostępny w ATmega8 wykorzystamy do komunikacji z pamięcią. Mamy do wyboru:
Aby wykorzystać interfejs TWI musielibyśmy poświęcić dwa piny portu C, na których zlokalizowane są także wejścia przetwornika ADC. Ponieważ podjęliśmy decyzję, że czujniki będziemy odczytywać, za pomocą ADC, nie możemy więc poświęcać jego pinów na inne funkcjonalności. Z tego powodu interfejs TWI odpada.
Nie mamy więc wyboru i musimy zastosować interfejs SPI.
Mamy z tego tytułu dodatkowe zyski:
wykorzystamy te same piny co złącze programowania (MOSI, MISO i SCK),
znacznie szybsze przesyłanie danych z częstotliwością linii SCK nawet 8MHz przy kwarcu 16MHz. Dla porównania interfejs TWI pozwalałby na maksymalnie 0,4MHz.
Ale będą tekże straty:
pamięć z interfejsem SPI wymaga dodatkowego pinu sterującego CS.
Zysk dot. współdzielenia pinów jest oczywisty i bardzo pożądany, o tyle dodatkowy pin sterujący pamięcią może być dla nas problemem, którego ewentualne rozwiązanie zostawimy sobie na później.
Pamięć EEPROM
Pamięci EEPROM mają tę zaletę, że po odłączeniu zasilania zapisane dane nie są tracone. Mają jednak istotną dla nas wadę, którą jest długi czas zapisu danych. Popatrzmy na popularną pamięć serii 24Cxx, a konkretnie na AT24C32 i AT24C64:
Pięć milisekund to sporo czasu. Wprawdzie pamięć ta zorganizowana jest w 32-bajtowe strony, co pozwala zwiększyć szybkość zapisu bloku danych, to nadal zapis takiego bloku trwa 5ms.
Czy taki czas zapisu nie jest dla nas zbyt długi?
Policzmy:
Ilość 200-tu pomiarów po 32 bajty, to sporo informacji i być może wystarczy do naszych celów:
Pamięć SRAM
Jednakże znając nasz apetyt na analizę zebranych danych, wielkość transferu na poziomie 6,25kB/s (kBps) to porcja informacji, która może być zbyt mała, jeżeli będziemy chcieli zapisywać także dane o trasie lub inne parametry.
W takim przypadku warto przyglądnąć się pamięciom SRAM, które zapisują dane bez dodatkowego zauważalnego czasu zapisu, czyli natychmiast po otrzymaniu danych (ang. Zero Write Time).
Wprawdzie nie są one odporne na zanik zasilania, ale dla nas nie jest to problemem, ponieważ po zatrzymaniu robot przejdzie do stanu czuwania, czyli będzie podtrzymywał stan pamięci, aż do odłączenia akumulatora. Aby zabezpieczyć się przed zapominalskim, czy podekscytowanym twórcą, możemy przypominać o konieczności odczytu danych, na przykład za pomocą świecącej, czy migającej diody.
Wielkość pamięci
Pamięci SRAM nie są drogie, ale też i nie są tanie. Dlatego poświęcę, chwilkę na ten temat.
Ponieważ na ten moment, nie jak duże będzie zapotrzebowanie na pamięć, to rozważmy wyżej obliczony transfer oraz maksymalny czas jazdy robota, który przyjmiemy na poziomie 15 sekund:
Pamięć jaka potrzebna byłaby do takiego pakietu danych, to pamięć 128kB na przykład 23LCV1024, która kosztuje około 11-12zł (cena 2013r.).
Nie jest to mało zważywszy cenę mikrokontrolera ATmega8 na poziomie około 5zł. Jednakże uważam, że posiadanie tak dużej pamięci jest zasadne i da nam możliwość gromadzenia sporej ilości danych do późniejszej analizy, w celu "śrubowania" osiągów robota do granic jego możliwości.
Można oczywiście będzie wstawić inną tańszą pamięć o mniejszej pojemności, ponieważ biblioteki, które utworzymy będą przygotowane do takiej zamiany. Można także w ogóle zrezygnować z tego modułu i zaoszczędzić trochę pieniędzy, kosztem braku danych do analizy.
Napięcie zasilania
Przy wyborze pamięci należy w szczególności zwrócić uwagę, na dopuszczalne napięcia jej pracy.
Tutaj możesz spotkać wiele różnych zakresów. W naszym przypadku ustaliliśmy już, że napięciem zasilającym elektronikę robota, będzie 5V. Dlatego też warto wybrać taką pamięć, która będzie mogła pracować z tym napięciem, by nie trzeba było stosować dodatkowych układów dostosowujących poziomy sygnałów sterujących oraz dodatkowego problemu związanego z zasilaniem takiej pamięci.
Podsumowując
Wykorzystując pamięć SRAM wraz z interfejsem SPI, będziemy mieli bardzo wydajny moduł zapisu danych w trakcie pracy robota. Od nas będzie tylko zależało, w jaki sposób wykorzystamy ten moduł.
Niezbędne peryferia:
współdzielenie pinów MOSI, MISO i SCK,
dodatkowy pin do obsługi pinu CS pamięci,
interfejs SPI.
Komunikacja z komputerem
Aby odczytać zgromadzone w pamięci SRAM dane z jazdy robota, musimy dysponować interfejsem do komunikacji z komputerem. Warto byłoby także mieć możliwość wysłania do mikrokontrolera jakiś danych, np. jakiejś obszerniejszej tablicy danych konfigurujących robota.
Tanią możliwością jest wykorzystanie interfejsu RS-232, do którego dostęp powinien mieć każdy, kto zajmuje się mikrokontrolerami (np. za pomocą konwertera RS232-USB). Interfejs ten wykorzystuje piny RxD oraz TxD, a komunikację oprzemy oczywiście o przerwania na bazie artykułu: RS-232: Komunikacja ATmega8 z komputerem
Niezbędne peryferia:
piny TxD oraz RxD,
interfejs USART.
Oceń artykuł. Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły. Pozdrawiamy, Autorzy
Aby ułatwić budowę robota w oparciu o posiadane przez czytelników zasoby silników, gotowych podwozi i własnych pomysłów co do konstrukcji mechanicznej robota, postanowiłem podzielić elektronikę na poszczególne moduły w taki sposób, żeby niezależnie od posiadanych części, efekt końcowy, był jednakowy – działający robot.
Moduł ten może być wykorzystany także w płytce stykowej oraz dzielony na fragmenty.
Jeżeli będziesz miał jakiekolwiek wątpliwości lub problemy zadawaj pytania w komentarzu do niniejszego artykułu.
RoDonM8-MB (Main Board)
Serię dot. płytek robota RoDon rozpoczniemy od mózgu, czyli płytki z mikrokontrolerem ATmega8A, którą oznaczać będziemy RoDonM8-MB (MB, to skrót od ang. Main Board):
punkty lutownicze do przewodów lub wlutowania goldpinów, czy też ich gniazd (wariant wybierasz sam),
a płytka PCB ma być prosta w wykonaniu metodą żelazkową i łatwa w lutowaniu. Dlatego też na PCB użyłem elementów o rozmiarach 1206 i większych.
Dodatkowym założeniem, które postanowiłem zrobić jest możliwość wydzielenia z modułu głównego mniejszych jego wersji.
Schemat modułu RoDonM8-MB przedstawia się następująco:
a dwustronna płytka PCB tak:
Poniżej omówię każdy fragment schematu wyjaśniając zastosowanie poszczególnych elementów oraz istotne sprawy dot. płytki PCB.
W projekcie wykorzystałem własne biblioteki elementów oraz standardowe Eagle i SparkFun.
Pliki do pobrania
Na końcu artykułu znajdziesz do pobrania:
pliki schematu i płytki PCB wykonane w programie Eagle,
bibliotekę Eagle użytych elementów,
gotowe do wydruku PCB w formacie PDF.
CON - Złącza oraz podział modułu
Zaczniemy nietypowo od omówienia złącz dlatego, że w kolejnych fragmentach schematu będę się do nich odwoływał.
Moduł RoDonM8-MB jest zaprojektowany w taki sposób, by na jednej płytce zebrać elementy i funkcjonalności robota, które będą nam potrzebne niezależnie od indywidualnego rozwiązania przez Was części mechanicznej, sterowników silników, listwy czujników i ewentualnie innych elementów robota.
Moduł ten ma zostać wpięty w płytę podwozia robota (przygotowaną indywidualnie) lub połączony z nią wlutowanymi przewodami. Dlatego też na złącza wyprowadzone są tylko te piny, które będą wykorzystane do obsługi pozostałych elementów robota.
Złącza są podwojone oraz dodanych jest sporo pinów z masą GND. Ułatwi to podłączenie robota w czasie testów lub gdy moduł ten chcesz wykorzystać do innych celów.
Płytka PCB jest zaprojektowana w taki sposób, że wszystkie złącza powinny być lutowane od strony top. Wyjątki to punkt JP-VCC oraz odbiornik podczerwieni - szczegóły w dalszej części artykułu.
Możliwość podziału modułu
Moduł został tak przygotowany, by istniała możliwość wykrojenia z niego mniejszych modułów w zależności od potrzeb. Możesz go więc przyciąć wzdłuż dowolnej z żółtych linii (dwóch poziomych i jednej pionowej):
Jest co najmniej osiem sensownych możliwości zmniejszenia modułu, które na tle płytki stykowej o 830 polach wyglądają następująco:
W przypadku odcięcia części z regulatorem LDO należy zasilić moduł za pomocą punktu JP-VCC oraz wlutować zworkę WIRE1, o czym piszę poniżej.
Punkt lutowniczy JP-VCC
Punkt JP-VCC jest punktem połączonym z główną szyną zasilania modułu i ma dwa zastosowania:
pozwala on korzystać z regulatora LDO (U1) do zasilania elementów znajdujących się poza modułem,
pozwala zasilać moduł bezpośrednio z zewnętrznego źródła zasilania w przypadku odcięcia lub nie wlutowania regulatora LDO. W takim przypadku uważaj, by nie przekroczyć napięć pracy mikrokontrolera i innych elementów modułu!
UWAGA!!!
Zanim skorzystasz z punktu JP-VCC, dokładnie przeczytaj poniższy tekst, a w razie braku pewności zapytaj za pomocą komentarza.
Lutowanie punktu JP-VCC
Korzystając z punktu JP-VCC w przeciwieństwie do pozostałych musi on być lutowany od strony bottom. Odwrotne wykonanie nie pozwoli na wykorzystanie tego punktu ponieważ od strony top, punkt ten nie jest podłączony do głównej szyny zasilania (VCC) modułu.
Punkt JP-VCC z wlutowanym goldpinem
Punkt JP-VCC będziemy wykorzystywać w robocie do zasilania części logicznej mostków-H i innych elementów tego wymagających.
Przy wkładaniu modułu do płytki stykowej (wyjątek) punkt JP-VCC jest w jednej kolumnie z pinem PD4, który znajduje się w JP1 i JP2. Aby zabezpieczyć się przed sytuacją, w której wkładając moduł do płytki stykowej nastąpiłoby zwarcie JP-VCC z pinem PD4, punkt JP-VCC został przesunięty w pionie o połowę rastra płytki (odstępu pomiędzy otworami). W ten sposób, nie włożysz modułu do płytki stykowej, a jeżeli to zrobisz używając siły wygniesz goldpin JP-VCC.
Punkt JP-VCC + moduł bez LDO + płytka stykowa
W takiej sytuacji do punktu JP-VCC nie lutuj goldpinu, a za miast niego powinieneś od strony top włożyć przewód zasilania i przylutować go do strony bottom. Napięcie zasilające moduł z zewnątrz przez pin JP-VCC powinno wynosić 5V, ale oczywiście może być niższe, jeżeli wykorzystujesz moduł do innych celów niż nasz robot.
WIRE1 - Gdy odciąłeś część z LDO oraz IR
Jeżeli przyciąłeś płytkę wzdłuż pionowej linii masa cyfrowa GND na stronie bottom została rozdzielona. Jest wprawdzie nadal połączona za pomocą przelotek i masy GND na warstwie top jednakże w celu poprawienia rozpływu prądów należy wlutować zworkę WIRE1:
Ze względu na szerokość ścieżki przebiegającej pod zworką (główna szyna zasilania) zworka WIRE1 ma nietypowy rozmiar, który uniemożliwia zastosowanie rezystora 0R. Dlatego zworkę tę należy wykonać z izolowanego przewodu. Nie łącz dodatkowo masy analogowej AGND z masą GND. O masie analogowej piszę poniżej.
LDO – Zasilanie (regulator napięcia)
Zgodnie z decyzjami wstępnymi musimy zasilać część sterującą robotem z napięcia 4,5 - 5,5V. Wasze roboty będą zasilane ze źródeł o różnych napięciach i prądach dlatego, aby uniezależnić się od źródła zasilania (które wybierzesz) wyposażymy nasz moduł główny we własny regulator napięcia.
Idea jest więc taka (przykład z akumulatorem 7,4V):
W zależności od zastosowanego sterownika silników, może być potrzebne zasilania jego części logicznej, niższym napięciem niż to, które będzie sterowało silnikami, co pokazałem na powyższym rysunku. Także inne elementy robota znajdujące się poza modułem mogą wymagać napięcia 5V.
Spadek napięcia na regulatorze
Niestety w każdym regulatorze napięcia, napięcie na wyjściu regulatora jest mniejsze od napięcia na jego wejściu. Parametr który określa tę różnicę (spadek napięcia) nazywa się Dropout Voltage i może sięgać nawet kilku wolt, co dokładnie opisałem w artykule: LDO - Regulatory napięcia "z bonusem"
Zgodnie z decyzjami wstępnymi dolnym progiem napięcia, które musimy zapewnić mikrokontrolerowi jest 4,5V. Z drugiej strony mamy akumulator, którego napięcie może być niewiele większe od np. 5V, a w trakcie pracy będzie się rozładowywał, co oznacza zmniejszenie się napięcia na wejściu regulatora.
Dobrze byłoby, aby nasz regulator napięcia miał jak najmniejsz parametr dropout voltage, a przyzwoitym i wystarczającym byłby przedział 0,2-0,5V.
Dlatego zastosujemy jakiś regulator LDO, a nie zwykły liniowy jak np. 7805, co wyjdzie na dobre także z powodu zmniejszenia strat energii akumulatora.
Wymagany prąd
Drugim istotnym parametrem jest w naszym przypadku prąd jaki będziemy pobierać z regulatora:
Powinniśmy wstępnie policzyć sumaryczną wartość prądu wszystkich elementów zasilanych z regulatora LDO.
Powinniśmy dodać jeszcze mały zapas, by nie pracować na granicy wytrzymałości regulatora napięcia. Dobrą zasadą jest dodanie 20% stąd powinniśmy szukać regulatora LDO o prądzie wyjściowym od 500mA wzwyż.
Ponieważ dążymy do minimalizacji płytki głównej (CPU) robota, stąd powinniśmy wybrać taki regulator, który będzie:
miał małą obudowę,
był tani zgodnie z założeniami.
W przypadku regulatorów o prądzie wyjściowym do 1A, fają obudową jest obudowa DPAK:
ale z tym jest związany problem odprowadzania ciepła, który opisałem dokładnie w artykule Regulatory napięcia vs wydzielane ciepło, czyli: Grzeje się! , w którym znajdziesz także sposób policzenia spodziewanej temperatury przy danym prądzie wyjściowym.
Ponieważ DPAK jest małą obudową bez możliwości dokręcenia radiatora powinniśmy zadbać o to, aby w miarę możliwości odprowadzić z niego jak najwięcej ciepła poprzez warstwę miedzi na płytce PCB. Dlatego też po obu stronach płytki w rejonie regulatora LDO zostawiłem spore ilości miedzi:
Na stronie top także taka technika jest zastosowana, choć nie dotyka bezpośrednio regulatora i teoretycznie przeszkadza odprowadzanemu ciepłu z laminatu. Jednakże jeżeli popatrzysz na stronę top w tym rejonie, to zauważysz, że jest tam duży kondensator elektrolityczny oraz złącza (oba mają plastikowe podstawy), które przysłaniają laminat, przez co zwiększają rezystancję termiczną PCB, co w konsekwencji pogarsza odprowadzanie ciepła z laminatu:
Miedź na stronie top, ciepło regulatora przekazane przez laminat na tę stronę wyciąga spod elementów warstwy top, przyczyniając się do zmniejszenia rezystancji termicznej tego fragmentu PCB po stronie top. Faktyczny zysk lub strata z powodu zastosowania radiatora w postaci warstwy miedzi na stronie top, jest trudny do oszacowania i wymagałby dokonania pomiarów.
W ten sposób zyskujemy radiator na obu warstwach PCB w rejonie regulatora LDO odprowadzający ciepło kosztem nieco trudniejszego lutowania regulatora LDO, ponieważ w czasie lutowania radiator odprowadzi nam ciepło :-)
Dlatego też standardowy footprint (rozmieszczenie miedzi pod elementem) jest "wykrojony" z miedzi wzdłuż krawędzi regulatora, co widać na animacji strony bottom w fazie "PRZED" i zawiera tylko wąskie ścieżki łączące z masą. Taki footprint utrudnia odprowadzanie ciepła, przez co ułatwia lutowanie.
LF50C - mój wybór
Na podstawie w/w założeń i ustalonych parametrów:
UO = 5V,
IO >= 500mA,
Dropout Voltage < 0,5V,
odbudowa DPAK,
w pierwszym z brzegu sklepie elektronicznym wybrałem za pomocą wyszukiwarki najtańszy regulator, którym okazał się LF50C.
oraz schemat testowy (dla którego podane są parametry w tabelach parametrów poszczególnych regulatorów):
Aby było łatwiej oznaczyłem kondensatory na czerwono, w taki sposób jak na schemacie modułu.
Na powyższym tekstowym fragmencie dokumentacji znajduje się informacja, że minimalną pojemnością kondensatora na wyjściu regulatora (C8) jest 2,2µF, dzięki czemu można redukować koszty i wielkość projektowanych urządzeń.
Skoro kondensator C8 może mieć zaledwie 2,2µF, a dodatkowo na płytce modułu mamy w dwóch skrajnych regionach płytki PCB kondensatory C5 i C10, nie ma więc potrzeby zwiększania wartości tego kondensatora:
Co więcej, ponieważ na PCB kondensator C8 będzie blisko kondensatora C10 o wartości 10µF, to powstaje pytanie, czy kondensator C8 jest w ogólepotrzebny?
Na to pytanie nie ma jednoznacznej odpowiedzi, ponieważ wszystko zależy od obciążenia, czyli charakterystyki pobieranego z LDO prądu. Kondensator C8 uwzględniony jest na schemacie, a na płytce PCB został umieszczony jak najbliżej wyjścia regulatora napięcia, czyli zgodnie z dobrymi praktykami.
Możesz, lecz nie musisz go wlutowywać. Gdy będziesz pobierał spore ilości prądu z LDO w sposób nieregularny (impulsowy), wtedy może się okazać, że ten kondensator dobrze wpłynie na stabilizowanie napięcia na wyjściu regulatora LDO.
Jeżeli będziesz stosował inny regulator niż LF50C, możesz zastosować inne wartości kondensatorów zgodne z datasheet Twojego regulatora.
Rozmieszczenie kondensatorów C8 i C10 na płytce PCB nie jest przypadkowe. W momencie, gdy odetniesz część płytki PCB na której jest regulator LDO oraz odbiornik IR, kondensator C8 zostanie odcięty.
W związku z tym nasz układ regulatora napięcia wyglądać będzie następująco:
Zauważ, że na wejściu regulatora dodałem kondensator elektrolityczny C2 o wartości 100µF. Kondensator ten ma na celu redukować tętnienia napięcia podawanego z akumulatora na wejście regulatora LDO. W przypadku robotów, w których silniki pobierające prąd impulsowo (sygnał PWM oraz częste włączanie i wyłączanie lub zmiana kierunku obrotów), stan napięcia na akumulatorze daleki jest od stabilnego.
Dlatego też, aby ułatwić regulatorowi stabilizowanie napięcia na jego wyjściu, dodałem w/w kondensator. W przypadku Twojego robota i sposobu jego zasilania (długość i przekrój przewodów, typ i jakość akumulatora) mogą wymagać innych wartości kondensatora C2. W takim przypadku należy dobrać go eksperymentalnie lub zostawić taki jak na schemacie.
Możesz także w zależności od potrzeb, dodać zewnętrzne kondensatory na płycie głównej Twojego robota. Ale nie przesadzaj, tylko przeczytaj:
Typy i napięcia kondensatorów filtrujących zasilanie
Pozostaje ustalić jakie typy i napięcia kondensatorów powinniśmy zastosować:
C2 - elektrolityczny o napięciu 25-35V (2x wartość maksymalna napięcia wejściowego LDO),
C3 - ceramiczny (50V),
C8 - według dokumentacji LDO powinien być elektrolityczny (patrz schemat testowy), ale my zastosujemy tantalowy, ze względu na mniejszą objętość obudowy tym bardziej, że jest on umieszczony na stronie bottom, a duży elektrolityczny przeszkadzałby, gdybyś chciał wpiąć moduł do płytki stykowej. Napięcie 10V (2x wartość maksymalna napięcia wyjściowego LDO).
CPU - Mikrokontroler
Zgodnie z podjętymi decyzjami wstępnymi sercem RoDonM8 jest mikrokontroler Atmega8A:
Nasz robot będzie używał przetwornika ADC stąd ułatwiamy mu dokonywanie dobrej jakości pomiarów poprzez prawidłowe prawidłowe zasilanie mikrokontrolera zgodne z podstawami oraz zasadami dot. pomiarów ADC. Dlatego też możesz na schemacie znalazły się:
kondensatory C10 i C12 filtrujące zasilanie pinów Vcc,
rozdzielenie mas cyfrowej (GND) od analogowej (AGND).
Piny AVcc, RESET i XTAL omówię w dalszej części artykułu.
Pozostałe piny mikrokontrolera w większości oznaczyłem etykietami nazw funkcji mikrokontrolera, do których będziemy je wykorzystywać (np. INT0, ICP, OC1A, MOSI, itd.). Piny bez konkretnych funkcji w naszym robocie oznaczyłem podstawową nazwą pinu (np. PD0).
Wszystkie piny po prawej stronie wyprowadzone są na złącza. Dodatkowo na złącze wyprowadzony jest także pin RESET.
AVcc – Masa analogowa i pin AVcc
W części schematu oznaczonej AVcc, znajdują się niezbędne elementy do zwiększenia dokładności pomiarów wykonanych przetwornikiem ADC.
Jak już wspomniałem w niniejszym artykule, zależy nam na tym, by prostymi środkami zadbać o to, by przetwornik ADC wykonywał stabilne pomiary przy dużej prędkości jego działania na czym będzie nam strasznie zależało! Innymi słowy, by jak najmniej zakłóceń trafiało do części analogowej mikrokontrolera.
W artykule zwracam także uwagę na rozdzielanie mas części analogowej od części cyfrowej, by zakłócenia z tej drugiej nie przenosiły się na tę pierwszą w trakcie pomiarów dokonywanych przetwornikiem ADC.
Dlatego w naszym module RoDonM8-MB, także rozdzielamy masy co na schemacie w tej części jest pokazane za pomocą symboli GND (masa cyfrowa - ogólna) i AGND (masa analogowa). Aby układ elektroniczny mógł działać prawidłowo, masy cyfrowa i analogowa muszą być połączone, ale tylko w jednym z wybranych punktów o czym także pisałem w powyższym artykule.
Na schemacie znajdziesz więc wszelkie elementy wymagane do stabilizacji pomiarów ADC na przyzwoitym poziomie oraz rozdzielenie mas:
masa analogowa na płytce RoDonM8-MB (na stronie bottomjasno niebieska) jest wydzielona i rozłożona pod ścieżkami kanałów ADC które znajdują się na warstwie top oraz pod odpowiednią częścią mikrokontrolera, a połączona tylko w jednym miejscu z masą cyfrową:
Na stronie top masa analogowa (jasnoczerwona) jest tylko w obszarze elementów filtrujących piny AVccAREF oraz pod mikrokontrolerem i przy pinach masy analogowej wyprowadzonej na złącza.
Jeżeli chcesz, by robot miał jak najlepsze osiągi i podejmował decyzje o najlepsze możliwe dane, zadbaj o to, bo ziarnko do ziarnka ... :-)
XTAL – Kwarc
W tej części schematu znajduje się rezonator kwarcowy (popularnie zwany kwarcem) oraz kondensatory niezbędne do jego prawidłowej pracy.
Jakie wartości powinny mieć kondensatory?
Odpowiedź na to pytanie znajdziesz w dokumentacji mikrokontrolera:
Zaznaczony jest właściwy wiersz, dla przypadku, gdy częstotliwość kwarc jest powyżej 1MHz, a w naszym przypadku zgodnie z decyzjami wstępnymi będzie to 16MHz.
RESET
W większości projektów urządzeń opartych o mikrokontrolery AVR Atmega zauważysz, że pin RESET jest tylko podciągnięty do zasilania Vcc za pomocą rezystora 4,7kΩ-10kΩ. Nasz układ resetu będzie bardziej skomplikowany:
Pin RESET mikrokontroleów AVR w tym naszej ATmega8A jest wykorzystywany w procesie programowania. Dlatego też ma inną niż pozostałe piny cyfrowe wewnętrzną strukturę. Dla nas istotne jest, że brakuje w nim jednej diody zabezpieczającej pin RESET. Diody tej nie może być ze względu na programowanie równoległego (szybkie), w którym wykorzystuje się napięcie programujące 12V, które podawane jest na pin RESET.
Gdyby dioda była wbudowana w ten pin, to podanie na pin RESET napięcia 12V, oznaczałoby, że przez diodę napięcie to trafiłoby do prawie całej struktury wewnętrznej mikorkontrolera (która może wytrzymać tylko 6V) i uszkodziło ją.
Powinieneś to zrobić także z jeszcze jednego powodu. Jadąc na zawody możesz stracić, czas, pieniądze, reputację … i co gorsza nawet nie wiedzieć dlaczego Twój robot zwariował w czasie jazdy.
Na schemacie modułu RoDonM8 nie ma przycisku RESET ponieważ nie znalazło się dla niego wystarczająco dużo miejsca. Ale za to pin RESET jest wyprowadzony na złącze i tam możesz podłączyć zewnętrzny przycisk, jeżeli będziesz miał taką potrzebę.
W takiej sytuacji z powodu tego, że na pinie reset jest kondensator, przycisk reset wyposaż w połączony z nim szeregowo rezystor np. 330Ω lub zbliżony zgodnie z wyżej wymienionym dokumentem producenta mikrokontrolera:
Na ten temat także jest mowa w artykule z powyższego linku oraz w nocie AVR042 Atmela link powyżej.
Kondensator pinu RESET
Kondensator ten filtruje ewentualne zakłócenia które mogą przedostać się na pin RESET w trakcie jazdy robota, co zabezpiecza nas dodatkowo (zgodnie z zaleceniami producenta) przed zresetowaniem się mikrokontrolera.
Ponieważ pin RESET jest wykorzystywany w trakcie programowania, producent zaleca usunięcie kondensatora na ten czas, ponieważ może uniemożliwić programowanie mikrokontrolera. Trudno jednak żebyśmy wylutowywali kondensator, a z drugiej strony na PCB nie ma miejsca na ewentualną zworkę.
Wybrniemy z tej sytuacji w ten sposób, że zmniejszymy wartość tego kondensatora do 10nF.
RC-5 – Odbiornik podczerwieni
Ponieważ robot nie będzie miał żadnego przycisku, jedynym sposobem „ręcznej” komunikacji z nim, będzie pilot działający w standardzie RC-5, który dokładnie omówiłem w cyklu artykułów: RC-5 - Podczerwień - Transmisja danych
Niektóre z odbiorników podczerwieni, mogą wymagać zewnętrznego rezystora pull-up (R3) podciągającego do Vcc, dlatego uwzględniłem go na płytce PCB.
Pozostaje więc kwestia wyboru odbiornika. Dla przypomnienie standard RC-5 opiera się o falę nośną o częstotliwości 36kHz. Jednymi z najpopularniejszych odbiorników są TSOP z rodzin TSOP31, TSOP34 oraz TSOP48.
Istotnym dla nas jest to, by wybrany odbiornik, pracował na napięciu zasilania od 4,5V wzwyż, ponieważ na takim napięciu pracować będzie cały moduł RoDonM8.
Odbiorniki podczerwieni TSOP są produkowane w dwóch rodzajach obudowy:
Niestety różnią się one pod względem kolejności pinów ich rozstawienia, jak i wielkości obudowy. Dlatego płytka PCB jest tak przygotowana, aby można było zastosować obie wersje:
Odbiornik podczerwieni zamontujemy tak, by patrzył w górę. W ten sposób uzyskamy możliwość komunikacji w dużych pomieszczeniach bez ryzyka, że odbiornik "patrzy" w niewłaściwą stronę:
Niezależnie od typu (powyższych dwóch obudów), na płytce PCB można zamontować w tej pozycji dowolną z nich. Istotne jest natomiast, by przylutować wszystkie trzy nóżki odbiornika zarówno od strony top, jak i bottom.
SRAM – Dodatkowa pamięć
Zgodnie z założeniami i wstępnymi decyzjami nasz robot będzie wyposażony w dodatkową pamięć pozwalającą zapisywać dane zebrane podczas jazdy robota. Pamięcią tą będzie pamięć SRAM, która cechuje się szybkim czasem dostępu, ale traci dane w momencie zaniku zasilania.
Wybrałem pamięć 23LCV1024 o pojemności 128kB z możliwością podtrzymania danych za pomocą zewnętrznego napięcia np. z baterii:
Inną pamięcią z tej rodziny jest 23LCV512 o dwukrotnie mniejszej pojemności (64kB), którą możesz zastosować jako zamiennik. W dalszej części dowiesz się na temat jeszcze innych pamięci.
Do obsługi pamięci wykorzystamy interfejs SPI, który służy do komunikacji na bardzo małe odległości, ale w zamian rekompensuje to bardzo dużą prędkością transmisji. W naszym przypadku oznacza to, że pamięć ta powinna znaleźć się na tej samej płytce co mikrokontroler.
Wyjaśnienia wymagają rezystor na pinie CS oraz elementy podłączone do pinu VBAT.
Pin CS
Zauważ, że pamięć SRAM podłączona jest do tych samych pinów, co programator (MISO, MOSI i SCK). Musimy w takim układzie jakoś rozwiązać problem konfliktu z programatorem.
Standard interfejsu SPI wymusza, by każde urządzenie miało osobny pin je aktywujący. Pinem tym jest pin CS. Mikrokontroler aktywuje pamięć niskim stanem linii CS i deaktywuje ustawiając stan wysoki na tej linii. Robi to za pomocą wybranego pinu jednego z portów (w trybie master slave).
Ponieważ w czasie programowania mikrokontrolera piny portów są w stanie wysokiej impedancji, stąd pin CS pamięci byłby niepodłączony i "zbierał" zakłócenia jak antenka, o której pisałem w artykule: Zakłócenia w pracy mikrokontrolerów. Jak to się objawia i czym może się skończyć dowiesz się z artykułu i krótkiego filmu: Tranzystor MOSFET: Wiedza tajemna
Należy więc w jakiś sposób wymusić, by pin CS miał stan wysoki, gdy nie steruje nim mikrokontroler (np. w czasie programowania). Najprostszą metodą jest zastosowanie zewnętrznego rezystora pull-up, o wartości od kilku do kilkudziesięciu kΩ. Na schemacie rezystor ten oznaczony jest jako R4.
Pin VBAT
Literka V sugeruje napięcie, a BAT baterię i tak właśnie jest, ponieważ pin ten daje nam możliwość podtrzymania danych zgromadzonych w pamięci po wyłączeniu zasilania modułu. Można to rozwiązać za pomocą podłączenia baterii, ale ja zrobiłem to za pomocą kondensatora i diod.
Najpierw zaglądnijmy do dokumentacji pamięci w celu znalezienia parametrów pinu VBAT:
Znajdujemy trzy istotne parametry:
VTRIP - napięcie na pinie Vcc pamięci, poniżej którego następuje automatyczne przejście pamięci w tryb Stanby i jednoczene przełączenie jej zasilania z Vcc na VBAT.
VBAT - czyli zakres napięć z jakich może być zasilane podtrzymanie pamięci,
IBAT - prąd pobierany przez pamięć ze źródła podłączonego do pinu VBAT w trakcie, gdy jest w trybie Standby (czyli jedynie podtrzymuje dane).
Razem parametry te pozwalają na przygotowanie alternatywnego podtrzymania pamięci, które zaprojektowałem następująco:
Jak ma działać podtrzymanie pamięci?
W trakcie, gdy moduł pracuje, kondensator C14 jest ładowany przez diody D2-D4 do wysokości napięcia Vcc pomniejszonego o sumę wartości spadków napięcia diod w kierunku ich przewodzenia VF. Ich zadaniem jest obniżenie napięcia z 5V (napięcie zasilające modułu) do maksymalnie 3,6V (max napięcie pinu VBAT).
Zastosowałem popularne, tanie i szybkie diody przełączające 1N4148 o napięciu przewodzenia VF około 0,6V. Skoro musimy obniżyć napięcie z 5V do maksymalnie 3,6V powinniśmy zastosować diod:
Skoro mamy zastosować nieco ponad dwie diody, to musimy przyjąć aż trzy, co oznacza, że otrzymamy napięcie VBAT na poziomie:
czyli mieścimy się w przedziale ustalonym w datasheet pamięci 1,4V < VBAT <3,6.
Czas podtrzymania
Naturalnym jest pytanie, jaki czas podtrzymania osiągniemy przy takim rozwiązaniu?
Można wyliczyć teoretyczny czas znając parametry zastosowanych diod, pamięci i upływności kondensatora C14. Jednakże w tym wypadku mogą występować znaczne różnice w długości podtrzymania w zależności od partii elementów, ponieważ operować będziemy mikroamperami (parz parametr IBAT).
W związku z tym, gdy dojdziemy z projektem do etapu wykorzystania pamięci SRAM, wykonamy odpowiednie testy.
Pin nr 7 vs Jumper SJ2
Ponieważ w module RoDonM8 możemy wykorzystać nie tylko wyżej omawianą pamięć SRAM, ale także inne pamięci, pomiędzy diodami, a pinem nr 7 (w pamięci 23LCV1024 jest to pin VBAT) znajduje się jumper SMD (punkty lutownicze) oznaczony jako SJ2 (patrz schemat powyżej), który na płytce PCB znajduje się na warstwie top i wygląda następująco:
Pozwala on na przyłączenie pinu nr 7 pamięci SRAM na trzy sposoby:
podłączony do diod,
podłączony do masy (GND),
podłączony do Vcc.
W przypadku pamięci 23LCV1024 jeżeli nie wlutujesz elementów podtrzymania pamięci (diody D2-D4 oraz kondensator C14), to zgodnie z dokumentacją powinieneś podłączyć go do masy (GND):
Ponieważ projektowałem moduł RoDonM8 jako wielofunkcyjny, stąd jest możliwość zastosowania innych pamięci, w których pin nr 7 nie jest pinem VBAT, ale pinem HOLD. Na przykład pamięci z rodziny 23A640/23K640:
W tym wypadku pin HOLD w czasie normalnej pracy powinien mieć stan wysoki. Jumper SJ2 umożliwia taką konfigurację pamięci.
Jak podłączyć zewnętrzną baterię lub sygnał HOLD z mikrokontrolera?
Jeżeli chcesz wykorzystać pin nr 7 w specyficzny sposób, to możesz nie wlutowywać diod D2-D4, ani kondensatora C14, a dzięki połączeniu jumpera SJ2 tak jak z diodami, wykorzystać pin katody diody D4 oznaczony na powyższym rysunku jako SRAM7 do przylutowania zasilania z baterii lub sygnału sterującego z mikrokontrolera.
Przelotki
Płytka PCB została zaprojektowana do wykonania metodą "żelazkową" w zaciszu własnego warsztatu. Dlatego powinieneś uzupełnić wszystkie przelotki znajdujące się na poniższym rysunku.
Żółtymi strzałkami zaznaczyłem przelotki odpowiedzialne za prawidłowe zasilanie mikrokontrolera i te w szczególności wykonaj z odpowiednio grubego drutu, tak by nie było na nich zbędnych spadków napięć.
Pliki do pobrania
Poniżej możesz pobrać kompletny projekt RoDonM8-MB w wersji programu Eagle 6.4.0. Aby pobrać plik ZIP musisz być zarejestrowany i zalogowany: Moje konto. Plik zawiera:
pliki schematu i płytki PCB wykonane w programie Eagle,
bibliotekę Eagle użytych elementów,
gotowe do wydruku PCB w formacie PDF.
Licencja do celów niekomercyjnych:
Niniejszym udzielam licencji na wykorzystanie poniższych plików oraz ich modyfikacji, tylko na użytek własny czytelników strony mikrokontrolery.blogspot.com w celach niekomercyjnych pod warunkiem uznania autorstwa i zamieszczeniu linku do niniejszego artykułu wszędzie tam, gdzie opublikujesz niniejszy projekt modułu (schemat i/lub PCB) lub jego zmodyfikowaną wersję.
Innymi słowy, jeżeli wykorzystasz poniższe pliki, po prostu zrewanżuj się zamieszczeniem linku do niniejszej strony wszędzie tam, gdzie będziesz publikować oryginalną lub swoją zmodyfikowaną wersję niniejszego schematu i/lub PCB, lub opisywał swojego robota, czy inne urządzenie, w którym wykorzystasz pobrane pliki.
Także na schemacie nie usuwaj danych wskazujących na pierwotnego autora oraz adresu strony internetowej. Swoje dane dopisz jako autora modyfikacji.
Pamiętaj, że poświęciłem temu projektowi sporo czasu, a udostępniam go za free :-)
Życzę dużo radochy z wykorzystania RoDonM8-MB!
Licencja do celów komercyjnych:
Wszystkich, którzy chcą wykorzystać niniejszy projekt w celach komercyjnych informuję, że udostępnię projekt bezpłatnie po skontaktowaniu się ze mną poprzez formularz kontaktu.
Oceń artykuł. Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły. Pozdrawiamy, Autorzy
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.