Professional Documents
Culture Documents
M.Krysztofiak Pdi
M.Krysztofiak Pdi
M.Krysztofiak Pdi
Politechnika Warszawska
Wydział Elektroniki i Technik Informacyjnych
Instytut Informatyki
Maciej Krysztofiak
Opiekun pracy
Dr inż. Kamil Kompa
Ocena: ...................................................
..............................................................
Podpis Przewodniczącego
Komisji Egzaminu Dyplomowego
Kierunek: Informatyka
Życiorys
Urodziłem się 6 marca 1991 r. w Płocku. Tam też uczęszczałem do Szkoły Podstawowej
nr 10 i nr 3, a następnie do Gimnazjum nr 8. W 2010 r. zakończyłem naukę w Liceum
Ogólnokształcącym im. Marszałka Stanisława Małachowskiego w Płocku - jednej z
najstarszych szkół w Polsce.
Po zdaniu matury rozpocząłem studia na Wydziale Elektroniki i Technik
Informacyjnych Politechniki Warszawskiej na kierunku Informatyka.
Interesuję się elektroniką i robotyką. Poza tym do kręgu moich zainteresowań należy
turystyka piesza oraz kolarstwo.
......................................................
Podpis studenta
EGZAMIN DYPLOMOWY
z wynikiem ..............................................................................................................................
.................................................................................................................................................
.................................................................................................................................................
STRESZCZENIE
Streszczenie pracy w języku polskim.
Celem projektu jest budowa mobilnego robota autonomicznego, który będzie podążał trasą
wyznaczoną za pomocą linii. Stąd wzięła się oficjalna nazwa konkurencji - Line Follower.
Budowa robota tego typu łączy w sobie potrzebę zbudowania konstrukcji mechanicznej,
zaprojektowania elektronicznego układu sterowania oraz napisania oprogramowania
sterującego. Robot musi spełniać wymagania regulaminowe amatorskich konkursów
robotycznych. Ostatecznym celem konstrukcji jest zaprezentowanie jej na zawodach oraz
osiągnięcie jak najwyższego miejsca w danej kategorii.
The purpose of this project is construction of an autonomous mobile robot which will follow
the line. That is where official name of competition came from (Line Follower). Construction
of robot of such type requires building mechanical structure, designing electronic control
system and developing control software. Robot has to fulfill requirements imposed by
regulations of amateur robotic contests. The final goal of this project is to take part in amateur
robotic contest and achieve the highest score possible.
3 Analiza wymagań 9
3.1 Wykrywanie linii . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.1.1 Kamera . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.1.2 Czujniki odbiciowe . . . . . . . . . . . . . . . . . . . . 10
3.2 Wprowadzanie nastaw . . . . . . . . . . . . . . . . . . . . . . 11
3.2.1 Złącze programowania . . . . . . . . . . . . . . . . . . 11
3.2.2 Moduł bezprzewodowy na płytce . . . . . . . . . . . . 11
3.2.3 Wyświetlacz na płytce głównej . . . . . . . . . . . . . 12
3.2.4 Wyświetlacz jako osobny moduł . . . . . . . . . . . . 12
3.3 Uruchamianie robota . . . . . . . . . . . . . . . . . . . . . . . 12
3.3.1 Przycisk . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.3.2 Radio modelarskie . . . . . . . . . . . . . . . . . . . . 13
3.3.3 Moduł radiowy 315MHz . . . . . . . . . . . . . . . . . 13
3.3.4 Odbiornik podczerwieni . . . . . . . . . . . . . . . . . 13
3.4 Sterowanie silnikami . . . . . . . . . . . . . . . . . . . . . . . 14
3.5 Zasilanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.6 Pomiar napięcia źródła zasilania . . . . . . . . . . . . . . . . 14
3.7 Złącze serwisowe . . . . . . . . . . . . . . . . . . . . . . . . . 14
4 Konstrukcja mechaniczna 14
5 Wybór podzespołów 15
5.1 Czujniki odbiciowe . . . . . . . . . . . . . . . . . . . . . . . . 15
5.2 Napęd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.3 Mostek H . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.4 Odbiornik podczerwieni . . . . . . . . . . . . . . . . . . . . . 18
5.5 Wyświetlacz LCD . . . . . . . . . . . . . . . . . . . . . . . . 18
5.6 Mikrokontroler . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.7 Akumulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.8 Stabilizator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5
6 Schemat części elektronicznej 21
6.1 Listwa z czujnikami . . . . . . . . . . . . . . . . . . . . . . . . 21
6.2 Płytka główna . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.2.1 Podłączenie czujników . . . . . . . . . . . . . . . . . . 24
6.2.2 Mostek H . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.2.3 Odbiornik podczerwieni . . . . . . . . . . . . . . . . . 26
6.2.4 Mikrokontroler . . . . . . . . . . . . . . . . . . . . . . 27
6.2.5 Złącze LCD . . . . . . . . . . . . . . . . . . . . . . . . 29
6.2.6 Diody LED . . . . . . . . . . . . . . . . . . . . . . . . 29
6.2.7 Zasilanie . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.3 Moduł LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
8 Oprogramowanie 35
8.1 Timery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
8.2 Odczyt stanu czujników . . . . . . . . . . . . . . . . . . . . . 40
8.3 Wyświetlacz LCD . . . . . . . . . . . . . . . . . . . . . . . . 42
8.3.1 Budowa menu . . . . . . . . . . . . . . . . . . . . . . . 43
8.4 Interfejs UART . . . . . . . . . . . . . . . . . . . . . . . . . . 44
8.5 Odbiornik podczerwieni . . . . . . . . . . . . . . . . . . . . . 44
8.6 Algorytm sterowania . . . . . . . . . . . . . . . . . . . . . . . 46
9 Podsumowanie 48
9.1 Wynik projektu . . . . . . . . . . . . . . . . . . . . . . . . . . 48
9.2 Możliwości rozwoju . . . . . . . . . . . . . . . . . . . . . . . . 48
10 Załączniki 49
Spis rysunków 50
Spis tablic 51
Bibliografia 52
6
1 Wstęp
1.1 Wprowadzenie
Wyścigi pojazdów towarzyszą człowiekowi od zarania dziejów. Już w
starożytnej Grecji popularne były wyścigi rydwanów. Wraz z biegiem czasu
i wzrostem możliwości technicznych powstawały kolejne konstrukcje. 28
kwietnia 1887 roku odbył się pierwszy wyścig samochodowy.1 Od tego mo-
mentu lista różnych konkurencji w których celem jest przejechanie wyznaczo-
nej trasy w jak najkrótszym czasie wzrosła dramatycznie. Postęp technolo-
giczny umożliwił zmniejszenie masy pojazdów, zastosowanie wydajniejszych
napędów, zwiększenie bezpieczeństwa kierowcy w razie wypadków oraz prze-
rzucenie części obowiązków z kierowcy do systemu sterującego w pojeździe.
Przykładem takiego rozwiązania jest np. system ABS. Wraz z nadejściem
czasów najnowszych zaczęto budować konstrukcje autonomiczne w których
człowiek nie jest potrzebny do sterowania pojazdem. Nie inaczej niż w przy-
padku wcześniejszych konstrukcji powstały konkurencje których celem jest
zbudowanie pojazdu, który bez pomocy człowieka pokona trasę w jak naj-
krótszym czasie. Dzisiaj zawody robotów autonomicznych stały się bardzo
popularne. Organizowane jest wiele konkursów o skali krajowej jak i mię-
dzynarodowej. Ilość konkurencji w których konstruktorzy mogą rywalizować
cały czas się powiększa.
7
Zazwyczaj konstruktorzy mogą startować w dwóch klasach:
• amatorskiej
• profesjonalnej
• Kwalifikacyjną
• Finałową
Podczas każdej z rund używana jest inna trasa. Dodatkowo dostępna jest
trasa testowa do której dostęp podczas trwania konkursu jest nieograniczony.
Podczas rundy kwalifikacyjnej wyznaczona część robotów zostaje zakwa-
lifikowana do rundy finałowej na podstawie najkrótszych czasów przejazdu.
Liczba dozwolonych przejazdów eliminacyjnych różni się w zależności od
organizatora. Za ostateczny wynik uważa się czas najkrótszego przejazdu.
Runda finałowa zazwyczaj odbywa się na tych samych zasadach co kwa-
lifikacje. W niektórych konkursach liczba dozwolonych przejazdów podczas
finału zostaje zmniejszona w stosunku do rundy eliminacyjnej.
8
2.2 Specyfikacja robota
• Wymiary robota są ograniczone i zazwyczaj nie mogą przekraczać roz-
miaru kartki formatu A4.
2.3 Trasa
• Sposób wykonania trasy, jej parametry oraz szkic poglądowy powinny
być dostępne dla uczestników przed przystąpieniem do konkursu.
3 Analiza wymagań
3.1 Wykrywanie linii
Podstawową cechą robota typu Line Follower jest wykrywanie linii. Co
prawda w regulaminie nie jest w żaden sposób wyspecyfikowanie, że robot
musi spełniać tę funkcję, jednak trudno sobie wyobrazić aby robot poruszał
się po linii nie mając żadnego mechanizmu jej detekcji.
3.1.1 Kamera
Jednym ze sposobów wykrywania linii może być kamera. Z punktu
widzenia człowieka byłby to najbardziej naturalny mechanizm. Tak jak
podczas jazdy samochodem człowiek kontroluje prędkość biorąc pod uwagę
zbliżający się zakręt, tak samo robot mógłby zastosować ten mechanizm.
Dobrze oświetlona trasa oraz kamera zamocowana pod odpowiednim ką-
tem umożliwiłaby predykcję zakrętów. Wymagałoby to jednak zastosowa-
nia skomplikowanych algorytmów przetwarzania obrazu oraz zastosowania
9
Rysunek 1: Przykładowa trasa z zawodów T-BOT4
10
Rysunek 2: Zasada działania czujnika odbiciowego
Wady:
Wady:
11
– Wyższa cena
– Większa masa robota
– Zwiększony pobór prądu
– Zwiększony rozmiar płytki
Wady:
Wady:
12
3.3.1 Przycisk
Zalety:
• Prostota implementacji
• Cena
Wady:
• Konieczny fizyczny kontakt
13
3.4 Sterowanie silnikami
Ważnym zagadnieniem jest sposób sterowania silnikami. Robot powi-
nien mieć możliwość kontroli kierunku obrotu silników. Dodatkowo stero-
wanie prędkością obrotową każdego z silników niezależnie jest niezbędne do
prawidłowej jazdy po torze. Jednym z najbardziej znanych i wygodnych
mechanizmów kontroli prędkości oborotowej silnika jest kontrola za pomocą
sygnału PWM.
3.5 Zasilanie
Źródło zasilania powinno mieć wystarczającą pojemność by umożliwić
2-3 przejazdy z rzędu. Jego masa nie powinna być jednak zbyt duża co zwięk-
szyłoby bezwładność robota. Trzeba również pamiętać o tym by wydajność
prądowa wystarczyła do zasilenia silników na maksymalnych oborotach oraz
reszty elektroniki.
4 Konstrukcja mechaniczna
Istotną kwestią podczas projektowania konstrukcji mechanicznej jest masa
robota. Powinna być ona jak najmniejsza. Z tego powodu w większości kon-
strukcji płytka głowna jest jednocześnie podwoziem konstrukcji. Czujniki
są wysunięte do przodu w stosunku do płytki głownej. Dodatkowo listwa
z czujnikami ma kształt łuku. Umożliwia to lepsze pokonywanie ostrych
zakrętów. Listwa połączona jest płytką główną za pomocą lekkich listewek
węglowych. Pod listwą z czujnikami znajdują się ślizgacze, które stanowią
przedni punkt podparcia konstrukcji.
14
5 Wybór podzespołów
5.1 Czujniki odbiciowe
Wybierając konkretny czujnik trzeba mieć na uwadze głównie jego roz-
miary, wagę i cenę. Wybrałem czujnik KTIR0711S, który był sprzedawany
w najniższej cenie spośród czujników w obudowie SMD. Był również najła-
twiej dostępny na polskim rynku.
• przetwornik analogowo-cyfrowy
• komparatory analogowe
15
5.2 Napęd
Jednym z najważniejszych elementów robota jest jego napęd. Stoso-
wanie silników spalinowych jest zabronione przez regulamin zawodów więc
konstruktorzy muszą ograniczyć się do silników elektrycznych. Te z kolei
dzielą się na dwie zasadnicze grupy.
• Silniki szczotkowe
• Silniki bezszczotkowe
16
Rysunek 4: Silnik Pololu HP 10:1 wraz z mocowaniem
5.3 Mostek H
Elementem elektronicznym, który pozwala na zmianę kierunku obrotów
silnika oraz sterowanie ich prędkością za pomocą sygnału PWM jest scalony
mostek H. Na rynku możemy znaleźć wiele układów tego typu. Mostek prze-
znaczony do mojego robota musi posiadać conajmniej 2 niezależne kanały.
Dodatkowo wydajność prądowa na kanał musi wystarczyć do wysterowa-
nia wybranych silników. Ostatnim wymaganiem jest dostępność układu w
obudowie SMD.
17
5.4 Odbiornik podczerwieni
Scalone odbiorniki podczerwieni dostępne na polskim rynku nie różnią
się za bardzo między sobą ani parametrami ani ceną. Z tego powodu zde-
cydowałem się zastosować w robocie jeden z najpopularnieszych układów -
TSOP2236. Średni prąd pobierany przez odbiornik wynosi 5mA, natomiast
jego częstotliwość pracy to 36kHz. Z taką częstotliwością nadaje większość
uniwersalnych pilotów telewizyjnych.
• Wyświetlacze graficzne
• Wyświetlacze tekstowe
5.6 Mikrokontroler
Wymagania stawiane przed mikrokontrolerem przestawiają się następu-
jąco:
• Przetwornik ADC
18
4. Sterowanie silnikami
7. Złącze serwisowe
• UART
• Cena.
19
Flash 32KB
SRAM 2KB
EEPROM 1KB
Programowanie JTAG, ISP
Timery 2x8bit, 1x16bit
Kanały PWM 4
ADC 10bit, 8 kanałów
Interfejsy UART, SPI, TWI(I 2 C)
Piny I/O 32
Taktowanie 0-16MHz
Obudowa 44-lead TQFP
5.7 Akumulator
W amatorskich robotach mobilnych jako źródło zasilania wybierany jest
zazwyczaj pakiet Litowo-Polimerowy. Charakteryzuje się on dobrą pojem-
nością w stosunku do wagi oraz dużym maksymalnym prądem rozładowania.
Napięcie znamionowe pojedyńczego ogniwa wynosi 3,7V. W konstrukcji ro-
bota typu Line Follower pakiet zasilający powieniem posiadać co najmniej
dwa ogniwa, co oznacza że jego napięcie zasilania będzie wynosić 7,4V. Ta-
kie napięcie umożliwi zasilenie elektroniki poprzez stabilizator oraz silników
bezpośrednio z pakietu. Na rynku dostępnych jest wiele pakietów o różnych
pojemnościach.
Wybrany został pakiet Dualsky o pojemności 250mAh. Jego maksy-
malny ciągły prąd rozładowywania wynosi 5A, a waga 18g. Zakładając
maksymalny ciągły pobór prądu przez silniki na poziomie 2A oraz reszty
elektroniki na poziomie 0,5A, pakiet ten wystarczy na około 10 minut jazdy.
Jest to wartość wystarczająca do wykonania 2-3 przejazdów. Ten pakiet to
rozsądny kompromis pomiędzy pojemnością, a masą.
20
5.8 Stabilizator
Napięcie występujące na pakiecie zasilającym jest zbyt wysokie i nie-
stabilne by zasilać inne podzespoły elektroniczne bezpośrednio z pakietu.
Z tego powodu konieczne staje się zastosowanie układu stabilizatora. Inną
możliwością byłoby zastosowanie przetwornicy step-down. W stosunku do
stabilizatora liniowego posiada lepszą sprawność, jednak jej koszt jest znacz-
nie wyższy i wymaga większej ilości elementów pasywnych. Wybrany został
popularny stabilizator liniowy low-dropout LM1117MP-5V. Maksymalny
prąd na wyjściu stabilizatora wynosi 800mA. Jest to wartość w zupełno-
ści wystarczająca do zasilania pozostałej elektroniki.
21
Rysunek 8: Schemat podłączenia czujnika KTIR0711S
22
Rysunek 10: Schemat listwy z czujnikami
23
6.2 Płytka główna
6.2.1 Podłączenie czujników
Stan czujników będzie odczytywany za pomocą wbudowanego przetwor-
nika analogowo-cyfrowego. Niestety w wybranym mikrokontrolerze dostęp-
nych jest jedynie 8 kanałów, których ilość jest niewystarczająca do ob-
sługi wszystkich czujników i pomiaru napięcia zasilania. Z tego powodu
konieczne okazało się zastosowanie multiplekserów analogowych. Zdecydo-
wałem się na wykorzystanie dwóch podwójnych 4-kanałowych multiplekse-
rów 74HC4052D. Pozwoli to na odczyt stanu czujników za pomocą jedynie
4 wejść analogowych mikrokontrolera. Wejście 5. zostanie wykorzystane
do pomiaru napięcia zasilania. Reszta zostanie wykorzystana jako wejścia
cyfrowe.
Na każdym wyjściu pojedynczego multipleksera został podłączony rezy-
stor podciągający do napięcia zasilania. Zaletą tego rozwiązania jest to że
zamiast 16. dodatkowych rezystorów na listwie z czujnikami mamy 4 re-
zystory na płytce głównej. Niestety po przełączeniu kanału multipleksera
wystąpi konieczność odczekania chwili czasu tak aby napięcie zdążyło się
ustabilizować. Będzie to konieczne jednak tylko 3 razy podczas odczytu
wszystkich wartości czujników (Zakładając, że po ostatnim odczycie kanały
multiplekserów zostaną przestawione z powrotem do wartości początkowej.
W ten sposób przy kolejnym odczycie napięcia bedą już ustabilizowane.).
Pomiędzy wyjście multipleksera, a masę zostały podłączone kondensa-
tory o pojemności 1nF. Zapewnią one szybkie przeładowanie kondesatora
próbkującego ADC podczas fazy sample. Jednocześnie ich wartość jest na
tyle mała, że czas potrzebny do ich przeładowania po zmianie kanału mul-
tipleksera zewnętrznego nie zwiększy się istotnie.
24
Rysunek 11: Schemat podłączenia czujników za pomocą multiplekserów
74HC4052D
25
6.2.2 Mostek H
Układ sterowania napędem jest bardzo prosty. Silniki zostały podłą-
czone do mostka H, a ten z kolei do mikrokontrolera. Dodatkowo przy
pinach będących wejściem zasilania dla silników oprócz kondensatora filtru-
jącego umieszczony został kondensator magazynujący o pojemności 100µF .
Zapewni on zapas energii potrzebny w przypadku gwałtownej zmiany pręd-
kości obrotowej któregoś z silników.
26
6.2.4 Mikrokontroler
Podstawowy obwód zasilania mikrokontrolera został zaprojektowany zgod-
nie z zaleceniami z noty aplikacyjnej. Na każdą parę nóżek napięcia zasila-
nia i masy przypada kondensator filtrujący 100nF. Dodatkowo na cały układ
przeznaczony jest jeden kondensator magazynujący o pojemności 10µF . Za-
silanie części analogowej zostało podłączone do napięcia zasilania poprzez
cewkę o indukcyjności 10µH i kondensator filtrujący 100nF podłączony do
masy. Wejście napięcia referencyjnego zostało również podłączone przez
kondensator do masy. Jest to sposób zalecany przez producenta, który za-
pewnia najwyższą precyzję odczytu. Częstym błędem jest podłączanie wej-
ścia napięcia referencyjnego do napięcia zasilania. Jeżeli jest taka potrzeba
powinno być jednak wybrane za pomocą wewnętrznego multipleksera. Wej-
ście RESET zostało podciągniete poprzez rezystor do napięcia zasilania.
Dodatkowo na płytce znalazł się przycisk umożliwiający reset układu.
Do wejścia ADC4 podłączony został dzielnik napięciowy który umożliwi
pomiar napięcia zasilania. Wartości obu rezystorów w dzielniku wynoszą
10kΩ. Oznacza to że na wejściu ADC4 pojawi się napięcie dwa razy niższe
niż to na pakiecie. Biorąc pod uwagę, że maksymalne napięcie na aku-
mulatorze może wynieść 8,4V to maksymalne napięcie które pojawi się na
wejściu ADC4 wyniesie 4,2V. Wybierając jako napięcie odniesienia napięcie
zasilania otrzymamy wystarczająca dokładność pomiaru.
Dobierając wartości rezystorów dla dzielnika wziąłem pod uwagę fakt
iż napięcie pochodzące z dzielnika rezystorowego pojawi się na nóżce mi-
krokontrolera wcześniej niż zostanie on zasilony przez układ stabilizatora.
Każdy pin mikrokontrolera jest zabezpieczony dwiema diodami, które w tym
przypadku przepuszczą wpływający prąd do zasilania układu. Będzie on wy-
nosił maksymalnie 420µA. Maksymalny prąd na nożkę mikrokontrolera jest
określony w nocie katalogowej na 40mA.
Linie SCK i E, które są sygnałami zegarowymi zostały podciągnięte przez
rezystor 10kΩ do masy. Zapewni to lepszy kształt sygnału. Oporniki 100Ω
dopasowują impendancję pinu portu do impendancji taśmy połączeniowej.
27
Wyprowadzone zostało również złącze programatora oraz osobne złącze
interfejsu UART.
28
6.2.5 Złącze LCD
Wyprowadzone zostało złącze LCD. Takie samo znajdzie się również na
płytce z modułem LCD. Warto zaznaczyć że linie RS i RW to również wy-
prowadzenia interfejsu TWI. W przyszłości może to umożliwić podłączenie
innego zewnętrznego czujnika podczas jazdy (akcelerometr, żyroskop).
6.2.7 Zasilanie
Blok zasilania nie wymaga komentarza. Jest to standardowy sposób
wykorzystania stabilizatora liniowego.
29
6.3 Moduł LCD
Moduł LCD będzie zasilany ze stabilizatora znajdującego się na płytce
głównej. Oprócz wyświetlacza na płytce znalazły się także 3 przyciski. Bedą
służyły do nawigacji po menu. Sygnał na wyjściu przycisków został podcią-
gnięty do napięcia zasilania poprzez rezystory o wartości 10kΩ. Dodatkowo
zastosowane zostały filtry RC które powinny ograniczyć powstające przepię-
cia.
30
7.1 Listwa z czujnikami
31
7.2 Płytka główna
32
Rysunek 22: Płytka główna - warstwa BOTTOM
33
7.3 Moduł LCD
34
8 Oprogramowanie
Program sterujący robotem został napisany w języku C. Składa się on z
następujących plików źródłowych:
• adc.(h,c)
• defines.h
• functions.(h,c)
• ir decode.(h,c)
• lcd.(h,c)
• main.c
• menu.(h,c)
• pid.(h,c)
• timers.(h,c)
• uart.(h,c)
8.1 Timery
Mikrokontroler ATmega32A posiada 2 timery 8-bitowe (Timer 0, Timer
2) oraz jeden timer 16-bitowy (Timer 1). Liczba sprzętowych kanałów PWM
wynosi 4. Dwa z nich są powiązane z 16-bitowym Timerem 1, natomiast
pozostałe dwa z Timerem 0 i 2.
35
Rysunek 25: Schemat układu Timera 0
36
Przerwania związane z timerami mogą być generowane w przypadku
przepełnienia licznika timera oraz w przypadku wystąpienia zdarzenia typu
Compare Match. Każdy z timerów posiada rejestr OCR którego zawar-
tość jest stale porównywana z wartością licznika. Timer 1 posiada jeszcze
możliwość wygenerowania przerwania w przypadku wystąpienia zdarzenia
typu Input Capture. Aktualna wartość licznika zostaje wtedy zapisana w
rejestrze ICR. Dodatkowo warto nadmienić, że Timer 0 i Timer 1 posia-
dają wspólny układ preskalera, natomist Timer 2 posiada swój oddzielny i
niezależny preskaler. Prescaler Timerów 0 i 1 może być taktowany jedynie
głównym zegarem mikrokontrolera. W przypadku prescalera Timera 2 jest
możliwość taktowania oddzielnym, zewnętrznym sygnałem zegarowym. Jest
to właściwie jedyna różnica między Timerem 0 i 2.
37
Każdy z Timerów posiada cztery podstawowe tryby pracy:
• Normal
• CTC
• Fast PWM
W trybie Fast PWM licznik jest zerowany gdy jego wartość osiągnie
wartość maksymalną. Zdarzenie Compare Match umożliwia zmianę poziomu
sygnału PWM na wyjściu układu. W tym trybie można łatwo zmieniać
współczynnik wypełnienia sygnału przy zachowniu stałej częstotliwości.
Tryb PWM Phase Correct przeznaczony jest do sytuacji kiedy zmiana
wspołczynnika wypełnienia nie powinna zmieniać fazy sygnału. Różni się
tym od trybu Fast PWM, że po osiągnięciu wartości maksymalnej licznik
zaczyna odliczanie w dół.
Tryb PWM Phase and Frequency Correct jest prawie identyczny jak tryb
PWM Phase Correct. Różni się tylko momentem w którym uaktualniony
zostaje rejestr OCR.
Powróćmy do zadań jakie mają realizować Timery w robocie. Jest to
generacja sprzętowego sygnału PWM dla dwóch niezależnych silników. Do-
datkowo niezbędny okaże się timer generujący tik systemowy.
38
Rysunek 30: Tryb Fast PWM - diagram czasowy
39
• void init timers(void)
• motors enable()
• motors disable()
40
Rysunek 32: Schemat bloku konwertera analogowo-cyfrowego
napięć. Czas ten został dobrany empirycznie, tak aby był możliwie najkrót-
szy i jednocześnie umożliwił wystarczające naładowanie kondensatorów. Z
tego powodu szybciej uda się dokonać odczytu czujników w takiej kolejności
niż gdyby chciano to zrobić np. w kolejności rosnącej.
Alogorytm realizujący odczyt stanu czujników przedstawia się następu-
jąco:
1. Zainicjuj konwersję ADC.
41
i zainicjuj konwersję ADC. W przeciwnym wypadku zmień ustawienia
kanałów zewnętrznych multiplekserów, ustaw wewnętrzny multiplek-
ser ADC na kanał 0 i zainicjuj pomiar czasu za pomocą Timera 2.
42
• void lcd init(uint8 t dispAttr) - funkcja inicjalizująca wyświetlacz LCD,
jako argument przyjmuje zmienną która określa sposób wyświetlania
kursora
43
Programowa eliminacja drgań styków przycisków została zrealizowana za
pomocą funkcji debounce(). Funkcja ta próbkuje każdy z przycisków co tik
systemowy. Jeżeli dany przycisk jest wciśnięty (pin jest zwarty do masy) in-
krementowana jest wartość w polu, które odpowiada danemu przyciskowi w
tablicy key tics[3]. Tablica ta przechowuje wartości oznaczające ilość ostat-
nich tików systemowych kiedy stan danego przycisku został odczytany jako
wciśnięty. Jeżeli dany przycisk był wciśnięty przez ilość tików odpowiada-
jących wartości zdefiniowanej jako TICKS TO DEBOUNCE uznaje się go
za wciśnięty i zostaje zapalony odpowiadający mu bit we fladze key flag.
Jednocześnie dalsze zliczanie tików dla przycisku który został uznany za
wciśnięty zostaje przerwane. Jeżeli w którymkolwiek momencie dany przy-
cisk zostanie spróbkowany jako niewciśnięty zerowana jest odpowiadająca
mu wartość w tablicy key ticks[].
44
Rysunek 33: Ramka protokołu RC5
45
8.6 Algorytm sterowania
Sterowanie robotem zostało zrealizowane za pomocą regulatora PID. W
fazie testów okazało się, że człon całkujący nie wprowadzał znaczącej po-
prawy jazdy robota. Dzieje się tak dlatego, że człon całkujący służy do
likwidacji stałych lub małych wolnozmiennych uchybów. Robot porusza się
na tyle szybko oraz trasa zazwyczaj jest na tyle kręta, że nie można zauważyć
wyniku działania tego członu podczas jazdy robota. Finalnie zastosowany
został regulator PD. Działanie członu różniczkującego staje się widoczne
gdy uchyb regulacji zaczyna szybko narastać. W przypadku robota dzieje
się tak przy ostrych zakrętach.
Ogólne równanie regulatora PID przedstawia się następująco:
Zt
1 dε(t)
u(t) = kr ε(t) + ε(τ )dτ + Td (1)
Ti dt
0
Zt
dε(t)
u(t) = Kp ε(t) + Ki ε(τ )dτ + Kd (2)
dt
0
Przy zerowym uchybie wartość wypełnienia sygnału PWM dla obu sil-
ników jest równa wartości określonej przez definicję BASE PWM. Zmiana
tej wartości powoduje zmianę prędkości poruszania się robota.
46
Rysunek 34: Algorytm sterowania
47
9 Podsumowanie
9.1 Wynik projektu
Cel pracy został osiągnięty. Robot został zmontowany i oprogramowany
w stopniu umożliwiającym wykonanie postawionego przed nim zadania -
wystartowania w amatorskim konkursie robotycznym w konkurencji Line
Follower.
48
10 Załączniki
1. Schematy i projekty płytek utworzone w programie EAGLE
• headers/adc.h
• headers/defines.h
• headers/functions.h
• headers/ir decode.h
• headers/lcd.h
• headers/menu.h
• headers/pid.h
• headers/timers.h
• headers/uart.h
• adc.c
• functions.c
• ir decode.c
• lcd.c
• main.c
• menu.c
• pid.c
• timers.c
• uart.c
49
Spis rysunków
1 Przykładowa trasa z zawodów T-BOT4 . . . . . . . . . . . . . 10
2 Zasada działania czujnika odbiciowego . . . . . . . . . . . . . 11
3 Czujnik odbiciowy KTIR0711S . . . . . . . . . . . . . . . . . 15
4 Silnik Pololu HP 10:1 wraz z mocowaniem . . . . . . . . . . . 17
5 Mostek H TB6612FNG . . . . . . . . . . . . . . . . . . . . . 17
6 Scalony odbiornik podczerwieni TSOP2236 . . . . . . . . . . 18
7 Pakiet LiPol Dualsky 250mAh 7,4V . . . . . . . . . . . . . . 20
8 Schemat podłączenia czujnika KTIR0711S . . . . . . . . . . . 22
9 Złącze FFC/FPC . . . . . . . . . . . . . . . . . . . . . . . . . 22
10 Schemat listwy z czujnikami . . . . . . . . . . . . . . . . . . . 23
11 Schemat podłączenia czujników za pomocą multiplekserów
74HC4052D . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
12 Schemat podłączenia mostka H . . . . . . . . . . . . . . . . . 26
13 Schemat podłączenia odbiornika podczerwieni TSOP2236 . . 26
14 Schemat bloku pinu I/O . . . . . . . . . . . . . . . . . . . . . 27
15 Schemat podłączenia mikrokontrolera . . . . . . . . . . . . . 28
16 Schemat złącza do modułu LCD . . . . . . . . . . . . . . . . 29
17 Schemat podłączenia diod LED . . . . . . . . . . . . . . . . . 29
18 Schemat bloku zasilania . . . . . . . . . . . . . . . . . . . . . 29
19 Schemat modułu LCD . . . . . . . . . . . . . . . . . . . . . . 30
20 Listwa z czujnikami - warstwy TOP i BOTTOM . . . . . . . 31
21 Płytka główna - warstwa TOP . . . . . . . . . . . . . . . . . 32
22 Płytka główna - warstwa BOTTOM . . . . . . . . . . . . . . 33
23 Moduł LCD - warstwa TOP . . . . . . . . . . . . . . . . . . . 34
24 Moduł LCD - warstwa BOTTOM . . . . . . . . . . . . . . . . 34
25 Schemat układu Timera 0 . . . . . . . . . . . . . . . . . . . . 36
26 Schemat układu Timera 1 . . . . . . . . . . . . . . . . . . . . 36
27 Schemat układu prescalera Timera 0 i 1 . . . . . . . . . . . . 37
28 Schemat układu prescalera Timera 2 . . . . . . . . . . . . . . 37
29 Tryb CTC - diagram czasowy . . . . . . . . . . . . . . . . . . 38
30 Tryb Fast PWM - diagram czasowy . . . . . . . . . . . . . . 39
31 Tryb PWM Phase Correct - diagram czasowy . . . . . . . . . 39
32 Schemat bloku konwertera analogowo-cyfrowego . . . . . . . . 41
33 Ramka protokołu RC5 . . . . . . . . . . . . . . . . . . . . . . 45
34 Algorytm sterowania . . . . . . . . . . . . . . . . . . . . . . . 47
50
Spis tablic
1 Parametry silnika Pololu HP 10:1 . . . . . . . . . . . . . . . . 16
2 Porównanie mostków H . . . . . . . . . . . . . . . . . . . . . 17
3 Parametry mikrokontrolera ATmega32A . . . . . . . . . . . . 20
4 Bilans prądowy . . . . . . . . . . . . . . . . . . . . . . . . . . 21
51
Bibliografia
[1] R. Paolozzi, “The cradle of motorsport.” http://forix.autosport.
com/8w/bdb.html, May 2008.
52