Robot inspekcyjny „ENLIL” moduł sprzętowy

Transkrypt

Robot inspekcyjny „ENLIL” moduł sprzętowy
Robot inspekcyjny „ENLIL”
moduł sprzętowy
Szymon Bigos
Artur Zolich
Automatyka i Robotyka, spec. Robotyka (ARR)
Wydział Elektroniki, Politechnika Wrocławska
Wizualizacja danych
sensorycznych
Projekt
Czerwiec 2009
Spis treści
1 Założenia projektu
3
2 Moduł sprzętowy
2.1 Moduł napędowy . . . . . . . . . . . . . . .
2.2 Moduł wizyjny . . . . . . . . . . . . . . . .
2.3 Moduł oświetlenia . . . . . . . . . . . . . . .
2.4 Moduł zasilania . . . . . . . . . . . . . . . .
2.5 Moduł komunikacji robot — panel operatora
2.6 Moduł interfejsu użytkownika . . . . . . . .
2.7 Moduł sterownika . . . . . . . . . . . . . . .
2.7.1 Filtracja napięcia . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
7
9
10
11
13
13
22
3 Podsumowanie
22
Literatura
23
2
1
Założenia projektu
Projekt obejmuje stworzenie robota inspekcyjnego instalacji wentylacyjnych.
Wstępne założenia projektu, wynikające z potrzeb zamawiającego przedstawiały się następująco:
• napęd: 4 koła napędzane,
• system wizyjny: Kamera USB,
• komunikacja: USB (wirtualny port COM),
• mikroprocesor: rodzina AVR,
• zasięg: do 15 metrów,
Sugerując się pojazdami dostępnymi na rynku postanowiono wykonać platformę mobilną klasy (2,0) zdegenerowaną. Pojazd wyposażono w cztery koła
napędzane niezależnie. Koszt konstrukcji dostępnych obecnie na rynku wynosi ok. 6 000 – 7 000 EURO. Wykorzystanie tanich, aczkolwiek sprawdzonych
podzespołów, powoduje obniżenie kosztów platformy do około 1 000 PLN.
Dalsze rozmowy przeprowadzone ze zleceniodawcą doprowadziły do ostatecznego zdefiniowania założeń konstrukcyjnych pojazdu. Ustalono następujące cechy:
• wymiar przekroju otoczenia: min 300 mm x 200 mm,
• waga robota: do 3 kg,
• maksymalne wymiary (długość x szerokość x wysokość): 300 mm x 300
mm x 200 mm,
• napęd: cztery koła niezależnie napędzane,
• prześwit podwozia: min. 2 cm,
• komunikacja: przewód wleczony za robotem,
• zasilanie: przewód wleczony za robotem,
• system bezpieczeństwa: lina wyciągowa,
• system wizyjny: kamera USB,
• sterowanie prędkością: proporcjonalne,
• budowa: zwarta.
3
2
Moduł sprzętowy
Zadanie inspekcji kanałów wentylacyjnych wymaga od platformy mobilnej:
• kompaktowych rozmiarów,
• małego promienia skrętu,
• wytrzymałości,
• prostoty,
• łatwości obsługi,
• łatwości serwisowania,
• stosunkowo małej prędkości.
Korpus robota stanowi obudowa Km-106 wykonana z wytrzymałego tworzywa ABS. Główne moduły robota to:
• moduł napędowy,
• moduł wizyjny,
• moduł oświetlenia,
• moduł zasilania,
• moduł komunikacji robot — panel operatora,
• moduł interfejsu użytkownika,
• moduł sterowania.
2.1
Moduł napędowy
Dobór podzespołów układu napędowego wynikał w linii prostej z założeń konstrukcyjnych. Mając na uwadze ważny aspekt wleczenia przez robota przewodów, oraz brak potrzeby rozwijania dużych prędkości skupienie w kwestii
doboru materiałów skierowano na moment obrotowy.
Brano pod uwagę wykorzystanie trzech rodzai napędu:
• zestaw: silnik, przekładnia, mostek H, koła.
• zestaw: modyfikowane serwomechanizmy modelarskie (umożliwiające
obrót o 360◦ ), mostek H, koła.
4
• zestaw: serwomechanizmy modelarskie o obrocie 360◦ , koła.
Zaletą pierwszego rozwiązania jest możliwość doboru podzespołów dokładnie
pod potrzeby układu. Niestety zakup osobnych elementów powoduje generację dodatkowych kosztów. Co więcej pojawia się problem projektowy związany ze skonstruowaniem odpowiedniego mostka H, zdolnego obsłużyć silniki
potrafiące pobrać prąd dochodzący do kilkunastu amperów.
Zastosowanie drugiego zestawu pozwala na dobór serwomechanizmu o
potrzebnym momencie, odpowiedniego dla danego zadania. Dodatkowo prąd
pobierany przez małe silniki modułów pozwala na zastosowanie popularnych
mostków H typu L293D, czy też w ostateczności L298. Dodatkowo rozwiązanie można uznać za tanie. Wadą jest natomiast utrata gwarancji na serwomechanizm. Co więcej mechanizmy mieszczące się w możliwych do zaakceptowania kosztach są czasami niezadowalającej jakości.
Ostatnie przedstawione rozwiązanie pozwala uniknąć użycia w projekcie
mostków H. Zachowuje ono dodatkowo gwarancję na układy. Serwomechanizmy obrotowe są jednakże drogie oraz słabe w porównaniu do modeli 180◦ .
Rozważając wszystkie przedstawione powyżej możliwości natrafiono na
ofertę firmy ARE [1] o numerze ARE0043 – serwomechanizmy modelarskie
modyfikowane z urządzeń 180◦ na modele 360◦ (rys. 1). Oferta okazała się
Rysunek 1: Serwomechanizm ARE0043.
szczególnie interesująca ponieważ modyfikacji uległy mechanizmy firmy TowerPro model MG995. Dzięki stosunkowo niskiej cenie, metalowej przekładni oraz uzyskiwanemu momentowi znajdują one szerokie zastosowanie wśród
robotów walczących klasy „minisumo”. Były one również znane autorom projektu. Do zalet serwomechanizmów można zaliczyć solidną konstrukcję opartą
o metalowe tryby przekładni oraz bardzo dobre parametry pracy [1]:
• moment : 13 kg*cm (4,8V) ; 15 kg*cm (6V),
• prędkość : 0,17 sek. (4,8) ; 0,13 sek. (6V) (czas obrotu o 60 stopni).
5
Dodatkowo układ gwarantuje kompaktowe wymiary (40,6x19,8x37), brak potrzeby wykorzystania mostka H (sterowanie sygnałem PWM) oraz daje gwarancję firmy na układy. Niestety rozwiązanie nie jest pozbawione wad. Zastosowana modyfikacja serwomechanizmu, opierająca się w znacznej mierze na
fabrycznej płycie głównej układu zapewnia sterowanie prędkością obrotową w
stosunkowo wąskim zakresie, jakość wykonania serwomechanizmu natomiast
nie zawsze jest najwyższa. Częstą wadą mechanizmów MG995 jest ustawienie
wału pod kątem do prawidłowej osi obrotu, co powoduje precesję. W przypadku zakupionych na potrzeby projektu 2 z 4. modułów są naznaczone tego
typu wadą. Jej wpływ na jakość ruchu robota jest jednakże pomijalnie mały.
Szkice wstępne robota pokazały, iż średnica kół powinna wynosić co najmniej 100 mm. Rozpatrywano dwa źródła pozyskania kół: market budowlany
oraz sklep modelarski. Porównując oferty obu, ostatecznie zdecydowano o dokonaniu zakupu w sklepie modelarskim [2]. Brano pod uwagę zakup kół oraz
opon przeznaczonych dla modeli typu „Buggy” w skali 1:8. Cena owych była jednakże zbyt wysoka. Zdecydowano o zakupie czterech kół piankowych,
miękkich, bieżnikowanych, o średnicy 4,5 in (115 mm) firmy Dave Brown,
Lite Flite Wheels. Brak towaru wymusił jednak zakup kół o średnicy 5 in.
Koła zapewniają dobrą przyczepność zarówno na czystych jak i brudnych,
śliskich powierzchniach.
Do mocowania koła do osi serwomechanizmu zdecydowano posłużyć się
znajdującym się w zestawie orczykiem dwuramiennym (rys. 2). Orczyk na
Rysunek 2: Połączenie koła z orczykiem.
stałe – z wykorzystaniem wkręta – połączono z kołem z zachowaniem osi. Do
połączenia użyto 40 mm śrub imbusowych M3 o klasie wytrzymałości 12,9
[3]. Jako, iż średnica otworu w kole wynosi 4 mm, w celu eliminacji luzów
użyto tulejki mosiężnej o średnicy wewnętrznej 3 mm i zewnętrznej 4 mm.
Całość pozwala na szybki demontaż kół z jednoczesnym zachowaniem pewnego przekazania momentu na koło. Wadą rozwiązania jest – wynikający z
6
niedokładności serwomechanizmów – poprzeczny ruch kół. Części składowe
napędu ukazuje rysunek 3. Gotowe zestawy układów napędowych zobrazowano na rysunku 4.
Rysunek 3: Części składowe układu napędowego.
Rysunek 4: Gotowe moduły napędowe.
2.2
Moduł wizyjny
Moduł wizyjny jest dla projektu szczególnie istotny. Płynność obrazu jest
znaczącym czynnikiem wpływającym na komfort poruszania się po wąskich
korytarzach. Dobra jakość zdjęć oraz filmów wymagana jest w momencie
prezentacji wyników rekonesansu. Spośród wszystkich dostępnych na rynku
rozwiązań wyboru należało dokonać pomiędzy:
• minikamerą przemysłową oraz modułem akwizycji danych na USB,
7
• kamerą internetowa USB.
Problem oświetlenia ciemnego kanału faworyzuje opcję pierwszą. Przez wzgląd
na czułość oraz jakość obiektywów układów przemysłowych praca w warunkach niedoświetlenia nie jest problemem. Niestety kwota, która została przewidziana na zbudowanie robota nie pozwalał na zakup sprzętu kolorowego o
dobrej jakości obrazu i dużej rozdzielczości. Tanie układy natomiast są monochromatyczne bądź też nie zaspokajają potrzeby użytkownika w aspekcie
rozmiaru oraz jakości obrazu.
Przez wzgląd na powyższe braki jako moduł akwizycji obrazu postanowiono wykorzystać kamerę internetową. Barierę cenową ustalono na poziomie 150 zł. Szczególnie istotnymi cechami kamery były wymiary oraz jakość
obrazu. Analiza rynku kamer internetowych doprowadziła do rozważań nad
zakupem urządzenia wyposażonego w autofocus (np. Media-Tech AUTOPIX
PRO MT4019). Testy kamer przeprowadzone w jednej z sieci supermarketów zadecydowały o odrzuceniu tej możliwości. Ustawianie ostrości w kamerze przebiegało zbyt wolno. Po zapoznaniu się z testami dotyczącymi urządzeń oraz sprawdzeniu współpracy z systemem Linux zakupiono urządzenie
Media-Tech MT4022 LOOK (rys. 5). Kamerę cechują:
Rysunek 5: Kamera Media-Tech MT4022 LOOK.
• sensor 1,3 Mpix,
• zgodność z „video4linux”,
• rozdzielczość optyczna 1280x1024 ppi,
• szybkość obrazu do 30 fps,
• interfejs USB 2.0,
• rozdzieczość obrazu nieruchomego 5 Mpix,
8
• wbudowany mikrofon,
• wbudowane sterowniki dla systemów Windows,
• przycisk „Snapshot”.
2.3
Moduł oświetlenia
Problem oświetlenia kanału wentylacyjnego jest bardzo istotny. Szczególnie
jeśli korzysta się z kamery internetowej. Z tego powodu zdecydowano się na
zastosowaniu 8. diod superjasnych, białych. Zastosowanie niezależnego sterowania każdej diody pozwala na dostosowanie oświetlenia do aktualnie eksplorowanego kanału. Wybór padł na dwa typy elementów, po cztery sztuki
każdego z nich. HB5-439AWF (rys. 6) – diody oświetlające długi korytarz o
wąskim strumieniu mocnego światła. Cechują się światłością do 20 cd i kątem
Rysunek 6: Dioda HB5-439AWF [5].
połowy jasności wynoszącym 22◦ . Diody rozświetlające korytarz w pobliżu
robota to model OSW5XL56E1R (rys. 7) – 5,5. cd, 140◦ . Takie rozwiązanie
Rysunek 7: Dioda OSW5XL56E1R [4].
pozwalana na stosunkowo równomierne oświetlenie sceny, dzięki czemu można uzyskać satysfakcjonującą płynność obrazu z kamery. Aby nie obciążać
mikrokontrolera sterowanie elementami odbywa się za pośrednictwem układu scalonego ULN2803A – 8xDarlington. Diody zapalane są poprzez zwarcie
9
Rysunek 8: Dioda OSW5XL56E1R – rozkład światłości [4].
katody do masy. Obecnie sterowane są one prądem ok. 15 mA. Jeśli wartość ta okaże się niewystarczająca modyfikacja polega na zamianie rezystora
ograniczającego prąd.
2.4
Moduł zasilania
Pierwszym stadium opracowania modułu zasilania robota, był dobór napięcia
doprowadzonego do urządzenia. Rozpatrzono następujące opcje:
• zasilanie bateryjne 6xAA (7,2–9V) bądź 2 ogniwa Li-Pol (7,4V),
• zasilanie napięciem stałym 12V,
• zasilanie napięciem stałym 5V,
• zasilanie napięciem zmiennym 230V/50Hz.
Ograniczenie czasu działania, oraz generacja ciągłych kosztów spowodowała odrzucenie możliwości wykorzystania zasilania bateryjnego. Zastosowanie akumulatorów lub ogniw Li-Pol zatrzymałoby potrzebę ciągłych inwestycji, jednakże ogniwa NiMH, czy też NiCd nie pozwalałyby na długą pracę.
Koszty ładowarki Li-Pol oraz samej baterii natomiast byłyby większe niż
koszt zasilania sieciowego.
Potrzeba wleczenia przez robota 20. metrów przewodu po aluminiowych
kanałach wentylacyjnych nakazała odrzucić możliwość doprowadzenia do robota prądu o napięciu 230V/50Hz. Przede wszystkim należy wziąć pod uwagę
możliwość przetarcia przewodu na krawędziach kanału, a tym samym podpięcia instalacji wentylacyjnej do napięcia sieciowego. Dodatkowo koszt dobrej
jakości przewodu jest duży.
Podzespoły robota wymagające zasilania to:
10
• płyta główna – 5V,
• diody oświetleniowe – 5V,
• serwomechanizmy – 4,8/6V (Maks. 16V),
• hub USB (aktywny) – 5/12V,
• kamera – zasilanie z USB.
Przy uruchomieniu wszystkich podzespołów zapotrzebowanie na prąd robota
wynosi:
• 0,6A – pełna moc silników, zapalone wszystkie diody,
• 0,13A – silniki zatrzymane, zapalone wszystkie diody,
• 0,09A – silniki zatrzymane, diody zgaszone.
Analizując zapotrzebowanie układów postanowiono zastosować możliwość zasilania zarówno stabilizowanym napięciem 5V bądź 6,25–26V. Wybór zasilania realizowany jest sprzętowo poprzez odpowiednie założenie zworki kierującej napięcie bezpośrednio na układy bądź na stabilizator „low dropout”
LM2940 (wydajność prądowa 1A). Układ zasila całość robota zarówno płytę
główną, moduł oświetlenia jak i silniki.
Zasilacz robota powinien być wyposażony we wtyk zasilający DC, żeński
2,5/5,5 mm o długości 9 mm. Dodatkowo na obudowie zastosowano wyłącznik
zasilania typu „Rocker”. Pozycja „0” znajduje się u góry robota, aby ułatwić
jego wyłączenie w czasie ruchu.
2.5
Moduł komunikacji robot — panel operatora
Modułowość, prędkość transmisji wymagana przez kamerę oraz możliwości
rozbudowy zadecydowały o wykorzystaniu do komunikacji standardu USB
2.0. Podzespoły – w celu obniżenia kosztów – zostały wybrane spośród dostępnych we Wrocławiu. Główna wada interfejsu USB to zasięg sygnału wynoszący 3-5 metrów. Wymóg zleceniodawcy spowodował potrzebę zastosowania przedłużaczy aktywnych. Wybrano 5. metrowe wzmacniacze USB 2.0
„USB Repeater Cable” firmy Digitus (rys. 9), umożliwiające stworzenie kaskady o długości do 20 m. Rozpatrywano również możliwość zakupu przedłużacza aktywnego opartego o przewód sieciowy, tzw. „USB po skrętce 5 kat.”.
Rozwiązanie to pozwala na zwiększenie dystansu nawet do 60 m. niestety
standard pozwala jedynie na przesył z prędkością standardu USB 1.1. Aby
obraz z kamery był płynny wymagane jest złącze klasy USB 2.0.
11
Rysunek 9: Przedłużacz aktywny USB firmy Digitus.
Za kaskadą 3 przedłużaczy aktywnych znajduje się 4 wejściowy hub aktywny USB 2.0 firmy UNITEK (rys. 10). W obecnej postaci robota hub pra-
Rysunek 10: Hub aktywny USB firmy UNITEK.
cuje w trybie pasywnym. Wybór urządzenia podyktował fakt, iż w przypadku
potrzeby dodatkowego zasilania urządzenia wymagane jest podłączenie zasilania 5V, łatwo dostępnego w robocie. Większość tego typu układów wymaga
zasilania napięciem zewnętrznym 12V. Dodatkowo moduł jest płaski, mały
oraz posiada solidną, metalową obudowę.
Do huba podłączona jest kamera internetowa oraz tani konwerter standardów USB–RS232 marki tzw. „NoName” (rys. 11), co zaskakujące oparty
o chipset PL-2303 firmy Prolific. Pomiędzy przejściówką a mikrokontrolerem
znajduje się układ konwersji napięć MAX232. Komunikacja prowadzona jest
w standardzie UART o parametrach:
• prędkość transmisji: 36 400 bps,
• bity danych: 8,
• parzystość: Brak,
• bity stopu: 1.
Zakończeniem kabla komunikacyjnego robota jest wtyk USB typu A.
Dzięki temu bez stosowania dodatkowych przewodów urządzenie może zostać podłączone do komputera w celu analizy działania.
12
Rysunek 11: Konwerter USB–RS232.
2.6
Moduł interfejsu użytkownika
Robot został wyposażony w prosty interfejs stworzony głównie z myślą o zabezpieczeniu przed niepożądanym działaniem układu. Na obudowie do dyspozycji operatora znajdują się przyciski: „reset”, „napęd” oraz wyłącznik
główny. Wprowadzono również diody sygnalizacyjne: „napięcie”, „komunikacja”, „napęd”. Przycisk „reset” to zewnętrzne zdublowanie wewnętrznego
przycisku reset mikrokontrolera. Wyłącznik główny odcina zasilanie tuż przy
gnieździe. Przycisk „napęd” powoduje trwałe zatrzymanie silników. Zostają one zatrzymane pomimo komunikatów otrzymywanych z komputera. Ponowne użycie powoduje przywrócenie kontroli nad silnikami. Jako, iż jest to
rozwiązanie programowe, zresetowanie układu również przywraca sterowanie
silnikami.
Żółta dioda „napięcie” mówi o obecności zasilania na płycie głównej. Zielona dioda „napęd” świeci gdy sterowanie silnikami jest włączone, gaszona
jest gdy silniki nie mogą pracować. Czerwona dioda „komunikacja” wskazuje,
iż minęło co najmniej 0,5-1,5 sekundy od otrzymania ostatniego komunikatu o
nastawach, bądź otrzymano komunikat błędny (pominięcie elementu ramki).
W tym takim przypadku silniki są zatrzymywane. Wysłanie nowego komunikatu, bądź przywrócenie poprawności transmisji kasuje błąd i umożliwia
dalszy ruch napędów.
2.7
Moduł sterownika
Sterowanie oparto o mikrokontroler rodziny AVR, ATmega16 [6]. Układ scalony przekonfigurowano do pracy z kwarcem zewnętrznym 16 MHz dodatkowo zablokowano obsługę interfejsu JTAG. Do budowy wykorzystane zostały
elementy SMD. Program układu, schemat oraz PCB przedstawiono poniżej:
/∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
13
∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗∗∗∗∗∗ A r t u r Z o l i c h , a r t u r . z o l i c h @ g m a i l . com
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗∗∗∗∗∗ Szymon B i g o s , 1 4 6 0 2 9 @ st u d en t . pwr . wroc . p l ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗
∗∗∗∗∗∗∗
∗∗∗∗∗∗∗ Program s t e r o w n i k a r o b o t a i n s p e k c y j n e g o kanałow w e n t y l a c y j n y c h ∗∗∗∗∗∗∗
∗∗∗∗∗∗∗
”ENLIL”
∗∗∗∗∗∗∗
∗∗∗∗∗∗∗
∗∗∗∗∗∗∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗/
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / KONFIGURACJA PROCESORA / / / / / / / / / / / / / / / / / / / / /
/∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗ HFUSE|=(1<<JTAGEN)|(0 < <CKOPT)
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗
wylaczenie
i n t e r f e j s u JTAG
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗
u r u c h o m i e n i e kwarcu z e w n e t r z n e g o
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗ LFUSE|=(1<<CKSEL3)|(1 < <CKSEL2)|(1 < <CKSEL1) ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗
u r u c h o m i e n i e kwarcu z e w n e t r z n e g o
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗/
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / DEBUG/RELEASE / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
//#d e f i n e DEBUG 1 // j e s l i zmienna z d e f i n i o w a n a
// debugowania
nastepuje
kompilacja w trybie
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / INCLUDE / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
#include <a v r / i o . h>
#include <a v r / i n t e r r u p t . h>
#i f n d e f F CPU
#d e f i n e F CPU 16E6 //
#e n d i f
#include < u t i l / d e l a y . h>
definicja
taktowania
p r o c e s o r a , wymagana p r z e z ” d e l a y . h”
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / DEFINE / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
#d e f i n e
#d e f i n e
s b i ( port ,
c b i ( port ,
b i t ) ( p o r t ) |= ( 1 << ( b i t ) )
// makro u s t a w i a j a c e b i t
b i t ) ( p o r t ) &= ˜ ( 1 << ( b i t ) ) // makro z e r u j a c e b i t
#d e f i n e STOP SILNIKA 1536 // w a r t o s c OCR1x d l a
#d e f i n e ILOSC PAKIETOW 4 //
ilosc
#d e f i n e PREAMBULA 0xAA // w a r t o s c
ktorej
silniki
sa zatrzymane
p a k i e t o w danych otrzymywanych p r z e UART
r o z p o c z y n a j a c a ramke t r a n s m i s y j n a UART
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / DEKLARACJE / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
void ustawPORTY ( void ) ; // u s t a w i e n i e portow po s t a r c i e
// w k o n f i g u r a c j e b e z p i e c z n a
void ustawTIM0 ( void ) ;
void ustawTIM1 ( void ) ;
void ustawTIM2 ( void ) ;
void ustawUSART ( void ) ;
// u s t a w i e n i a timerow
// u r u c h o m i e n i e warstwy k o m u n i k a c j i USART
void u p u t c ( char znak ) ; // w y s l i j znak (UART)
void u p u t s ( char ∗ wyraz ) ; // w y s l i j c i a g znakow (UART)
void i t o a ( unsigned i n t l i c z b a ) ; // w y s l i j l i c z b e z a m i e n i o n a na ASCII (UART)
uint8 t
s t e r o w a n i e ( void ) ;
// o b s l u g a danych z
void z a t r z y m a j s i l n i k i ( void ) ;
// z a t r z y m a j
int
// t e s t o w a n i e
p r z e r w a t r a n s m i s j i ( void ) ;
void z a d a j o s w i e t l e n i e ( u i n t 8 t
void naped ( void ) ;
i n t main ( void ) ;
// o b s l u g a
maska diod ) ;
przycisku
i n t e r f e j s u UART
silniki
(TIMER1)
poprawnosci komunikacji
// f u n k c j a
zapala odpowiednie diody
o r a z d i o d y z a t r z y m a n i a napedu
// f u n k c j a glowna programu
14
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / ZMIENNE GLOBALNE / / / / / / / / / / / / / / / / / / / / / / / / / / /
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
o t r z y m a n i a d a n e j p o p r z e z UART ( 1 − aktywna )
volatile
u i n t 8 t flaga UART =0; // f l a g a
volatile
u i n t 8 t komenda UART=0; // w a r t o s c otrzymana p r z e z UART
volatile
uint8 t
k o m u n i k a c j a =0; // i n f o r m u j e o braku
volatile
uint8 t
s t o p =1; // i n f o r m u j e o p o t r z e b i e
lacznosci
zatrzymania
(0 − j e s t )
silnikow
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / PRZERWANIA / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
ISR ( TIMER2 OVF vect ) { // w e k t o r p r z e r w a n i a RTC (TIMER2)
k o m u n i k a c j a ++;
}
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
ISR ( USART RXC vect ) { // w e k t o r p r z e r w a n i a o t r z y m a n i a d a n e j p o p r z e z UART
// ustaw f l a g e i n f o r m u j a c a o danych do p o b r a n i a
flaga UART =1;
komenda UART=UDR; // w p i s z dana do z m i e n n e j z e w n e t r z n e j , z w o l n i j r e j e s t r
// UDR ( u m o z l i w i t o w y j s c i e z p r z e r w a n i a )
}
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / KONFIGURACJA REJESTROW / / / / / / / / / / / / / / / / / / / / /
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
void ustawPORTY ( ) { // u s t a w i e n i e w e j s c / w y j s c w p o z y c j e
DDRA=0xFF ; // PORTA j a k o w y j s c i a w s t a n i e n i s k i m
PORTA=0x00 ;
bezpieczna
DDRB=0xFE ; // PORTB7−1 j a k o w y j s c i a w s t a n i e n i s k i m ,
PORTB=0x01 ;
// PORTB0 w e j ś c i e z p o d c i a g n i e m
DDRC=0xFF ; // PORTC j a k o
PORTC=0x00 ;
wyjscia w stanie
niskim
DDRD=0xFF ; // PORTD j a k o
PORTD=0x00 ;
wyjscia w stanie
niskim
}
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
void ustawTIM1 ( ) { // uruchom p r a c e TIMER−a1 w t r y b i e Phase C o r r e c t PWM
TCCR1A=(1<<COM1A1)|(1 < <COM1B1)|(1 < <WGM11) ; // Phase C o r r e c t PWM,
// s t a n n i s k i na OC1A i OC1B w momencie z g o d n o s c i ,
// g o r n a g r a n i c a u s t a w i o n a na r e j e s t r ICR1
TCCR1B = (1<<WGM13)|(1 < <CS11 ) ; // g o r n a g r a n i c a u s t a w i o n a na r e j e s t r ICR1 ,
// p r e s k a l e r 8
ICR1 =20000; // u s t a w i e n i e c z e s t o t l i w o s c i na 50 Hz ( o k r e s 20 ms )
}
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
void ustawTIM2 ( ) { // uruchom p r a c e a s y n c h r o n i c z n a TIMER−a2 ( p r a c a RTC)
TCCR2|=(1<<CS22 ) ; // p r e s k a l e r 64 − p r z e p e l n i e n i e c o 0 , 5 sekundy
ASSR|=(1<<AS2 ) ; // r o z p o c z n i j t r y b p r a c y a s y n c h r o n i c z n e j
TIMSK|=(1<<TOIE2 ) ; // uruchom p r z e r w a n i e p r z e p e l n i e n i a
}
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
void ustawUSART ( ) { // u s t a w i e n i e modulu USART w t r y b p r a c y UART
UBRRL=103; // 2 5 ; // t r a n s m i s j a 3 8 4 0 0 bps , p r z y 16 MHz
UCSRC=(1<<URSEL)|(1 < <UCSZ1)|(1 < <UCSZ0 ) ; // p r a c a a s y n c h r o n i c z n a , 8 b i t o w
// danych , 1 b i t s t o p u ,
// b r a k p a r z y s t o s c i
UCSRB=(1<<RXCIE)|(1 < <TXEN)|(1 < <RXEN) ; // uruchom p r z e r w a n i e na o d b i o r o r a z
// uruchom nadawanie i o d b i o r
}
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / FUNKCJE PROGRAMU / / / / / / / / / / / / / / / / / / / / / / / / / / /
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
void u p u t c ( char znak ) { // w y s l i j
while ( ! ( UCSRA & (1<<UDRE ) ) ) ;
znak p o p r z e z UART
// z a c z e k a j na z w o l n i e n i e
15
rejestru
// p r z e c h o w u j a c e g o dana do w y s l a n i a
UDR = znak ; // n a d a j znak
while ( ! ( UCSRA & (1<<TXC ) ) ) ; // z a c z e k a j na z a k o n c z e n i e w y s y l a n i a
s b i (UCSRA,TXC ) ; // s k a s u j f l a g e z a k o n c z e n i a w y s y l a n i a
}
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
void u p u t s ( char ∗ wyraz ) { // w y s l i j c i a g znakow p o p r z e z UART
// ( ” \ 0 ” k o n c z y c i a g )
f o r ( ; ∗ wyraz != ’ \0 ’ ; u p u t c ( ∗ wyraz ++)); // w y s y l a j k o l e j n e z n a k i
}
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
void i t o a ( unsigned i n t l i c z b a ) { // w y s l i j l i c z b e z a m i e n i o n a na t e k s t
char s l o w o [ 7 ] ; // p r z e c h o w u j e l i c z b e t e k s t o w o
i n t i ; // l i c z n i k
f o r ( i =5; i >=0; i −−){ // k o n w e r t u j na l i c z b e d z i e s i e t n a
s l o w o [ i ]= l i c z b a %10+0x30 ;
l i c z b a /=10;
}
s l o w o [ 6 ] = ’ \0 ’ ; // z a k o n c z c i a g znakiem ’ \ 0 ’
uputs ( slowo ) ;
//
wyslij
tekst
p o p r z e z UART
}
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
void z a t r z y m a j s i l n i k i ( ) { // f u n k c j a powoduje z a t r z y m a n i e
OCR1A=STOP SILNIKA ; // z a t r z y m a n i e s i l n i k o w l e w y c h
OCR1B=STOP SILNIKA ; // z a t r z y m a n i e s i l n i k o w prawych
}
silnikow
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
u s t a w i e n i e ) { // f u n k c j a z a p a l a o d p o w i e d n i e
// d i o d y na PC0−PC5 , PA6 , PA7
PORTC=( u s t a w i e n i e &0x3F ) | (PORTC&0xC0 ) ;
PORTA=( u s t a w i e n i e &0xC0 ) | (PORTA&0x3F ) ;
void z a d a j o s w i e t l e n i e ( u i n t 8 t
}
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
uint8 t sterowanie (){
#i f n d e f DEBUG
s t a t i c u i n t 8 t n r p a k i e t u =0; // l i c z n i k otrzymanych p a k i e t o w
s t a t i c u i n t 8 t s t e r o w a n i a [ ILOSC PAKIETOW ] ; // t a b l i c a p r z e c h o w u j a c a
// s t e r o w a n i a
#e n d i f
#i f d e f DEBUG
static uint8 t
#e n d i f
d i o d y =0; // zmienna
okreslajaca
ktore
diody
zapalic
i f ( flaga UART ) { // j e s l i j e s t wiadomosc o d e b r a n a . . .
flaga UART =0; // w y z e r u j f l a g e w i a d o m o s c i
k o m u n i k a c j a =0; // w y z e r u j z n a c z n i k p r z e r w y w t r a n s m i s j i
#i f n d e f DEBUG // s t e r o w a n i e p o p r z e z program
s t e r o w a n i a [ n r p a k i e t u ]=komenda UART ; // z a p i s z wiadomosc do
// o d p o w i e d n i e g o p o l a t a b l i c y
i f ( n r p a k i e t u >=(ILOSC PAKIETOW−1)){ // j e s l i otrzymano w s z y s t k i e
// p r z e w i d z i a n e p a k i e t y
n r p a k i e t u =0; // w y z e r u j l i c z n i k p a k i e t o w
i f ( s t e r o w a n i a [ 0 ] ! =PREAMBULA) { // sprawdz c z y preambula j e s t
return 1 ; // j e s l i n i e z w r o c b l a d
} else {
i f ( s t o p %2){ // sprawdz c z y mozna z m i e n i a c s t e r o w a n i e napedow
OCR1A=STOP SILNIKA+( s t e r o w a n i a [ 1 ] − 1 2 7 ) ; // s t e r u j lewym
// s i l n i k i e m
OCR1B=STOP SILNIKA−( s t e r o w a n i a [ 2 ] − 1 2 7 ) ; // s t e r u j prawym
// s i l n i k i e m
}
z a d a j o s w i e t l e n i e ( s t e r o w a n i a [ 3 ] ) ; // z a p a l o d p o w i e d n i e d i o d y
}
} else {
n r p a k i e t u ++; // p r z y g o t u j s i e na n a d e j s c i e k o l e j n e g o p a k i e t u
}
#e n d i f
#i f d e f DEBUG
16
// s t e r o w a n i e p o p r z e z t e r m i n a l
i f ( ( komenda UART== ’ a ’ )&&( s t o p %2))
OCR1A+=1; // l e w e s i l n i k s z y b c i e j
e l s e i f ( ( komenda UART== ’ z ’ )&&( s t o p %2))
OCR1A−=1; // l e w e s i l n i k i w o l n i e j
e l s e i f ( ( komenda UART== ’ s ’ )&&( s t o p %2))
OCR1B+=1; // prawe s i l n i k i s z y b c i e j
e l s e i f ( ( komenda UART== ’ x ’ )&&( s t o p %2))
OCR1B−=1; // prawe s i l n i k i w o l n i e j
e l s e i f ( komenda UART== ’ d ’ )
d i o d y +=1; // z w i e k s z maske z a p a l a n i a d i o d
e l s e i f ( komenda UART== ’ c ’ )
d i o d y −=1; // z m n i e j s z maske z a p a l a n i a d i o d s
z a d a j o s w i e t l e n i e ( diody ) ;
i t o a (OCR1A ) ; // w y s w i e t l
uputs ( ” ” ) ;
i t o a (OCR1B ) ;
uputs ( ” ” ) ;
i t o a ( diody ) ;
uputs ( ” ” ) ;
i t o a ( PINB ) ;
u p u t s ( ” \n\ r ” ) ;
#e n d i f
// z a p a l
odpowiednie diody
informacje o robocie
}
return 0 ;
}
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
int
p r z e r w a t r a n s m i s j i ( ) { // f u n k c j a s p ra w d za c z y n i e n a s t a p i l o p r z e r w a n i e
// k o m u n i k a c j i na o k r e s d l u z s z y n i z 1 −1 ,5 sekundy
// ( z a l e z n i e momentu w y s t a p i e n i a p r z e r w a n i a )
i f ( k o m u ni k a c j a >=2){ // n a s t a p i l a p r z e r w a w t r a n s m i s j i , w c i a g u o s t a t n i c h
// dwoch p r z e r w a n RTC n i e otrzymano komunikatu p o p r z e z
// UART
zatrzymaj silniki ();
c b i (PORTB, 2 ) ; // z a p a l d i o d e b l e d u t r a n s m i s j i
return 1 ; // w y s t a p i l b l a d
} else {
s b i (PORTB, 2 ) ; // z g a s d i o d e b l e d u t r a n s m i s j i , t r a n s m i s j a d z i a l a
return 0 ; // b r a k bledow
}
}
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
void naped ( ) { // o b s l u g a p r z y c i s k u o r a z d i o d y z a t r z y m a n i a napedu
i f ( ! ( PINB&0x01 ) ) { // j e s l i n a c i s n i e t o p r z y c i s k z a t r z y m a n i a napedu
s t o p ++; // z w i e k s z zmienna o d p o w i e d z i a l n a z a d e c y z j e o z a t r z y m a n i u
z a t r z y m a j s i l n i k i ( ) ; // z a t r z y m a j s i l n i k i
s b i (PORTB, 1 ) ; // z a p a l d i o d e z a t r z y m a n i a
d e l a y m s ( 3 0 0 ) ; // o d c z e k a j na u s t a n i e d r g a n p r z y c i s k u
}
i f ( s t o p %2){ // j e s l i p r z y c i s k n a c i s n i e t o p a r z y s t a
// ( s t o p s t a r t u j e od 1 )
c b i (PORTB, 1 ) ; // z a p a l d i o d e r u c h u s i l n i k o w
}
liczbe
razy
}
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / MAIN / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
// / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
i n t main ( ) {
/∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗∗ Zrodlem k a z d e g o d z i a l a n i a j e s t mysl . ∗∗
∗∗
Ralph Waldo Emerson ∗∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗/
uint8 t
a w a r i a = 0 ; // zmienna i n f o r m u j e o w y s t a p i e n i u
ustawPORTY ( ) ;
// ustaw p o r t y
ustawUSART ( ) ;
// uruchom k o m u n i k a c j e p r o t o k o l e m UART
sei ();
bezpiecznie
// uruchom p r z e r w a n i a
ustawTIM1 ( ) ;
// uruchom k o n t r o l e
silnikow
17
awarii
zatrzymaj silniki ();
ustawTIM2 ( ) ;
// ustaw z a t r z y m a n i e
// ustaw z e g a r
czasu
silnikow
( wykona s i e po s e i ( ) )
r z e c z y w i s t e g o RTC
u p u t s ( ”= Szymon B i g o s , 1 4 6 0 2 9 @ s tu d e nt . pwr . wroc . p l =\n\ r ” ) ;
u p u t s ( ”= A r t u r Z o l i c h , a r t u r . z o l i c h @ g m a i l . com =====\n\ r ” ) ;
u p u t s ( ” \n\ r =================== ENLIL =================\n\ r ” ) ;
u p u t s ( ”= RESTART ==================================\n\ r ” ) ;
// komunikat p o w i t a l n y
while ( 1 ) {
a w a r i a = p r z e r w a t r a n s m i s j i ( ) ; // sprawdz poprawnosc
// p r z e c i w d z i a l a j ew . bledom
transmisji
awaria = sterowanie ( ) ;
naped ( ) ;
// sprawdź c z y naped powinen z o s t a c zatrzymany
// ( p r z y c i s k ” naped ” )
#i f d e f DEBUG
i f ( a w a r i a ) { // z g l o s a w a r i e
zatrzymaj silniki ();
c b i (PORTB, 2 ) ; // z a p a l d i o d e b l e d u
} else {
s b i (PORTB, 2 ) ;
}
// u p u t s ( ” \ n\ r ! ! ! AWARIA ! ! ! \ n\ r ” ) ;
#e n d i f
}
}
18
transmisji
ENLIL - schemat
VDD
VDD
3
4
1
2
GF1
S2
2
1
R1
D2
4,7k
JP10
JP3
JP4
JP5
JP6
JP7
1
2
1
2
1
2
1
2
1
2
1
2
JP11
JP12
JP13
JP14
JP15
JP16
1
1
1
1
1
1
C14
100nF
GND
100nF
JP1
VDD
C10
MOSI
MOSI VTG
VTG
GND
GND
GNDGND1
GND@1
GND RST
RST GND2
GND@2
SCK
SCK GND3
GND@3
MISO
MISOGND4
GND@4
VCC
10uH
100nF
C3
(SCK)PB7
(MISO)PB6
(MOSI)PB5
(SS)PB4
(AIN1/OC0)PB3
(AIN0/INT2)PB2
(T1)PB1
(T0/XCK)PB0
3
2
1
44
43
42
41
40
18
6
39
GND
(TOSC2)PC7
(TOSC1)PC6
(TDI)PC5
(TDO)PC4
(TMS)PC3
(TCK)PC2
PC1(SDA)
PC0(SCL)
GND
(OC2)PD7
(ICP)PD6
(OC1A)PD5
(OC1B)PD4
(INT1)PD3
(INT0)PD2
(TXD)PD1
(RXD)PD0
32768Hz
26 Q2
1
2
3
4
5
IC3
SV5 1
25
24
23
22
21
20
19
16
15
14
13
12
11
10
9
2
3
4
5
6
7
8
9
I1
O1
I2
O2
I3
O3
I4
O4
I5
O5
I6
O6
I7
O7
I8
O8
GND CD+
18
17
16
15
14
13
12
11
10
R10
R11
R12
R13
R14
R16
R15
R17
VDD
JP27
1
2
3
4
5
6
7
8
1
JP26
1
JP25
1
JP24
1
JP22
1
SV4
JP23
GND
1
1uF
C13
MEGA16-A
GND
+
IC5
LM2937
JP8
GND15
ZASILANIE-1
IC2G$1
C5
3
1uF
C1+
C2+
5
C2-
1uF
11
10
12
9
V+
2
V-
6
C1-
4
C6
GND
T1IN
T1OUT
T2IN
T2OUT
R1OUT R1IN
R2OUT R2IN
MAX232_SO16
ZASILANIE-2
1
2
4
C16
0.47uF
VI
VO
GND
GND
JP21
14
7
13
8
1
3
1
2
3
VDD
3
+
16VCC
IC2P
VDD
1
1
2
17
5
38
1
2
GND
2
L2
1
2
AREF
AVCC
AGND
1
2
10nF
100nF
VDD
1
2
C4
XTAL1
29
27
28
1
2
C8
XTAL2
8
1uF 1uF
GND
30
31
32
33
34
35
36
37
C9 C11
L1
7
(ADC7)PA7
(ADC6)PA6
(ADC5)PA5
(ADC4)PA4
(ADC3)PA3
(ADC2)PA2
(ADC1)PA1
(ADC0)PA0
RESET
JP28 JP20 JP19 JP18 JP17 JP9
C2 C1
VDD
10uH
27pF27pF
Q1
16MHz
IC4
4
C15
22uF
ENLIL - plyta glowna, spod
3
1C
Fp72
2D
2S
1FG
1
4
2
1R
k7,F4n001
1 PJ 0 1 C
5
1
I
AG
61
A-
9C
EM
4C
6C
32PJ JP9
22PJ JP17
42PJ JP18
52PJ JP19
62PJ JP20
72PJ JP28
Fu1 Fu1 Fu1
11C
5C
Fn 8 C
01
Fu1
Fu12CI
61OS_232XAM
Hu01
31 C
1 2 PJ
1L
2Q
z H86723
4C 1
00
3CI
Fu74.0
61 C
7392ML
Fn
8 PJ
5CI
Fn001
Hu03
1C
2
41 C
Fn001
2L
1
EIN A LI S AZ
01P1J1PJ
3P2J1PJ
4P3J1PJ
5P4J1PJ
6P5J1PJ
7P6J1PJ
Fp72
2 C 1Q
zHM61
5VS
8
4VS
1
51 C
11R
01R
21R
31R
41R
61R
51R
71R
Fu22
16MHz
1
S2
1
2
IC5
8
R17
R15
R16
R14
R13
C15
R12
R11
R10
1
C16
SV4
0.47uF
IC3
A
10uH
C14
100nF
22uF
LM2937
ZASILANIE
6-
Q2
A1
C 8 nF
10
EG
L1
JP8
JP21
M
9PJ JP23
71PJ JP22
81PJ JP24
91PJ JP25
02PJ JP26
82PJ JP27
JP11
JP10
JP12
JP3
JP13
JP4
JP14
JP5
JP15
JP6
JP16
JP7
32768Hz
C
10 4
0n
F
C6
C9
1
4
MAX232_SO16
C5
IC21uF
IC
1uF 1uF 1uF
1uF
C11
SV5
L2
C13
100nF
C310uH
27pF
Q1 C2
4
R1
4,7k
100nF
JP1
C10
5
Artur Zolich
Szymon Bigos
"ENLIL"
2
C1
27pF
D2
GF1
3
ENLIL - plyta glowna, gora
2.7.1
Filtracja napięcia
Napięcie podawane na podzespoły robota zostało przefiltrowane. Zastosowano kondensatory zgodnie z notą katalogową stabilizatora [7]. Diody Zenera
5V5 zastosowano w miejscu podłączenia silników, likwidują one tzw. „szpilki” powstające w czasie zmiany ruchu, powodujące zawieszanie się układu
sterującego. Mikrokontroler został zabezpieczony przez filtry LC pomiędzy
zasilaniem a masą. Złącze AREF, oraz wyprowadzenia kwarcu podłączono
poprzez kondensatory z masą. Zastosowano układ stabilizacji przycisku reset składający się z rezystora podciągającego, diody w kierunku zaporowym
(zabezpieczenie przed ESD) oraz kondensatora zwierającego moduł z masą.
Układy scalone posiadają kondensatory filtrujące pomiędzy nóżką zasilającą
oraz masy. Ścieżka napięcia 5V prowadzona do silników oraz diod została rozdzielona od ścieżki zasilania układów scalonych blisko stabilizatora. Wszystkie wolne przestrzenie, które na to pozwalały otoczono polem masy, również
pole pod mikrokontrolerem.
3
Podsumowanie
Podsumowując obecny stan rzeczy, wszystkie założone funkcje robota są aktywne. Nastąpiło wprawdzie pewne przesunięcie postępu prac w stosunku
do harmonogramu przedstawionego na początku semestru, jednakże jedyną
czynnością jakiej wymaga robot na chwilę obecną jest umieszczenie całości w
obudowie. Przesunięcie czasowe ram projektu spowodowane było próbą stworzenia sterownika opartego o programowo generowany sygnał PWM dla wielu
kanałów. Przez wzgląd na utrudniony dostęp do oscyloskopu, pomimo stosunkowo dobrego działania systemu idee zarzucono. Zdjęcie przedstawiające
robota w obudowie (bez wyprowadzonych przycisków oraz diod) przedstawiono poniżej.
Rysunek 12: Robot – stan na 7 czerwca 2009.
22
Literatura
[1] www.are.net.pl
[2] modele.sklep.pl
[3] www.sruby.com.pl
[4] http://zefiryn.tme.pl/dok/a06/tpower.pdf
[5] http://www.macrogroup.ru/content/data/store/images/f 668 2693 1.pdf
[6] http://www.atmel.com/dyn/resources/prod documents/doc2466.pdf
[7] www.national.com/pf/LM/LM2940.html
23