środa, 30 marca 2011

RoDonM8: Modul główny robota (RoDonM8-MB)


Autor: Dondu

Artykuł jest częścią cyklu: Robotyka - Teoria oraz kurs budowy robotów.

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):

Zgodnie z założeniami oraz decyzjami wstępnymi, płytka ta ma zawierać:
  • mikorokontroler Atmega8A w obudowie TQFP,
  • kwarc 16MHz,
  • odbiornik podczerwieni RC-5,
  • pamięć SRAM w oparciu o interfejs SPI,
  • regulator LDO (stabilizator napięcia zasilającego),
  • 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 EagleSparkFun.


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:
  1. pozwala on korzystać z regulatora LDO (U1) do zasilania elementów znajdujących się poza modułem, 
  2. 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 przewoduNie łą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.

Dokonaliśmy tego w artykule: RoDonM8 - Zasilanie modułu głównego - bilans prądów
gdzie ustaliliśmy, że powinniśmy się przygotować na 400mA, co oznacza, że regulator nie może być cherlakiem.

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.

Następnym krokiem jest więc ustalenie jego wymagań dot. zewnętrznych elementów dodatkowych regulatora i znalazłem:


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óle potrzebny?

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,
  • kondensator C11 filtrujący napięcie odniesienia przetwornika analogowo-cyfrowego (ADC),
  • rozdzielenie mas cyfrowej (GND) od analogowej (AGND).
Piny AVccRESET 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. INT0ICPOC1AMOSI, 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.

Techniki te opisane są w artykule: ADC - Dokładność vs podłączanie

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:




Na płytce PCB zgodnie z powyższym linkiem i zawartym tam rysunkiem:



