Układ sterujący pracą kończyn robota

Tytułem wstępu

   Układ ten został zaprojektowany z myślą, że będzi on sterował pracą kończyn robota. Czyli odpowiednie sterowanie nogami, odczytywanie stanu czujników zamocowanych na końcach nóg. Układ ma posiadać algorytmy dzięki, którym robot będzi się poruszał prosto do przodu, stał, skręcał, cofał itp. To, który algorytm jest aktualnie wykonywany ma być wybierane przez płyte sterującą (będzie opisana w innym artykule)


Ogólna budowa płyty

   Płyta sterownika oczywiście została wyposażona w mikrokontroler. Został użyty mikrkontroler AVR, w standardowej obudowie DIP40. Do tego została dołączona zewnętrzna statyczna pamięć RAM o pojemności 32kB. jako interfejy wyjściowe zostały użyte standardowe układy zatrzasków 74HCT573, a wejściowe bufory 74HCT541. Schemat blokowy całej płyty sterownika został przedstawiony na rysunku poniżej

[Rozmiar: 41108 bajtów]


Układ zasilania

   Cały układ, łącznie z układami wyjściowymi (silnikami) jest zasilany z akumulatora. Do zasilania układu możliwe jest zastosowanie dowolnego akumulatora (czy baterii) spełniającego następujące kryteria:
- napięcie wyjściowe 6V
- wydajność prądowa min 3A
Może również zostać użyty stabilizowany zasilacz sieciowy spełniający wymagania tak jak powyżej. W projekcie został użyty akumulator żelowy (4.5Ah) zapewniający stabilną pracę robota przez wystarczający czas. Układy wyjściowe (serwomechanizmy) zostały podłączone bezpośrednio do napięcia zasilającego cały układ czyli 6V. Natomiast cały układ sterownika, wszystkie układy scalone są zasilane przez dodatkowy stabilizator utrzymujący napięcie 5V.

[Rozmiar: 20686 bajtów]


Mikrokontroler i pamięć

   W projekcie został użyty mikrokontroler 8-bitowy oraz statyczna pamięć RAM o pojemności 32kB. W celu uzyskania 16-bitowej magistrali adresowej został użyty dodatkowy zatrzask.

[Rozmiar: 67576 bajtów]

Mikrokontroler używa dwóch portów 8-bitowych do utworzenia magistrali adresowej. Jeden z portów (młodszy bajt adresu) jest używany na zmianę z 8-bitową magistralą danych. Mikrokontroler wystawia adres na obydwa porty (PA, PC), młodszy bajt adresu zostaje zatrzaśnięty a następnie na tym porcie zostają wystawione dane. Kiedy wszystko jest gotowe, zostaje uaktywniony sygnał zapisu lub odczytu z pamięci (WR, RD).


Dekoder adresu

Dekoder adresu w projekcie został zaprojektowany do załączania 4 urządzeń zewnętrznych oraz pamięci. za pomocą 16-bitowej magistrali adresowej można zaadresować 65536 komórek. W projekcie pamięć została zorganizowana następująco:
0000h – 7FFFh – zewnętrzna pamięć RAM
8000h – 9FFFFh – Wy1
A000h – BFFFh – Wy2
C000h – DFFFh – Wy3
E000h – FFFFh – We/Wy 4
Jak widać 64kB przestrzeni adresowej zostały podzielone na 2 równe części. Pierwsza połowa została zarezerwowana na pamięć a druga na urządzenie We/Wy. Jak widać na rys7 zostało to zrobione za pomocą najstarszej linii adresowej. Została ona bezpośrednio podpięta do wejścia CE (Chip Enable) pamięci oraz przez negator do demultipleksera. Ponieważ sygnał CE w pamięci jak i sygnał OE w multiplekserze są aktywne stanem niskim pamięć będzie aktywna gdy 15 linii adresowej będzie stan niski, natomiast demultiplekser (załączający odpowiednie urządzenie we/wy) będzie aktywny (będzie miał na wybranym przez linie 14 i 13 wyjściu stan aktywny (niski)) gdy na linii 15 będzie stan wysoki.

[Rozmiar: 37524 bajtów]

Głównym elementem bloku dekodera starszej połówki przestrzeni adresowej jest 4-bitowy demultiplekser. Gdy na jego wejściu OE jest stan wysoki na wszystkich jego wyjściach jest stan wysoki. Natomiast gdy na tym wejściu pojawia się stan niski na wybranym przez wejścia A i B (nr wyjścia w naturalnym kodzie binarnym) wyjściu pojawia się stan niski. Wyjścia te są jeszcze sumowane ( negowane ) bramką NOR z wyjściem RW mikrokontrolera. Bramki zostały zastosowane, gdyż adres pojawia się na magistrali adresowej już na samym początku cyklu magistralowego (gdy na magistrali danych jest jeszcze młodsza połówka adresu) i w tym momencie dane z magistrali danych nie mogą zostać przepisane na wyjście (urządzenie nie może zostać załączone) a demultiplekser już został załączony. Dzięki bramkom na danym wyjściu jest cały czas stan niski a w momencie gdy mikrokontroler aktywuje wyjście WR (stan niski), na czas trwania impulsu WR na wybranym wyjściu dekodera pojawi się stan wysoki i dane zostaną przepisane z wejścia zatrzasku na wyjście. Po zaniku impulsu WR dane zostaną zatrzaśnięte na wyjściu.


