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