masa analogowa na płytce RoDonM8-MB (na stronie bottom jasno 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 AVcc AREF 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ą.

Jaki to ma dla nas skutek?

W przypadku robotów, gdzie mamy elementy indukcyjne w postaci silników generujące sporo zakłóceń, warto w szczególności zadbać o tak newralgiczny pin, którym jest pin RESET.

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.

Producent mikrokontrolera opisał ten problem w nocie AVR042 (także w tej najnowszej z 2013r.) strony 5 i 6, a ja wyjaśniam w artykule: Przycisk - drgania styków - bouncing


Reset i przycisk

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

Opisałem tam także dlaczego na linii zasilania odbiornika niezbędny jest filtr RC złożony z rezystorów R2 oraz kondensator C4, które filtrują dodatkowo zasilanie czujnika, gdyż jest to dla niego bardzo istotne:




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:
  1. podłączony do diod,
  2. podłączony do masy (GND),
  3. 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ę.


Zrewanżuj się:

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.


25 komentarzy:

  1. Cześć! Super modulik! Czy mógłbyś jeszcze dzisiaj wstawić pliki?

    OdpowiedzUsuń
  2. Tej sram może pracować z 20MHZ. Z jaką będzie częstotliwością pracował w tym module?

    OdpowiedzUsuń
    Odpowiedzi
    1. Maksymalnie 8 MHz ze względu na ograniczenie SPI do CLK/2. W wersji XMEGA będzie to 16 MHz (możliwość taktowania 32 MHz). Ale nie jest to istotne, gdyż nawet dla 8 MHz mamy możliwość zapisu teoretycznie 1 MB/s, aż nadto jak na nasze potrzeby.

      Usuń
    2. Dodam tylko, że to ograniczenie jest po stronie mikrokontrolera.

      Usuń
  3. Cześć. Czy mógłbyś dodać wykaz elementów? Chciałbym wykonać sobie tę płytkę, gdy wstawisz pliki.

    OdpowiedzUsuń
  4. Przeczytałem i płytka wygląda dobrze natomiast mam zastrzeżenie do tekstu. Z dokumentacji wynika ze Vbat jeżeli jest niepodłączony powinien być podłączony do Vss a nie GND jak napisałeś.

    Joeluck

    OdpowiedzUsuń
    Odpowiedzi
    1. Nie, nie ma pomyłki. W artykule pod koniec zacytowałem odpowiedni fragment datasheet punkt 3.6 VBAT Supply input, który rekomenduje podłączenie do Vss, a Vss to GND.

      Usuń
  5. Całkiem fajna płytka testowa z tego jest. W sumie brakuje tylko wyprowadzenia AREF. No i zgrabny mały szkrab w wersji poucinanej do minimum. Ile czasu zajęło Ci zaprojektowanie PCB?

    OdpowiedzUsuń
    Odpowiedzi
    1. Nie jestem w stanie powiedzieć, bo pracowałem nad nią pisząc jednocześnie artykuł, w dodatku ciągle przerywając. Poza tym, po każdych 24h od poprzednich zmian, gdy rzucasz okiem na płytkę, to jeszcze zauważasz, że coś można było inaczej zrobić. Dlatego z PCB nie należy się spieszyć.

      Usuń
  6. Nie wszędzie podałeś typy kondensatorów i nie napisałeś nic o dławiku. Pzdr!

    OdpowiedzUsuń
  7. Czy można jaśniej napisać jakie znaczenie ma dioda przy pinie resetu?

    OdpowiedzUsuń
    Odpowiedzi
    1. Każdy pin mikrokontrolera (z wyjątkiem pinów zasilających) ma tę diodę wbudowaną i zabezpiecza ona pin przed zewnętrznymi impulsami napięciowymi (w szczególności indukowanymi na ścieżkach itp.) o napięciu wyższym niż zasilające mikrokontroler.

      Działa to w ten sposób, że jeżeli na pinie pojawi się napięcie większe od Vcc+Vf (Vf - napięcie przewodzenia diody), to dioda zaczyna przewodzić z chronionego pinu do Vcc. Innymi słowy, dzięki diodzie napięcie na chronionym pinie nie przekroczy dopuszczalnego.

      Niestety pin RESET nie ma tej diody i wyjaśniłem w artykule dlaczego.

      Proszę kliknąć oba linki w ostatnim zdaniu przed punktem: Reset i przycisk

      Usuń
    2. Rozumiem zadanie diody (przewodzenie jeśli napięcie na katodzie jest mniejsze niż na anodzie.
      Ale co to da jeśli wówczas większe napięcie niż VCC+~0,6V poleci na VCC wówczas nie uszkodzi to uC albo innych komponentów?

      Usuń
    3. Mikrokontroler działa w określonym urządzeniu. Urządzenie to ma odbiorniki, którym jest mikrokontroler i inne elementy. Do tego w urządzeniu na zasilaniu Vcc jest sporo kondensatorów, itd., (PCB także nie jest bez znaczenia), a zakłócenie indukowane na pinie także ma swój charakter niekoniecznie powtarzalny.

      Dlatego nie ma jednoznacznej odpowiedzi, co się stanie. Wszystko zależy od danego urządzenia. Dodatkowo dioda zabezpieczająca, także ma swoje parametry i może ulec uszkodzeniu po ich przekroczeniu.

      Jest możliwe oczywiście, że ten sam rodzaj zakłócenia co do wartości, charakteru i czasu trwania nie poczyni żadnych szkódm gdy mikrokontroler pracuje w urządzeniu A, a w innym (B)jednak tak.

      Usuń
  8. Dziękuję za udostępnienie oryginalnych plików!

    OdpowiedzUsuń
  9. Może warto by zainteresować się płytkami zrobionymi przez jakąś firmę? Jeżeli chciałoby kilkanaście osób takie płytki warto by było pomyśleć. Dosyć trudna do wytrawienia domowymi sposobami, aczkolwiek może i by się dało.
    Z drugiej strony można to zrobić na cnc, ale nie każdy ma dostęp(np. ja).

    Cała płytka, projekt, jest na prawdę świetny. Jestem pod wrażeniem :)

    OdpowiedzUsuń
    Odpowiedzi
    1. Płytka nie jest trudna do wytrawienia. Bez problemu można to zrobić metodą żelazkową, jak wiele innych płytek z mirkokontrolerami o rastrze 0,8mm, czyli np. ATmega8 w obudowie TQFP.

      Jest też inne wyjście - stworzyć własne PCB na bazie udostępnionego schematu. W takim przypadku sugeruję jednak nie zmieniać kolejności pinów w złączach.

      W najbliższy weekend pokażę tę płytkę wykonaną metodą fotochemiczną do której stosowania zachęcam.

      Usuń
    2. Metoda fotochemiczna jest droższa, trudniejsza a zarazem dokładniejsza. większość początkujących raczej trawi klasycznie + termotransfer.

      Usuń
    3. Dlatego też płytka jest przygotowana pod metodę żelazkową, a dla fotochemicznej ścieżki mogą być węższe. Droższa - tak, ale nie aż tak dużo, gdy weźmie się pod uwagę ilość czasu potrzebną na metodę żelazkową.

      Usuń
  10. Dzisiaj zrobiłem płytkę, to się pochwalę: http://img19.imageshack.us/img19/7958/qcaj.jpg

    OdpowiedzUsuń
    Odpowiedzi
    1. I co z tego, jak projekt przeszedł w stan śmierci klinicznej na czas bliżej nieokreślony, jak chyba wszystkie serie na tym blogu.

      Usuń
    2. Dla mnie tempo ukazywania się artykułów nie jest problemem. A czekać na dalszy ciąg też nikt mi nie każe - już leci/płynie do mnie z Chin podwozie zamówione na Ebay, mostki H już mam, więc jak trzeba to sam dalej podziałam ;) A soft już powoli powstaje... na razie do obłsługi RC5 i pamięci. I jeszcze jedno: muzealny zabytek wymieniłem na atmega88pu i kwarc dałem 20MHz :)

      Usuń
    3. @Anonimowy - Nikt nie zmusza Ciebie do poświęcania czasu na czytanie darmowych artykułów pisanych w ramach wolnego czasu. Zawsze możesz wydać swoje pieniądze i kupić książkę. Ty decydujesz ...

      @Olek :-)

      Usuń