Wejście/Wyjście

Do przestrzeni adresowej mikrokontrolera zostały podłączone 4 komórki we/wy (każda 8-bitowa) pod adresami, które zostały dokładniej omówione w poprzednim rozdziale. 3 komórki są przeznaczone tylko jako wyjścia a jedna jako we/wy. Układ ma sterować dwunastoma serwomechanizmami, z których każdy jest sterowany jedną linią. Wynika stad, że wystarczyłoby 12 wyjść czyli 2 komórki wyjściowe. Dodatkowe, trzecie wyjście zostało zaprojektowane w celach rozwojowych. Natomiast 4 komórka (we/wy) została zaprojektowana do podłączenia czujników zamontowanych na nogach robota. Zostanie ona dokładniej omówiona w dalszej części rozdziału.

[Rozmiar: 172109 bajtów]

Do utworzenia buforów wyjściowych zostały użyte standardowe zatrzaski 8-bitowe. Ich wejścia są podłączone do magistrali danych. Natomiast wejścia aktywujące są podłączone do odpowiednich wyjść dekodera adresu. W momencie gdy ustawiony jest odpowiedni adres (omówiony dokładniej w rozdziale dotyczącym dekodera adresu) oraz mikrokontroler wystawi impuls WR, na wybranym przez dekoder adresu zatrzasku zostaną przepisane dane z magistrali danych na jego wyjście i w momencie zakończenia impulsu WR dane zostaną zatrzaśnięte. Opis tego mechanizmu został omówiony w rozdziale dotyczącym dekodera adresu. Czwarta komórka została zaprojektowana tak, aby możliwe było czytanie oraz zapis do tej komórki. Dodatkowo w do tej komórki został dodany mechanizm generujący przerwanie w momencie, gdy nastąpi jakakolwiek zmiana w tej komórce.

[Rozmiar: 30252 bajtów]

Standardowo komórka ta jest używana jako komórka wejściowa, gdyż została zaprojektowana do podłączenia czujników. Zostało to utworzone za pomocą standardowego bufora 8-bitowego. Bufora ten posiada 2 wejście sterujące. Działają one jak bramka AND z zanegowanymi wejściami, więc aby dane były przepisane na wyjście należy podać impuls aktywny (stan niski) na obydwa wejścia. Zostało to w pełni wykorzystane. Do jednego z wejść został podłączony sygnał RD mikrokontrolera a do drugiego odpowiednie wyjście multipleksera. Stad bufor „połączy” swoje wejście (czujniki) z magistralą danych w momencie gdy jest wystawiony odpowiedni adres (opis w rozdziale dotyczącym dekodera adresu) oraz uaktywni impuls RD. W przeciwnym wypadku wyjścia bufora są w stanie wysokiej impedancji (tzw. trzeci stan). Do wejścia bufora są podłączone gniazda na czujniki, które są podłączone do zasilania przez rezystory tzw. „podciągające”. Dzięki temu w momencie gdy do gniazd nie jest nic podłączone można odczytać stamtąd stan wysoki. Do wygenerowania przerwania został wykorzystany komparator 8-bitowy. Porównuje on stan dwóch wejść 8-bitowych. Gdy wejścia są równe na wyjściu jest stan niski, natomiast gdy są różne wyjście zmienia stan na wysoki. Do jednego z wejść komparatora zostały podpięte gniazda czujników a do drugiego został podłączony zatrzask do którego można zapisywać pod tym samym adresem co odczytywać z czwartej komórki. Układ zatrzasku został zbudowany tak samo jak poprzednie trzy komórki wyjściowe. Wyjście komparatora zostało podłączone przez negator do końcówki Int1 mikrokontrolera (przerwanie zewnętrzne) dzięki temu odpowiednio implementując program układ może wywoływać przerwanie zewnętrzne mikrokontrolera przy każdej zmianie stanu czujników. Do tego właśnie została dodana możliwość zapisu do tej komórki ale tak w rzeczywistości zapis nie odbywa się do czujników lecz do komparatora. Więc jeśli wystąpi przerwanie należy sczytać stan czujników a następnie ustawić ten stan na drugim wejściu komparatora, żeby możliwe było wykrycie następnej zmiany stanu czujników.