magistrsko delo - connecting repositories · 2017. 11. 28. · slika 3.8: wheatstonov mostič ........
TRANSCRIPT
Gregor Tuljak
NADGRANJA SENZORIKE INVALIDSKEGA VOZIČKA VOIC Z DIGITALNIM KOMPASOM
Magistrsko delo
Maribor, september 2013
NADGRANJA SENZORIKE INVALIDSKEGA VOZIČKA
VOIC Z DIGITALNIM KOMPASOM
Magistrsko delo
Študent: Gregor Tuljak
Študijski program: študijski program 2. stopnje
Mehatronika
Mentor FERI: red. prof. dr. Riko Šafarič
Mentor FS: izr. prof. dr. Karl Gotlih
I
II
ZAHVALA
Zahvaljujem se red. prof. dr. Riku Šafariču
in izr. prof. dr. Karlu Gotlihu za pomoč in
koristne nasvete pri nastajanju magistrskega
dela.
Za podporo se zahvaljujem se tudi svojim
staršem, ki so mi omogočili študij.
III
Nadgradnja senzorike invalidskega vozička VOIC z
digitalnim kompasom
Ključne besede: mikrokrmilnik, digitalni kompas, I2C vodilo, CAN vodilo
UDK: 004.5:004.6(043.2)
Povzetek
V magistrski nalogi je opisana nadgradnja senzorike invalidskega vozička VOIC z
digitalnim kompasom HMC6352. Na senzorski enoti kompasa je mikrokrmilnik
PIC18F358, ki preko vodila I2C komunicira z modulom kompasa, nato pa podatke pošilja
preko CAN vodila do glavne enote za CAN komunikacijo in od tam naprej preko RS-232
vodila do osebnega računalnika, na katerem teče program z uporabniškim vmesnikom.
Podatki kompasa so uporabljeni v praktični aplikaciji, s katero se voziček samodejno
obrne na želen kot. Opisana je izdelava programov za mikrokrmilnik PIC v programu
MPLAB IDE in izdelava programa za uporabniški vmesnik in praktično aplikacijo v
programu Visual Studio.
IV
Upgrading VOIC wheelchair's sensory system with a
digital compass
Key words: microcontroller, digital compass, I2C bus, CAN bus
UDK: 004.5:004.6(043.2)
Abstract
The thesis describes upgrading VOIC wheelchair's sensory system with a digital compass
HMC6352. The sensor unit contains a PIC18F458 microcontroller, which communicates
with the compass module via I2C and sends its data via CAN network. The main CAN
microcontroller sends the data via RS-232 bus to PC, which runs the main user interface.
Compass data is used in an application, which turns the wheelchair to the desired angle.
The thesis contains descriptions of the application and user interface program, developed
in Visual Studio and the microcontroller program, developed in MPLAB IDE.
V
Kazalo vsebine
1. Uvod .............................................................................................................................. 1
2. Protokoli ........................................................................................................................ 3
2.1 I2C komunikacijski protokol .................................................................................. 3
2.1.1 Zasnova ............................................................................................................ 3
2.1.2 Protokoli sporočil ............................................................................................ 4
2.1.3 Fizična plat ...................................................................................................... 5
2.1.4 Razširjanje urinega signala .............................................................................. 7
2.1.5 Arbitraža .......................................................................................................... 7
2.2 CAN komunikacijski protokol ................................................................................ 8
2.2.1 zasnova ............................................................................................................ 8
2.2.2 Prenos podatkov .............................................................................................. 9
2.2.3 Okvirji ............................................................................................................ 10
3. Strojna oprema ............................................................................................................. 12
3.1 Vgrajeni sistemi .................................................................................................... 12
3.2 Invalidski voziček Invacare Storm3 Euro ............................................................. 12
3.2.1 Način CAN komunikacije na VOIC vozičku ................................................ 15
3.3 Mikrokrmilnik PIC 18F458 .................................................................................. 16
3.4 MCP2551 CAN sprejemnik-oddajnik .................................................................. 18
3.5 Programator PICkit 2 ............................................................................................ 19
3.6 Ultrazvočni senzorji .............................................................................................. 21
3.7 HMC6352 digitalni kompas .................................................................................. 21
3.7.1 Magnetoupornost ........................................................................................... 21
3.7.2 Modul digitalnega kompasa .......................................................................... 23
3.7.3 Namestitev kompasa na invalidski voziček VOIC ........................................ 26
3.7.4 Ukazni protokol ............................................................................................. 26
VI
3.7.5 EEPROM ....................................................................................................... 27
3.7.6 Nastavitve delovanja kompasa ...................................................................... 28
3.7.7 Umerjanje kompasa ....................................................................................... 29
3.7.8 Povprečenje ................................................................................................... 30
3.7.9 Časovne zahteve ............................................................................................ 30
4. Programska oprema ..................................................................................................... 31
4.1 MPLAB IDE ......................................................................................................... 31
4.2 Prevajalnik C18 ..................................................................................................... 33
4.3 Visual Studio ......................................................................................................... 36
5. Izdelava programa za PIC mikrokrmilnik na senzorski enoti digitalnega kompasa ... 38
6. Dopolnitev uporabniškega programa za osebni računalnik ......................................... 48
7. Rezultati ....................................................................................................................... 54
8. Sklep ............................................................................................................................ 56
9. Viri ............................................................................................................................... 58
10. Priloge ....................................................................................................................... 60
Kazalo slik
Slika 2.1: Časovni diagram .................................................................................................... 4
Slika 2.2: Shema priklopa naprav na I2C vodilo ................................................................... 6
Slika 2.3: NRZ oblika signala ............................................................................................... 8
Slika 3.1: Invalidski voziček VOIC ..................................................................................... 13
Slika 3.2: Shema uporabljenih sistemov na VOIC vozičku ................................................ 15
Slika 3.3: Nožice mikrokrmilnika PIC18F358 .................................................................... 16
Slika 3.4: Shema mikrokrmilnika PIC18F458 .................................................................... 17
Slika 3.5: Shema priklopa MCP2551 na mikrokrmilnik ..................................................... 19
Slika 3.6: Shema priklopa programatorja na mikrokrmilnik ............................................... 20
VII
Slika 3.7: Anizotropna magnetoupornost ............................................................................ 22
Slika 3.8: Wheatstonov mostič ............................................................................................ 22
Slika 3.9: Senzorska enota z modulom digitalnega kompasa .............................................. 24
Slika 3.10: Shema priklopa modula HMC6352 na mikrokrmilnik ..................................... 25
Slika 3.11: Postavitev digitalnega kompasa na VOIC vozičku ........................................... 26
Slika 4.1: Shema razvojnega cikla ....................................................................................... 32
Slika 4.2: Projektni organizator ........................................................................................... 32
Slika 4.3: Okno New Project ............................................................................................... 33
Slika 4.4: Okno Select Device ............................................................................................. 34
Slika 4.5: Okno Select Language Toolsuite ........................................................................ 34
Slika 4.6: Okno Build Options ............................................................................................ 35
Slika 4.7: Drevesna struktura projekta ................................................................................ 35
Slika 4.8: Razvojno okolje Visual Studio ............................................................................ 37
Slika 5.1: Drevesna struktura projekta ................................................................................ 38
Slika 6.1: Okno uporabniškega vmesnika ........................................................................... 48
Slika 7.1: Odziv vozička VOIC, vrtenje na mestu .............................................................. 54
Kazalo tabel
Tabela 2.1: Zgradba okvirja CAN ....................................................................................... 11
Tabela 3.1:Podatki vozička VOIC ....................................................................................... 14
Tabela 3.2: Podatki mikrokrmilnika PIC 18F458 ............................................................... 16
Tabela 3.3: Nožice MCP2551 ............................................................................................. 19
Tabela 3.4: Nožice programatorja ....................................................................................... 20
Tabela 3.5: Podatki ultrazvočnega senzorja ........................................................................ 21
Tabela 3.6: Lastnosti modula HMC6352 ............................................................................ 24
Tabela 3.7: Nožice modula HMC6352 ................................................................................ 25
Tabela 3.8: Ukazi kompasu HMC6352 ............................................................................... 27
Tabela 3.9: EEPROM naslovi kompasa .............................................................................. 27
Tabela 3.10: Časovne zahteve kompasa .............................................................................. 30
VIII
Seznam uporabljenih simbolov
W – vat
V – volt
Ah – amper ura
Hz – herc
Seznam uporabljenih kratic
I2C - Notranje integrirano vezje, ang. Inter-Inegrated Circuit
SCL - Serijska časovna linija, ang. Serial Clock Line
SDL - Serijska podatkovna linija, ang. Serial Data Line
ACK - potrditev, ang. Acknowledged
NACK – ni potrjeno, ang. Not Acknowledged
MSB – najpomembnejši bit (ang. Most Significant Bit)
CAN – vodilo (ang. Controller Area Network)
NRZ – oblika signala (ang. Non-return-to-zero)
RTR – zahteva po podatkih določene naprave (ang. Remote Transmit Request)
SOF – začetni bit (ang. Start-of-frame)
CPE – centralna procesna enota
MCU – mikrokrmilnik, ang. Microcontroller Unit
PC – osebni računalnik
OM – način delovanja, ang. Operational Mode
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
1
1. UVOD
Prvi zapisi o izvedbah invalidskih vozičkov segajo v 3. stoletje pr. n. št., ko so na
Kitajskem uporabljali samokolnicam podobne transportne narave za prevoz predmetov in
ljudi. Namensko razlikovanje med tema funkcijama se je pričelo veliko pozneje, okoli leta
525 n. št., ko so se v kitajski umetnosti pričele pojavljati slike stolov s kolesi, namenjenimi
prevozu invalidov. Evropski zapisi kažejo na uporabo podobne tehnologije med nemško
renesanso. Leta 1933 sta Harry Jennings in Herbert Everest izumila lahek jeklen invalidski
voziček, ki je bil tudi zložljiv in kmalu se je pričela masovna proizvodnja.
Prvi funkcionalni motorizirani invalidski voziček je izumil George J. Klein v 50. letih 20.
stoletja, z namenom prevoza veteranov tetraplegikov druge svetovne vojne. Njegov izum
se od današnjih motoriziranih invalidskih vozičkov ni bistveno razlikoval, saj so obojim
skupni uporabniški vmesnik, krmilnik, pogonski sistem in vir napetosti, le da so danes
komponente dodelane in precej manjše.
Danes so motorizirani invalidski vozički namenjeni invalidom, ki vozička ne morejo
poganjati sami, ali pa ga uporabljajo na večjih razdaljah ali v okolju, kjer je poganjanje
vozička utrujajoče. V večini primerov so uporabniki paraplegiki, tetraplegiki in cerebralni
spastiki, vse več pa je tudi uporabnikov s kardiovaskularnimi boleznimi.
Najbolj pogosto se za upravljanje uporablja krmilno palico, vendar pa vsi uporabniki
takšnega upravljanja niso sposobni, zato že od 60. let 20. stoletja obstaja upravljanje
vozička s pomočjo pihanja v cevko (ang. Sip-and-puff Controller). Upravljanje z mislimi,
ki deluje z zaznavo možganskih signalov preko senzorjev na telesu, je v razvoju, vendar
zaenkrat deluje le v laboratorijskih pogojih.
Eden od možnih načinov upravljanja motoriziranih invalidskih vozičkov je tudi glasovno
upravljanje, oziroma upravljanje z razpoznavo govornih ukazov, katerega razvoj je bil
predmet večih projektov in diplomskih nalog. Delo se je vršilo na invalidskem vozičku,
poimenovanem VOIC (Voice Operated Intelligent Wheelchair), v osnovi pa gre za model
Storm3 Euro podjetja Invacare. Do danes so bili razviti algoritmi za prepoznavo govornih
ukazov s pomočjo umetnih nevronskih mrež, ki so bili dokaj uspešno testirani v
laboratorijskih pogojih. Upravljanje vozička z govornimi ukazi je možno, vendar ni 100%
zanesljivo, zato so bili zaradi varnosti nanj vgrajeni ultrazvočni senzorji razdalje, s
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
2
pomočjo katerih se v primeru ovir v smeri premikanja vozička zmanjša hitrost ali pa
voziček povsem ustavi. V prihodnosti je predvidena dodelava avtomatiziranega upravljanja
do te mere, da se bo voziček sam premikal po prostoru glede na izrečen ukaz, na primer
»kuhinja«, za kar pa je potreben sistem za navigacijo. Eden od najpreprostejših in cenejših
senzorjev za navigacijo je digitalni kompas, s pomočjo katerega imamo v vseh trenutkih
informacijo o orientaciji invalidskega vozička. Cilj magistrske naloge je izdelava
programske opreme za senzorsko enoto digitalnega kompasa, dograditev programske
opreme za vodenje vozička in testiranje senzorja v praktični aplikaciji.
V drugem poglavju sta opisana komunikacijska protokola I2C in CAN, ki ju uporabljamo
za komunikacijo med sistemi na vozičku VOIC.
V tretjem poglavju je opisana vsa strojna oprema, ki smo jo potrebovali za izvedbo
magistrskega dela. Sem spadajo invalidski voziček, mikrokrmilnik z dodatnimi moduli za
komunikacijo, programator, ultrazvočni senzorji in digitalni kompas.
V četrtem poglavju je predstavljena programska oprema, ki smo jo uporabili za izvedbo
projekta, in sicer razvojni okolji MPLAB IDE in Visual Studio ter prevajalnik C18.
V petem poglavju je opisana izdelava programa za mikrokrmilnik na senzorski enoti
digitalnega kompasa, s komentirano programsko kodo in opisom posameznih funkcij.
Šesto poglavje zajema spremembe uporabniškega programa, ki se izvaja na osebnem
računalniku.
Zadnji dve poglavji zajemata rezultate magistrskega dela in sklepno besedo.
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
3
2. PROTOKOLI
2.1 I2C KOMUNIKACIJSKI PROTOKOL
I2C (Notranje integrirano vezje, ang. Inter-Inegrated Circuit) je serijsko računalniško
vodilo z več gospodarji, izumljeno v podjetju Philips, za povezavo počasnejših perifernih
naprav z matičnimi ploščami, vgrajenimi sistemi, mobilniki ali ostalimi napravami. Od
sredine 90. let naprej je vse več konkurenčnih podjetij začelo predstavljati izdelke, ki
uporabljajo I2C protokol, od 10. oktobra, 2006, pa za implementacijo I2C protokola ni
potrebno plačilo licence.
2.1.1 ZASNOVA
I2C uporablja dve žici, eno za serijsko podatkovno linijo (Serial Data Line – SDL) in drugo
za serijsko časovno linijo (Serial Clock Line – SCL), ki sta s pull-up uporoma priklopljeni
na pozitivni priključek izvora napetosti. Tipični vrednosti napetosti sta +3.3V ali +5V,
vendar so dovoljene tudi drugačne napetosti.
I2C ima v zasnovi 7-bitni ali 10-bitni naslovni prostor. Tipične hitrosti prenosa so 100kbit/s
v standardnem načinu in 10kbit/s v počasnem načinu. Zadnje različice protokola
omogočajo več priklopljenih naprav in hitrosti prenosa do 3,4Mbit/s. Gre za hitrosti
prenosa podatkov od gospodarja do sužnja, brez omejitev priključenih naprav (sužnjev), ki
v praksi zmanjšajo dejansko hitrost prenosa podatkov. Maksimalno število priključenih
naprav je omejeno z naslovnim prostorom in s skupno kapacitivnostjo 400pF, ki v praksi
omeji komunikacijo na razdaljo nekaj metrov.
Naprave na vodilu imajo lahko vlogo sužnja ali gospodarja. Naprave z vlogo gospodarja
generirajo časovni signal in vzpostavijo komunikacijo s sužnji, slednji pa sprejmejo
časovni signal in se odzovejo, ko so naslovljeni s strani gospodarja. Vodilo omogoča več
gospodarjev, vloge pa se lahko tudi zamenjajo med sporočili. Obstajajo štiri možna stanja
naprav:
1. gospodar pošiljatelj, ki pošilja podatke sužnju,
2. gospodar sprejemnik, ki sprejema podatke od sužnja,
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
4
3. suženj pošiljatelj, ki pošilja podatke gospodarju in
4. suženj sprejemnik, ki sprejema podatke od gospodarja.
Gospodar je prvotno v prvem načinu in pošlje START bit, za katerim sledi 7-bitni naslov
suženjske naprave, s katero želi komunicirati, zatem pa še en bit, s katerim pove, ali želi
podatke sužnju pošiljati ali jih od njega sprejemati. Če na vodilu obstaja naprava s
poslanim naslovom, se ta odzove z ACK bitom (potrditev, ang. acknowledged). Gospodar
nato pošlje ali sprejme podatke, glede na zadnji bit, ki ga je poslal v prejšnjem sporočilu,
suženj pa se odzove temu ustrezno.
Pri pošiljanju naslovov in podatkov se sporočila pošiljajo tako, da se najprej pošlje
najpomembnejši bit MSB (ang. Most Significant Bit). START bit je indiciran s prehodom
iz visokega na nizek napetostni nivo SDA linije, pri čemer je SCL linija postavljena
visoko, STOP bit pa s prehodom iz nizkega na visok napetostni nivo SDA linije pri SCL
liniji postavljeni visoko. Vsi ostali prehodi se vršijo pri SCL liniji postavljeni na nizek
napetostni nivo.
Če želi gospodar pošiljati podatke sužnju, zaporedno pošilja zloge, suženj pa pošlje ACK
bit. V tem primeru je gospodar pošiljatelj in suženj sprejemnik. Če želi gospodar
sprejemati podatke od sužnja, zaporedno sprejema zloge in za vsakim zlogom pošlje ACK
bit, razen za zadnjim. Takrat Konča prenos s STOP bitom, ali pa ponovno pošlje START
bit, s čimer zadrži kontrolo nad vodilom (združeno sporočilo).
Slika 2.1: Časovni diagram
2.1.2 PROTOKOLI SPOROČIL
I2C definira osnovne tipe sporočil, ki se vedno začnejo s START bitom in končajo s STOP
bitom:
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
5
eno sporočilo, pri katerem gospodar pošilja podatke sužnju,
eno sporočilo, pri katerem gospodar bere podatke od sužnja in
združeno sporočilo, kjer gospodar pošlje ali sprejme vsaj dve sporočili.
Pri združenih sporočilih se vsako branje ali pisanje začne s START bitom in naslovom
sužnja, vsak naslednji START bit se imenuje ponovljeni START bit (ang. Repeated Start).
Ker vmes ni STOP bita, sužnji vedo, da je naslednji prenos del istega sporočila.
Vsak suženj se odziva na določena sporočila, ki so zapisana v njegovi dokumentaciji.
2.1.3 FIZIČNA PLAT
Na fizičnem nivoju sta SDA in SCL liniji na izvor napetosti povezani preko pull-up
uporov, ki sta potrebna, ker so nožice na čipih odprto kolektorske zasnove, kar pomeni, da
čipi lahko spremenijo napetost na liniji le na nizko vrednost, sicer napetost ostane enaka
priključni napetosti pull-up upora. Nizka napetost na liniji pomeni logično ničlo, visoka
(priključna) napetost pa logično enico. Več naprav lahko naenkrat spreminja napetostni
nivo na obeh linijah, pri čemer velja, da linija ostane nizko, če jo katerakoli naprava
postavi nizko. Naprave, ki želijo poslati logično enico (postaviti linijo visoko), lahko
zaznajo, da je linija postavljena nizko, kar pomeni, da v tistem trenutku oddaja druga
naprava. Če se to zgodi na SCL liniji, temu pravimo prilagajanje urinega signala (ang.
Clock Stretching), ki sužnjem omogoča nadzor nad hitrostjo pretoka podatkov. Na SDA
liniji temu pravimo arbitraža, ki zagotavlja, da na vodilu oddaja le ena naprava naenkrat.
Ko vodila ne uporablja nobena naprava, sta obe liniji z pull-up upori postavljeni visoko. Za
začetek oddajanja naprava pošlje START signal tako, da SDA linijo postavi nizko, SCL
linija pa ostane visoko. Če bi naprava zatem pustila SDA liniji nazaj na visok nivo, bi to
pomenilo STOP signal, kar je sicer dovoljeno, vendar je v tem trenutku nesmiselno, zato
po START signalu naprava navadno postavi SCL linijo nizko.
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
6
Slika 2.2: Shema priklopa naprav na I2C vodilo
Razen pri START in STOP signalih, se SDA linija spreminja samo pri SCL liniji
postavljeni nizko. Pošiljanje posameznih bitov se vrši s pulzirajočim signalom na SCL
liniji, medtem ko je SDA linija postavljena na želeni nivo. Dokler je SCL linija nizko,
pošiljatelj postavi SDA linijo na želeni nivo in pusti SCL liniji nazaj na visok nivo. Nato
sledi zakasnitev, da se SCL linija dejansko postavi na visok nivo, ki je odvisna od časovne
konstante vezja in parazitne kapacitivnosti vodila, lahko pa tudi od prilagajanja urinega
signala s strani sužnja. Ko je SCL linija visoko, pošiljatelj počaka določen čas (pri
standardni hitrosti vodila 4 μs), da lahko sprejemnik bit prebere, nato pa SCL linijo
ponovno postavi nizko, s čimer se zaključi prenos enega bita.
Po osmih bitih, poslanih v eno smer, se pošlje ACK signal v drugi smeri. Pošiljatelj in
sprejemnik zamenjata vlogi za prenos enega bita, pri čemer prejšnji pošiljatelj, ki je poslal
osem bitov, prejme logično enico ali ničlo. Slednja pomeni potrditev sprejema podatkov ali
ACK signal, enica pa NACK (ni sprejeto, ang. Not acknowledged), ki za pošiljatelja lahko
pomeni slednje:
če gospodar pošilja sužnju: suženj ne more prejeti podatkov, ker ne obstaja, ne
razume ukaza ali ne more več sprejeti podatkov,
če suženj pošilja gospodarju: gospodar želi prekiniti prenos, ko se prenese trenutni
zlog.
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
7
Po sprejemu ACK signala lahko gospodar stori eno od naslednjih dejanj:
se pripravi na prenos še enega zloga,
pošlje STOP signal ali
pošlje ponovljeni START in začne nov prenos, ne da bi sprostil vodilo.
2.1.4 RAZŠIRJANJE URINEGA SIGNALA
Razširjanje urinega signala (ang. Clock stretching) je ena pomembnejših lastnosti I2C
vodila. Naslovljeni suženj lahko po prejetem zlogu zadrži SCL linijo nizko, če še ni
pripravljen na nove podatke. Gospodar, ki komunicira z njim, ne more nadaljevati prenosa
naslednjega bita, temveč mora počakati, da se SCL linija vrne na visok napetostni nivo. Če
suženj razširja urin signal, bo SCL linija postavljena nizko, zaradi odprto kolektorske
zasnove. Gospodar opazuje SCL linijo in čaka, da se dvige na visok nivo. Ko se to zgodi,
mora počakati še določen minimalen čas (pri standardni hitrosti vodila 4 μs), preden lahko
ponovno postavi SCL linijo nizko. Razširjanje urinega signala je edini način, da suženj
vpliva na SCL linijo, sicer jo vedno uporablja kot vhod.
2.1.5 ARBITRAŽA
Vsi gospodarji spremljajo START in STOP bite in ne začnejo prenosov, ko vodilo
uporablja drug gospodar. Ko dva gospodarja želita začeti prenos v istem trenutku, nastopi
arbitraža. Vsak od njiju preveri nivo SDA linije in ga primerja z nivojem, ki ga pričakuje.
Če se ta razlikuje od pričakovanega, je ta naprava izgubila v arbitražnem postopku.
Če prva naprava postavi SDA linijo visoko, torej ji pusti, da se sama postavi na visok nivo
preko pull-up uporov, druga naprava pa jo postavi nizko, bo linija ostala na nizkem nivoju.
Prva naprava opazuje SDA linijo in opazi, da ni na pričakovanem visokem nivoju ter pride
do zaključka, da druga pošilja druga naprava. Tista naprava, ki prva opazi razliko med
pričakovanim in dejanskim nivojem SDA linije, izgubi arbitražo in prepusti to linijo drugi
napravi. Če je naprava, ki je izgubila arbitražo, gospodar, potem prepusti tudi SCL linijo in
čaka na STOP signal. Do arbitraže pride redko, vendar je potrebna za vodilo z več
gospodarji.
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
8
2.2 CAN KOMUNIKACIJSKI PROTOKOL
Vodilo CAN (ang. Controller Area Network) je vodilo, razvito v avtomobilski industriji, za
povezavo mikrokrmilnikov in naprav v vozilu brez gostiteljskega računalnika. Protokol
temelji na sporočilih, razvitih posebej za avtomobilsko industrijo, vendar se danes
uporablja tudi na področjih vesoljske tehnologije, industrije in medicinske opreme. Razvoj
vodila se je začel v podjetju Robert Bosch GmbH leta 1983, uradno pa je bilo vodilo
predstavljeno leta 1986 na kongresu združenja avtomobilskih inženirjev v Detroitu. Prvi
CAN krmilni čipi so prišli na tržišče leta 1987, izdelovali pa sta jih podjetji Intel in Philips.
Sodobni avtomobili imajo tudi do 80 vgrajenih elektronskih krmilnih enot za različne
podsisteme. Tipično je največja krmilna enota motorja, ostale večje enote pa so
uporabljene za menjalnik, varnostne blazine, sistem poti zdrsu koles ABS (ang. Antilock
Braking System), tempomat, itd. Nekatere enote nadzorujejo celotne podsisteme, vendar so
povezave z ostalimi enotami potrebne. CAN vodilo med seboj povezuje različne
podsisteme, v podsistemih pa aktuatorje, senzorje in krmilne enote. Zaradi cenovne
ugodnosti se to vodilo uporablja tudi v avtomatiki.
2.2.1 ZASNOVA
CAN je vodilo z več gospodarji, po katerem lahko vsaka naprava pošilja in sprejema
sporočila, vendar ne obenem. Sporočilo je sestavljeno iz identifikacije (ID, ang. Identifier),
ki predstavlja prioriteto sporočila in iz do največ osmih zlogov (pri novejši različici CAN
FD do 64). Oblika signala na vodilu NRZ (ang. Non-return-to zero), kar pomeni, da
obstajata le dva možna napetostna nivoja za logično enico in ničlo, med prehodi pa se
napetost ne ustali na določeni vmesni stopnji.
Slika 2.3: NRZ oblika signala
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
9
Naprave se na vodilo ne priključijo direktno, temveč preko gostiteljskega procesorja in
CAN krmilnika. Ko je vodilo prosto, kar je predstavljeno z recesivnim nivojem napetosti
na vodilu, lahko vsaka naprava prične oddajati. Če z oddajanjem pričneta dve ali več
naprav hkrati, bo sporočilo z dominantnejšo ID številko (tako, z več dominantnimi biti, tj.
ničlami) prepisalo ostala, zato sčasoma ostane le eno sporočilo, ki ga prejmejo vse naprave.
Temu mehanizmu pravimo prioritetno osnovana arbitraža. Sporočila z nižjimi vrednostmi
ID številke imajo višjo prioriteto in bodo poslana prednostno.
Vsaka naprava na vodilu potrebuje:
Gostiteljski procesor
Ta določa pomen prejetim sporočilom in odloča, katera sporočila želi poslati.
Nanj so priklopljeni senzorji, aktuatorji in krmilniki.
CAN krmilnik
Sprejemanje: krmilnik zaporedno shranjuje prejete bite, dokler celotno sporočilo ni
zaključeno, potem navadno sproži prekinitev, po kateri procesor prevzame
sporočilo.
Pošiljanje: procesor shrani sporočila, ki jih želi poslati, v CAN krmilniku, ki potem
pošlje sporočilo v obliki zaporednih bitov.
Sprejemnik-oddajnik (ang. Transceiver)
Sprejemanje: sprejemnik prilagodi nivo napetostnih signalov iz vodila na nivoje, ki
jih pričakuje CAN krmilnik in vsebuje zaščitno vezje.
Oddajanje: prilagodi signale, ki jih prejme od CAN krmilnika v signale, primerne
za pošiljanje.
V omrežjih, krajših od dolžine 40 m, so možne hitrosti prenosa do 1 Mbit/s, vendar velja,
da z zmanjševanjem hitrosti omogočimo večje razdalje.
2.2.2 PRENOS PODATKOV
Prioritete sporočil so dosežene z binarnim sistemom dominantnih in recesivnih bitov, pri
čemer je ničla dominantni, enica pa recesivni bit, zato je potrebna odprto-kolektorska
zasnova vodila. Vsaka od naprav, ki oddajajo, spremlja, ali se na vodilu pojavi logični
nivo, ki ga želi poslati. Prioritetno osnovana arbitraža omogoča sporočilom z višjo
prioriteto takojšnje pošiljanje, ne glede na število ostalih sporočil, zaradi česar je primerna
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
10
za realno-časovne sisteme. Če je vodilo prosto, vse naprave, ki želijo oddajati pošljejo
svojo ID številko zaporedno od najvišjega bita naprej. Če je njihova ID številka večja od
ostalih, bodo v določenem trenutku poslale recesivni bit, naprave z nižjo vrednostjo ID pa
dominantni bit, zato slednje dobijo arbitražo in nadaljujejo s pošiljanje naslednjega bita,
poraženke arbitraže pa prenehajo z oddajanjem. Po zadnjem prenesenem bitu ID številke
ostane le ena naprava, ki je dobila arbitražo in lahko pošlje podatke. ID številke so se v
preteklosti podeljevale glede na tip podatkov in napravo, kar je prineslo slabe realno-
časovne zmogljivosti, saj je bila izkoriščenost vodila okoli 30 %. Novejši način je
podeljevanje ID številk glede na skrajni rok, pri katerem je mogoče doseči izkoriščenost
vodila od 70 do 80 %. Uporabna funkcija CAN vodila je tudi možnost zahteve podatkov od
izbrane naprave na vodilu z RTR zahtevo (ang. Remote Transmit Request). RTR bit je pri
zahtevi recesiven.
2.2.3 OKVIRJI
CAN omrežje lahko deluje z dvema različnima formatoma okvirjev. Razlika med
formatoma je v dolžini ID številke, ki je pri osnovnem okvirju 11 bitov, pri podaljšanem
okvirju pa 29 bitov. Razliko med formatoma nakazuje IDE bit, ki je dominantni bit za
osnovni okvir in recesivni za podaljšani okvir. CAN krmilniki, ki podpirajo uporabo
podaljšanega okvirja, omogočajo tudi uporabo osnovnega okvirja. Vsak okvir se začne s
SOF bitom (ang. Start-of-frame), ki nakazuje začetek prenosa, konča pa se z EOF biti (ang.
End-of-frame).
Obstajajo štiri vrste okvirjev pri CAN vodilu:
podatkovni okvir (vsebuje podatke pošiljatelja),
oddaljeni okvir (vsebuje RTR zahtevo),
okvir napake (pošlje ga naprava, ki je zaznala napako) in
preobremenitveni okvir (pošlje ga naprava, ki potrebuje več časa za obdelavo
podatkov).
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
11
Tabela 2.1: Zgradba okvirja CAN
Polje Dolžina (biti) Opis
Začetek okvirja 1 Bit, ki označuje začetek okvirja
ID številka 11 ID številka, ki označuje prioriteto
RTR 1 RTR bit, dominanten pri podatkovnem okviru
IDE bit 1 Nakazuje osnovni ali podaljšani okvir
Rezervirani bit (r0) 1 Rezervirani bit
Dolžina podatkov 4 Število zlogov podatkov
Podatki 0-64 Podatki za prenos
CRC 15 Ang. Cyclic Redundancy Check, za preverjanje napak
CRC ločilo 1 Mora biti recesiven
ACK reža 1 ACK bit
ACK ločilo 1 Mora biti recesiven
Konec okvirja 7 Morajo biti recesivni
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
12
3. STROJNA OPREMA
3.1 VGRAJENI SISTEMI
Vgrajeni sistemi so naprave, ki uporabljajo procesorsko moč majhnih mikrokrmilnikov,
npr. PIC serije podjetja Microchip. Ti vsebujejo mikroprocesor (CPE pri osebnih
računalnikih), dodatna vezja, ki jih imenujemo periferne enote in nekaj ostalih komponent,
ki skupaj tvorijo krmilni modul. Takšna naprava se lahko vgradi v ostale elektronske ali
mehanske naprav, da omogoči nizkocenovno digitalno krmiljenje.
Najpomembnejša razlika med vgrajenim krmilnikom in osebnim računalnikom je, da je
prvi namenjen točno določenemu naboru opravil, medtem ko je osebni računalnik
namenjen uporabi številnih programov in povezavi z različnimi zunanjimi napravami.
Vgrajeni krmilnik ima en sam program, zaradi česar ga lahko poceni sestavimo z manjšim
številom komponent in ravno pravšnjo procesorsko močjo. Srce osebnega računalnika (PC)
je draga centralno procesna enota (CPE), z ostalimi komponentami, kot so pomnilniki,
diski, grafične kartice, mrežna oprema, itd. Vgrajeni sistem pa vsebuje nizkocenovni
mikrokrmilnik (MCU, ang. Microcontroller Unit) in na istem čipu tudi periferne enote ter
relativno majhno število zunanjih naprav. Pogosto so vgrajeni sistemi neviden del ali
podsistem naprave, npr. hladilnika ali pralnega stroja, kjer mikrokrmilnik vgrajenega
sistema opravlja le manjši del funkcij celotne naprave.
Senzorska enota digitalnega kompasa je vgrajeni sistem, saj je njena naloga vrednotenje
signalov magnetometra in pošiljanje teh podatkov preko CAN omrežja.
3.2 INVALIDSKI VOZIČEK INVACARE STORM3 EURO
Motorizirani invalidski voziček Invacare Storm3 Euro za pogon uporablja dva motorja z
močjo 220 W, ki delujeta pri napetosti 24 V. Motorja poganjata dva zaporedno vezana 12
V akumulatorja s kapaciteto 70 Ah, kar vozičku zadostuje za približno 46 km vožnje.
Upravljanje vozička se vrši preko uporabniškega vmesnika, ki vsebuje krmilno palico in
gumbe za:
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
13
vklop in izklop vozička,
luči,
smernike,
hupo in
nastavitev stopnje hitrosti.
Krmilna palica nadzoruje premikanje motorjev, pri čemer se voziček premika v smeri
odmika krmilne palice. Maksimalen odmik palice pomeni največjo hitrost premikanja v
želeni smeri, pri čemer je hitrost odvisna tudi od nastavljene stopnje hitrosti, ki lahko
zavzame vrednosti od 1 (najpočasneje) do 5 (najhitreje).
Slika 3.1: Invalidski voziček VOIC
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
14
Tabela 3.1:Podatki vozička VOIC
Za voziček je na tržišču na voljo več dodatkov, ki so za potrebe laboratorijskega dela z
njim nepotrebne, sam voziček pa je opremljen z raznimi nadgradnjami, ki so jih v okviru
projektov in diplom izdelali drugi študenti. Te so:
konzola za nameščanje senzorjev,
vezja z ultrazvočni senzorji razdalje SRF08,
inkrementalni dajalnik, nameščen na os enega od motorjev,
vezje z mikrokrmilnikom PIC18F458 za komunikacijo preko vmesnika RS-232,
vezje z dvema digitalnima potenciometroma, ki nadomeščata krmilno palico,
vezje za preklop med upravljanjem s krmilno palico in z digitalnima
potenciometroma,
pretvornik navzdol,
glavno stikalo za izklop in
Colibri Evaluation Board s Colibri modulom.
Pri slednjem gre za mini računalnik v obliki SODIMM modula, ki je z nameščenim
operacijskim sistemom Windows CE prirejen za vgrajene sisteme. Mini računalnika pri
Podatek Vrednost
Širina vozička 69 cm
Dolžina vozička 115 cm
Višina sedišča 46 cm
Širina sedišča 48 cm
Dolžina sedišča 46 cm
Naklon naslonjala za noge 0° - 15°
Masa vozička 115 kg
Nosilnost 150 kg
Podatki o baterijah 2 x 12 V 7 Ah
Maksimalen naklon klanca 20%
Maksimalna višina ovire 6 cm
Moč motorjev 2 x 220 W
Doseg 46 km
Maksimalna hitrost 6 km/h
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
15
našem projektu nismo uporabili, saj nadgrajujemo programsko opremo, ki ni bila
zasnovana za izvajanje na tem računalniku.
Za vse dodatke je bila v preteklosti izbrana komunikacija preko CAN vodila, povezava z
osebnim računalnikom pa se vrši preko serijskega vodila RS-232.
Slika 3.2: Shema uporabljenih sistemov na VOIC vozičku
3.2.1 NAČIN CAN KOMUNIKACIJE NA VOIC VOZIČKU
Vsaka naprava na CAN vodilu ima dva naslova, z enim jo kliče glavni mikrokrmilnik
(sprejemni), z drugim pa so opremljena vsa sporočila ki jih oddaja (odzivni naslov). Sistem
je zasnovan tako, da glavni mikrokrmilnik zaporedno pošilja naslove naprav. Ko ena od
drugih naprav prejme sporočilo s svojim naslovom, se nanj odzove tako, da vrne sporočilo
s podatki in svojim drugim naslovom. Glavni mikrokrmilnik prejme sporočilo z naslovom
naprave, ki ga pošilja in ga posreduje preko RS-232 vodila na osebni računalnik.
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
16
3.3 MIKROKRMILNIK PIC 18F458
Za krmiljenje naprav in komunikacijo je uporabljen mikrokrmilnik družine PIC (ang.
Peripheral Interface Controller). Te pogosto uporabljajo tako razvijalci v industriji kot tudi
ljubitelji elektronike, razlog tiči v nizki ceni, dostopnosti, obsežni literaturi in nizki ceni
razvijalskih orodij.
Tabela 3.2: Podatki mikrokrmilnika PIC 18F458
Slika 3.3: Nožice mikrokrmilnika PIC18F358
Podatek Vrednost
Vrsta pomnilnika Flash
Velikost pomnilnika(KB) 32
CPE hitrost (MIPS) 10
RAM Zlogov 1,536
Podatkovni EEPROM (zlogi) 256
Digitalna komunikacijska
periferija
1-UART, 1-
A/E/USART, 1-SPI,
1-I2C1-
MSSP(SPI/I2C)
CCP periferija 1 CCP, 1 ECCP
Timerji 1 x 8-bit, 3 x 16-bit
ADC 8 ch, 10-bit
Št. komparatorjev 2
CAN 1 CAN
Temperaturni razpon (C) -40 to 125
Napetost (V) 2 to 5.5
Št. nožic 40
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
17
Slika 3.4: Shema mikrokrmilnika PIC18F458
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
18
PIC mikrokrmilnik ima pomnilniško mesto za vdelano programsko opremo, ki omogoča
izvajanje programa. Za naslavljanje pomnilniških mest uporablja programski števec.
Mikrokrmilnik ima tudi podatkovni pomnilnik, sestavljen iz registrov za posebne funkcije
(SFR, ang. Special Function Register) in splošno namenskih registrov (GPR ang. General
Purpose Register). Prve registre uporabljajo procesor in periferne funkcije za krmiljenje
želenega delovanja naprave, druge pa za shranjevanje spremenljivk, ki jih program
potrebuje za preračunavanje ali začasno shrambo. Poleg pomnilnika najdemo na
mikrokrmilniku tudi vhodno-izhodna vrata. To so nožice, ki jih lahko uporabimo kot
izhode in preko katerih pošiljamo signale ali npr. vklapljamo LED diode. Vrata lahko
programiramo tudi kot vhode in jih uporabimo za komunikacijo z ostalimi napravami.
Pri izgradnji vezja z mikrokrmilnikom je potrebno določiti, katere periferne enote so
potrebne. AD pretvorniki pretvarjajo različne napetosti v digitalne signale, komunikacijske
periferne naprave omogočajo komunikacijo z ostalimi mikrokrmilniki ali omrežjem,
časovniki natančno merijo signalne dogodke in generirajo ter zajemajo komunikacijske
signale, ustvarjajo natančne valovne oblike in samodejno ponovno začnejo mikrokrmilnik,
če se ta ujame v zanko.
Mikrokrmilnik PIC18F458 je bil izbran zaradi cenovne dostopnosti in CAN modula, s
katerim komunicira z ostalimi napravami v CAN omrežju.
3.4 MCP2551 CAN SPREJEMNIK-ODDAJNIK
MCP2551 je visoko hitrostna CAN naprava, ki služi kot vmesnik med mikrokrmilnikom in
CAN vodilom. Vsaka naprava v CAN sistemu potrebuje komponento (CAN sprejemnik-
oddajnik), ki pretvori digitalne signale v obliko, primerno za prenos preko CAN vodila,
prav tako pa služi kot zaščita za mikrokrmilnik pred napetostnimi sunki, ki jih lahko
povzročijo zunanji vplivi.
Naprava omogoča zmanjšanje elektromagnetnih motenj z omejitvijo časov vzpona in
padca napetosti na nožicah CANH in CANL, kar dosežemo z priklopom nožice Rs na
ozemljitev preko 10 kΩ upora.
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
19
Tabela 3.3: Nožice MCP2551
Slika 3.5: Shema priklopa MCP2551 na mikrokrmilnik
3.5 PROGRAMATOR PICKIT 2
Programator PICkit 2 podjetja Microchip se uporablja za programiranje mikrokrmilnikov
serije PIC. Programator se z osebnim računalnikom poveže preko USB kabla, na drugi
strani pa se priključi direktno na vezje z mikrokrmilnikom, kar mu omogoča ICSP način
programiranja (ang. In Circuit Serial Programming). To pomeni, da mikrokrmilnik lahko
ves čas ostane v končnem vezju, kjer ga programiramo, programator pa vsebuje tudi
Št. nožice Ime nožice Opis
1 TXD Podatkovni vhod (pošiljanje)
2 Vss Ozemljitev
3 Vdd Napajalna napetost
4 RXD Podatkovni izhod (sprejemanje)
5 Vref Referenčna izhodna napetost
6 CANL Izhod na vodilo, nizka linija
7 CANH izhod na vodilo, visoka linija
8 Rs Nožica za izbiro načina delovanja
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
20
razhroščevalnik, tako, da je omogočeno razhroščevanje med delovanjem vezja. Ti funkciji
sta primerni za razvoj programov, ne pa tudi za masovno programiranje.
Programator je povsem odprt za javnost, torej sta na razpolago njegova fizična zasnova in
programska oprema, ki ju lahko uporabniki prosto spreminjajo ali dograjujejo glede na
svoje potrebe. Vsebuje notranji EEPROM pomnilnik, na katerega je mogoče naložiti hex
datoteko, s katero lahko programiramo mikrokrmilnike brez osebnega računalnika.
Tabela 3.4: Nožice programatorja
Pri izdelavi vezja z mikrokrmilnikom je potrebno predvideti mesto priklopa za
programator, ki se priklopi na programator po shemi na sliki 3.6.
Slika 3.6: Shema priklopa programatorja na mikrokrmilnik
Št. nožice Ime nožice Opis
1 Vpp/MCLR Programirna napetost
2 Vdd Napajalna napetost mikrokrmilnika
3 Vss Ozemljitev
4 PGD Programirna podatkovna linija
5 PGC Programirni časovna linija
6 Auxillary Pomožna nožica
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
21
3.6 ULTRAZVOČNI SENZORJI
Na voziček so nameščeni ultrazvočni senzorji razdalje SRF08, ki lahko merijo razdalje od
3 cm do 6 m. Senzor deluje podobno kot radar ali sonar. Oddaja visokofrekvenčne zvočne
valove, ki se odbijejo od objektov v vidnem polju senzorja, nato pa zazna odbojne valove
in izračuna razdaljo od predmeta glede na pretečeni čas med oddanim in sprejetim zvočnim
valom. Senzorji z mikrokrmilnikom komunicirajo preko I2C vodila, na enega pa je mogoče
povezati 16 takšnih naprav z naslovi E0, E2, E4, E6, E8, EA, EC, EE, F0, F2, F4, F6, F8,
FA, FC ali FE. Ker so sistemi in naprave na vozičku povezane preko CAN vodila, ima
vsak senzor SRF08 svoj mikrokrmilnik, ki mu določi naslov in skrbi za CAN
komunikacijo.
Tabela 3.5: Podatki ultrazvočnega senzorja
3.7 HMC6352 DIGITALNI KOMPAS
3.7.1 MAGNETOUPORNOST
Do anizotropne magnetoupornosti pride v feritnih materialih. Pri magnetoupornem pojavu
gre za spremembo upornosti materiala, ko ga izpostavimo magnetnemu polju, ki deluje
pravokotno na smer toka skozi tanek listič feritnega materiala, npr. zlitino niklja in železa.
Ko skozi tak material steče tok, se vektor magnetne polarizacije postavi vzporedno na smer
toka. Ob prisotnosti magnetnega polja, ki deluje pravokotno na smer toka, se vektor
Podatek Vrednost
Napetost 5 V
Tok 15 mA, 3 mA med mirovanjem
Frekvenca 40 KHz
Območje razdalje 3 cm do 6m
Enote ms, mm ali palci
Masa 12 g
Dimenzije 43 x 20 x 17 mm
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
22
magnetne polarizacije odmakne za kot ρ, ki je odvisen od jakosti magnetnega polja H.
Upornost materiala je odvisna od omenjenega kota in je najmanjša, ko velja ρ = 90°.
Slika 3.7: Anizotropna magnetoupornost
Slika 3.8: Wheatstonov mostič
Za pretvornik je uporabljen Wheatstonov mostič. Upornost vseh štirih magnetouporov, ki
so po parih pravokotni na drugi par, kot kaže slika 3.8, je enaka R, skozi njih pa tok
poganja vhodna napetost Vb. Magnetno polje H povzroči, da se vektor magnetne
polarizacije v dveh nasproti ležečih uporih obrne v smeri toka, posledica česar je dvig
upornosti R. V preostalih dveh uporih se polarizacija obrne v obratni smeri toka, kar
povzroči padec upornosti R. V linearnem območju postane izhod ∆V sorazmeren jakosti
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
23
magnetnega polja H. Velikost linearnega območja je obratno sorazmerna občutljivosti
senzorja.
Prednosti magnetoupornih senzorjev so:
brezkontaktno delovanje,
robustna izvedba,
visoka občutljivost,
odpornost na mehanske obremenitve,
odpornost na vibracije,
hiter odziv in
majhne dimenzije.
Slabosti magnetoupornih senzorjev:
občutljivost na moteča magnetna polja,
močna magnetna polja lahko senzor poškodujejo,
vpliv temperature in
omejeno linearno območje.
Magnetouporni senzorji se uporabljajo za meritve hitrosti koles, meritve kotov, meritve
linearnih pomikov, meritve tokov, zaznavanje zemeljskega magnetnega polja, zaznavanje
kovin in za meritve magnetnega polja.
3.7.2 MODUL DIGITALNEGA KOMPASA
Digitalni kompas HMC6352 podjetja Honeywell je popolnoma integriran modul z
dvoosnimi megnetometri, mikroprocesorjem in algoritmi, potrebnimi za izračun smeri, ki
je podana v stopinjah. Modul vsebuje algoritme za umerjanje, temperaturno kompenzacijo
in zaščito pred neželenimi magnetnimi polji. Senzorsko enoto na sliki 3.9 je izdelal študent
David Šebjanič.
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
24
Slika 3.9: Senzorska enota z modulom digitalnega kompasa
Kompas ima naslednje lastnosti:
široko območje vhodne napetosti za uporabo z večino mikrokrmilnikov,
digitalni izhod po I2C vodilu v obliki z enim decimalnim številom,
umerjanje za natančnost do 2,5°,
samodejen izračun smeri, s čimer je programiranje poenostavljeno,
zaščita pred parazitskimi magnetnimi polji in
nizka poraba toka.
Preseganje maksimalnih vrednosti lahko trajno poškoduje vezje in senzorje ter povzroči
napake v delovanju.
Tabela 3.6: Lastnosti modula HMC6352
Lastnost Opis Min Tip Maks Enota
Napetost Priključna napetost 2,7 3 5,2 V
Tok
Spanje
Delovanje (3V)
Delovanje (5V)
1
1
2 10
µA
mA
mA
Obseg polja 0,1 - 0,75 G
Natančnost smeri 2,5 °
Ločljivost smeri 0,5 °
Ponovljivost 1 °
Polje (motnja) Občutljivost pade 20 10000 G
Delovna temperatura -20 70 °C
Izhod Smer (°), Mag x, Mag y
Velikost 11,7 x 14,7 x 13,7 mm
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
25
Varnostni ukrepi:
Kompasa ne smemo uporabljati ali shranjevati blizu močnih magnetnih polj, ki jih
povzročajo magneti, elektromotorji in večje tuljave.
Magnetna polja, močnejša od 10000 G ali 1 T, lahko trajno poškodujejo senzorje v
kompasu.
Kompas namestimo čim dlje od motečih magnetnih polj, ki jih povzročajo magneti,
motorji, kabli, tuljave, kovinska ohišja itd.
Vhodna napetost ne sme preseči 5,2 V.
Tabela 3.7: Nožice modula HMC6352
Shema priklopa modula kompasa je na sliki 3.10. Nožici 1 in 2 (SDA1 in SDA2) sta
notranje povezani, zato je vseeno, katero uporabimo. Ko je rdeča puščica na sliki 3.10
usmerjena proti severu, kompas prikazuje kot 0°.
Slika 3.10: Shema priklopa modula HMC6352 na mikrokrmilnik
Št. Nožice Ime nožice Opis Tip
1 SDA1 Serijska podatkovna linija Vhod/izhod
2 SDA2 Serijska podatkovna linija Vhod/izhod
3 GND Ozmeljitev Napajanje
4 SCL Serijska časovna linija Vhod
5 NC Ni povezano -
6 VDD Napetost V+ Napajanje
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
26
3.7.3 NAMESTITEV KOMPASA NA INVALIDSKI VOZIČEK VOIC
Senzorski modul z digitalnim kompasom smo namestili na konzolo na konzolo za
nameščanje senzorjev, kjer je najbolj oddaljen od motorjev in akumulatorjev, in sicer tako,
da pri usmeritvi vozička proti severu kompas kaže vrednost 0°.
Slika 3.11: Postavitev digitalnega kompasa na VOIC vozičku
3.7.4 UKAZNI PROTOKOL
Ukazni protokol določa vsebino podatkovnih zlogov, ki jih pošiljata gospodar in suženj
(HMC6352). Potem, ko gospodar pošlje 7-bitni naslov in LSB bit za branje/pisanje ter
sprejme ACK bit od sužnja, so naslednji eden do trije zlogi ukaz sužnju in njegovi
argumenti. Za zmanjšanje prenosov po vodilu so vsi odzivi sužnja vezani na zadnji ukaz
gospodarja. Vrednost LSB bita v naslovu je za vse ukaze za zapis enaka 0 (42(hex)). Za
ukazom za zapis sledi naslednji ukaz v ASCII ali šestnajstiški obliki, za njim pa lahko
sledita še dva njegova argumenta. Skupna oblika je torej:
[Naslov I2C + LSB] [Ukaz ASCII (hex)] [Argument 1. zlog] [Argument 2. zlog]
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
27
Kompas med vsakim podatkovnim zlogom pošlje ACK bit. Branje odzivov se vrši s
pošiljanjem naslova kompasa, kjer je vrednost LSB bita 1 (43(hex)), nato preberemo
najprej MSB zlog in zatem še LSB zlog.
Tabela 3.8: Ukazi kompasu HMC6352
3.7.5 EEPROM
HMC6352 ima na voljo EEPROM pomnilnik (ang. Electrically Erasable Programmable
Read-Only Memory), v katerem so podatki hranjeni tudi, ko kompas nima napajanja. V
EEPROM-u so zapisani podatki o načinu delovanja in ostale ključne nastavitve, vključno z
I2C naslovom kompasa.
Tabela 3.9: EEPROM naslovi kompasa
Ukaz
ASCII (hex)
Argument
1. zlog
Argument
2. zlog
Odziv
1. zlog
Odziv
2. zlogOpis
w (77) EEPROM naslov Podatek Zapis v EEPROM
r (72) EEPROM naslov Podatek Branje iz EEPROM-a
G (47) RAM naslov Podatek Zapis v RAM register
g (67) RAM naslov Podatek Branje iz RAM registra
S (53) Prehod v spanje
W (57) Izhod iz spanja
O (4F) Posodobitev offset vrednosti mostiča
C (43) Vstop v umerjanje
E (45) Izhod iz umerjanja
L (4C) Shrani način delovanja v EEPROM
A (41) MSB podatek LSB podatek Izračunaj in pošlji smer
EEPROM
naslov (hex)Opis zloga Tovarniška nastavitev
00 I2C naslov 42(hex)
01 Magnetometer X Offset MSB Tovarniška testna vrednost
02 Magnetometer X Offset LSB Tovarniška testna vrednost
03 Magnetometer Y Offset MSB Tovarniška testna vrednost
04 Magnetometer Y Offset LSB Tovarniška testna vrednost
05 Časovna zakasnitev 01(hex)
06 Število meritev za povprečenje 04(hex)
07 Verzija programske opreme >01(hex)
08 Zlog za nastavitev načina delovanja 50(hex)
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
28
3.7.6 NASTAVITVE DELOVANJA KOMPASA
HMC6352 ima dve veji nastavitev:
nastavitev načina delovanja (način pripravljenosti, poizvedbeni in kontinuirani) in
nastavitev izhodnega podatka kompasa (smer v stopinjah ali podatki
magnetometra).
3.7.6.1 NASTAVITEV NAČINA DELOVANJA
HMC6352 ima tri načine delovanja in možnost prehoda v spanje, ki zaustavi vgrajeni
mikroprocesor, s čimer je omogočeno varčevanje z energijo.
Načini delovanja so:
Način pripravljenosti: tovarniška nastavitev, pri kateri kompas čaka gospodarjeve
ukaze ali spremembo načina delovanja. Primerna je za pridobivanje podatkov v
želenih intervalih.
Poizvedbeni način: v tem načinu mikroprocesor čaka na ''A'' ukaz, pripravi
potrebne meritve in izračune in čaka na naslednje branje s strani gospodarja. Po
vsakem branju kompas ponovno preračuna smer in vrednosti shrani v registre. Ta
način delovanja je zasnovan tako, da gospodar dobi podatke kompasa takoj, brez
''A'' ukaza.
Kontinuirani način: kompas neprekinjeno izvaja meritve in preračune pri izbranih
frekvencah (1Hz, 5Hz, 10Hz ali 20Hz) in posodablja izhodne zloge brez ''A'' ukaza.
Gospodar vedno prebere najnovejši podatek o smeri. Pri tem načinu imamo na
voljo Set/Reset funkcije, ki preuredi senzorjeve magnetne domene v primeru
prevelikih magnetnih ali temperaturnih sprememb.
Način delovanja, frekvenco meritev in Set/Reset funkcijo izbiramo s pomočjo
nastavitvenega zloga, ki je shranjen v EEPROM pomnilniku in RAM registru. Po priklopu
napajanja se zlog, shranjen v EEPROM-u shrani v RAM register na naslovu 74(hex).
Vrednosti bitov v nastavitvenem zlogu:
Bit 7 = 0
Bita 6 in 5 (kontinuirani način)
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
29
Bit 4 (Set/Reset funkcija, 0 = Izklopljeno, 1 = Vklopljeno)
Bit 3 = 0
Bit 2 = 0
Bita 1 in 0 (izbira načina delovanja)
Celoten zlog je oblike:
3.7.6.2 NASTAVITEV IZHODNEGA PODATKA KOMPASA
Kompas se po ''A'' ukazu odzove z dvema zlogoma v binarnem zapisu. Ta je lahko
vrednost smeri v stopinjah ali podatek magnetometra, pri čemer so negativne vrednosti
zapisane v dvojiškem komplementu. Po priključitvi kompasa na napetost je izhodni
podatek vedno v obliki vrednosti smeri v stopinjah, druge izhodne podatke lahko dobimo s
spreminjanjem RAM registra na naslovu 4E(hex).
3.7.7 UMERJANJE KOMPASA
Kompas ima način za umerjanje, v katerega vstopimo s ''C'' in izstopimo z ''E'' ukazom. V
tem načinu moramo vrteti kompas na ravni površini in opraviti vsaj en obrat, pri čemer
Bit 6 Bit 5 Opis
0 0 Frekvenca 1Hz
0 1 Frekvenca 5Hz
1 0 Frekvenca 10Hz
1 1 Frekvenca 20Hz
Bit 1 Bit 0 Opis
0 0 Način pripravljenosti
0 1 Poizvedbeni način
1 0 Kontinuirani način
1 1 Ni dovoljeno
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
0 Frekvenca_H Frekvenca_L Set/Reset 0 0 Način delovanja_H Način delovanja_L
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
30
kompas opravlja več meritev na sekundo. Pomembno je, da kompas vrtimo s približno
enako kotno hitrostjo. Umerjanje je optimalno pri dveh obratih kompasa v časovnem
razponu 20 sekund. Umerjanje se opravlja v končnem delovnem okolju kompasa, kjer so
prisotne vse morebitne motnje.
3.7.8 POVPREČENJE
Povprečenje se uporablja za zmanjševanje podrhtavanja (ang. Jitter) izhodnega signala
kompasa, ki deluje tako, da izračuna povprečje izbranega števila meritev. Vrednost tega
števila zapišemo na EEPROM pomnilniško mesto z naslovom 06(hex), v šestnajstiškem
zapisu, izbiramo pa lahko vrednosti od 00(hex) do 10(hex), kar je v desetiškem zapisu od 0
do 16.
3.7.9 ČASOVNE ZAHTEVE
V tabeli so zapisane časovne potrebe kompasa od prejema ukaza do izvršitve.
Tabela 3.10: Časovne zahteve kompasa
Ukaz
ASCII (hex)Opis
Zakasnitev
(μsec)
w (77) Zapis v EEPROM 70
r (72) Branje iz EEPROM-a 70
G (47) Zapis v RAM register 70
g (67) Branje iz RAM registra 70
S (53) Prehod v spanje 10
W (57) Izhod iz spanja 100
O (4F) Posodobitev offset vrednosti mostiča 6000
C (43) Vstop v umerjanje 10
E (45) Izhod iz umerjanja 14000
L (4C) Shrani način delovanja v EEPROM 125
A (41) Izračunaj in pošlji smer 6000
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
31
4. PROGRAMSKA OPREMA
4.1 MPLAB IDE
MPLAB IDE je integrirano razvojno okolje (ang. Integrated Development Environment)
za vgrajene sisteme, ki deluje na osebnem računalniku, s katerim pišemo, spreminjamo in
razhroščujemo programe za mikrokrmilnike. Urejevalnik programerju pomaga pri pisanju
pravilne kode, saj takoj označi sintaktične nepravilnosti. Program vsebuje tudi projektni
organizator datotek, ki so del projekta, kot so izvorne kode, datoteke z glavami in
knjižnice. Ko je koda zgrajena, lahko izbiramo stopnjo optimizacije kode in izbiramo
lokacijo, kamor bodo na mikrokrmilnik shranjene posamezne spremenljivke. Ko napisano
kodo prevedemo, nam prevajalnik takoj sporoči morebitne napake in njihovo lokacijo, za
čimer popravimo napake in kodo ponovno prevedemo. Ta proces se med izdelavo
programa lahko večkrat ponovi, sploh pri kompleksnejših aplikacijah, vendar nam MPLAB
pomaga napake odpraviti čim hitreje.
Napisano kodo je potrebno preizkusiti, čemur sta namenjena razhroščevalnik in
programski simulator, ki simulira delovanje mikrokrmilnika. Tudi če elektronska vezja še
niso dokončana, lahko pričnemo s testiranjem na simulatorju, ki lahko sprejema vhodne
signale v mikrokrmilnik in simulira njegov odziv, meri čas izvajanja kode, omogoča pa
tudi izvajanje korak za korakom, da lahko opazujemo vse spremenljivke in signale.
Ko je vezje zgrajeno, lahko kodo preizkusimo tudi na fizičnem mikrokrmilniku, vendar se
pogosto zgodi, da ne deluje pravilno. Popravljanju semantičnih napak je namenjen
razhroščevalnik, ki omogoča izvajanje kode korak za korakom na mikrokrmilniku (ICSP).
Proces pisanja kode od začetka do delujoče kode se imenuje razvojni cikel, ki poteka po
shemi na sliki 4.1.
MPLAB IDE služi kot okolje z vsemi programskimi orodji za potek razvojnega cikla. Ko
smo zadovoljni z delovanjem kode, sledi še programiranje mikrokrmilnika s
programatorjem, kot je na primer PICKit 2.
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
32
Slika 4.1: Shema razvojnega cikla
Slika 4.2: Projektni organizator
Projektni organizator strukturira datoteke za urejanje in ostale datoteke, tako da se jih
lahko pošlje v prevajalnik ali zbirnik in na koncu v povezovalnik. Slednji ima nalogo
shranjevanja posameznih objektov in delov kode iz zbirnika ali prevajalnika ter knjižnic na
pravo pomnilniško mesto v mikrokrmilniku, obenem pa skrbi, da vsi moduli delujejo drug
z drugim in so povezani. Proces prevajanja in povezovanja se imenuje gradnja projekta.
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
33
Izvorne datoteke so tekstovne datoteke, ki so napisane po sintaktičnih pravilih zbirnika ali
prevajalnika. Ta jih spremenita v vmesne module strojne kode in mesta za reference do
funkcij in pomnilniških mest. Povezovalnik potem razdela ta mesta in združi module v
datoteke izvršljive strojne kode, izdela pa tudi datoteko za razhroščevanje, ki programu
MPLAB določi relacije med izvorno in strojno kodo.
4.2 PREVAJALNIK C18
Prevajalnik je računalniški program, ki prevede računalniško kodo višjega programskega
jezika v strojno kodo. Prevajalnik ustvari izvršljivo datoteko za drugačen sistem od tistega,
na katerem se izvaja sam, zato ga imenujemo tudi navzkrižni prevajalnik (ang. Cross-
compiler). Uporabljamo C18 prevajalnik podjetja Microchip, ki ima naslednje lastnosti:
skladnost z ANSI C 89' standardom,
deluje s programom MPLAB IDE,
možnost programiranja v zbirniku in C programskem jeziku v istem projektu,
generator kode z več nivojsko optimizacijo in
široka podpora knjižnic, ki vključujejo PWM, SPI, I2C, UART, USART ter
matematične knjižnice.
Programiranje v programu MPLAB IDE
Najprej je potrebno ustvariti projekt, v katerega bodo vključene vse izvorne programske
datoteke, datoteke z glavami in knjižnice. To storimo z izbiro Project→New. Prikaže se
okno na sliki 4.3, v katerega vpišemo ime projekta (Project Name) in pot, kamor bomo
projekt shranili (Project Directory).
Slika 4.3: Okno New Project
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
34
Nato moramo izbrati mikrokrmilnik, ki ga bomo uporabljali, kar storimo z izbiro
Configure→Select Device, v oknu, ki se odpre pa izberemo napravo (Device), v našem
primeru PIC18F458.
Slika 4.4: Okno Select Device
Preden začnemo s programiranjem, je potrebno v program MPLAB IDE vključiti
prevajalnik C18. Še preden lahko to storimo, je potrebno prevajalnik naložiti na
računalnik. Nato v programu MPLAB IDE izberemo Project→Select Language Toolsuite..
in v odprtem oknu pod »Active Toolsuite« izberemo Microchip C18 Toolsuite, spodaj pa
izberemo MPLAB C18 Compiler in MPLINK Object Linker ter se prepričamo, da njuni
poti (Location) vodita do mape, kamor smo naložili prevajalnik C18.
Slika 4.5: Okno Select Language Toolsuite
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
35
Slika 4.6: Okno Build Options
Zatem izberemo Project→Build Options.. →Project ter v odprtem oknu izberemo zavihek
Directories in pod »Show directories for« izberemo Library search path, kliknemo »New«
in izberemo pot »Inštalacijska mapa\C18\lib«. Nato pod »Show directories for« izberemo
še Linker-Script Search Path in določimo pot »Inštalacijska mapa\C18\bin\LKR«.
Nato odpremo drevesno strukturo projekta z izbiro View→Project.
Slika 4.7: Drevesna struktura projekta
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
36
Ta vsebuje mape, v katere bomo vstavili izvorne datoteke (Source Files), datoteke z
glavami (Header Files), ostale datoteke bo program izbral sam, glede na izbrani
mikrokrmilnik. Nove datoteke vstavimo z desnim klikom na mapo in izbiro Add Files...
4.3 VISUAL STUDIO
Microsoft Visual Studio je integrirano razvojno okolje (IDE), ki se uporablja za izdelavo
konzolnih aplikacij, aplikacij z grafičnimi vmesniki, spletnih aplikacij in strani, z uporabo
strojne kode, skupaj s kodo za platforme, ki jih podpirajo Microsoft Windows, Windows
Mobile, Windows CE, .NET Framework, .NET Compact Framework in Microsoft
Silverlight. Vključuje urejevalnik kode s podporo IntelliSense, ki povečuje hitrost
programiranja z zmanjševanjem najpogostejših napak tako, da ponuja samodokončevanje
ukazov, funkcij in spremenljivk, namige pri sintaktičnih napakah itd. Urejevalnik omogoča
tudi refaktoriranje kode, ki je proces spreminjanja notranje strukture programa brez vpliva
na njegovo zunanje obnašanje, z namenom, da se npr. izboljša njegova čitljivost.
Program ima vgrajen napreden razhroščevalnik, ki deluje tako na nivoju izvorne kode, kot
tudi na strojnem nivoju, z višjimi programskimi jeziki ali strojno kodo. Omogoča uporabo
pogojnih prekinitvenih točk, torej se prekinitev zgodi le, če je izpolnjen določen pogoj,
izvajanje korak za korakom, skoke v in preko funkcij ter popravljanje kode med
razhroščevanjem in nadaljevanje.
Pomembno orodje je tudi Windows Forms Designer ali izdelovalec Windows obrazcev, s
katerim ustvarimo grafični vmesnik za operacijski sistem Windows. Uporablja tehnologijo
za .NET Framework, nabor knjižnic, ki poenostavijo pogosta opravila aplikacij, kot je na
primer branje iz datotečnega sistema in pisanje vanj. Aplikacije z grafičnim vmesnikom
lahko izpisujejo podatke, zahtevajo interakcijo uporabnika, ali se povezujejo z drugimi
računalniki.
Visual Studio v osnovi omogoča uporabo programskih jezikov, kot so C, C++, Visual
Basic.NET, C#, F#, XML/XSLT, HTML/XHTML, JavaScript in CSS, vendar lahko z
nadgraditvijo uporabljamo jezike.
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
37
Slika 4.8: Razvojno okolje Visual Studio
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
38
5. IZDELAVA PROGRAMA ZA PIC MIKROKRMILNIK NA
SENZORSKI ENOTI DIGITALNEGA KOMPASA
Program za PIC mikrokrmilnik na senzorski enoti digitalnega kompasa vsebuje tri izvorne
datoteke:
Can.c,
MainI2C.c in
Sensor.c
ter štiri datoteke z glavami:
Can.h,
CANDef.h,
MainI2C.h in
delays.h.
Slika 5.1: Drevesna struktura projekta
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
39
Can.c datoteka vsebuje vse funkcije, potrebne za CAN komunikacijo. V datoteki Sensor.c
se vrši glavni program senzorske enote, ki skrbi za CAN komunikacijo in za klic funkcij za
komunikacijo mikrokrmilnika z digitalnim kompasom preko I2C vodila.
Del programske kode datoteke Sensor.c:
void main() //Glavni program
struct CANMessage RX_Message, TX_Message; //Definicija dveh
struktur sporočila, ena za sprejem, ena za pošiljanje
short int MSB, LSB; //Definicija spremenljivk
za dva zloga kompasovega podatka
CANInit(); //Inicializacuija CAN modula
INTCONbits.GIE = 1; //Vklopimo prekinitve
INTCONbits.PEIE = 1;
RCONbits.IPEN = 1; //Vklopimo prioritete prekinitev
IPR1bits.RCIP = 0; // Vse periferne prekinitve, vključno z RS232
so nizke
IPR3 = 0xFF;
PIR1 = 0x00;
TRISC = 0b00011000;
SetupI2C(); //funcija za inicializacijo I2C
DataAveraging(); //funkcija za povprečenje
OperationalMode();
//ReadFromMemory(&LSB);
while(1)
if(CANRXMessageIsPending()) //se izvede, če je
prisotno sporočilo na CAN vodilu
RX_Message = CANGet(); //preberemo sporočilo
if(RX_Message.Address == MY_REC_ID) //se izvede, če je CAN
naslov sporočila enak naslovu kompasa 0x11
//ReadData(&MSB, &LSB); // funkcija za branje v
Standby mode
ReadLastData(&MSB, &LSB); // funkcija za branje v
Continuous mode
TX_Message.Address = MY_RESPONSE_ID; //naslov kompasa
za pošiljanje 0xBB
TX_Message.Ext = 0;
TX_Message.NoOfBytes = 3; //število zlogov
v sporočilu
TX_Message.Remote = 0;
TX_Message.Priority = 0;
TX_Message.Data[0] = MSB; //prvi podatkovni
zlog
TX_Message.Data[1] = LSB; //drugi
podatkovni zlog
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
40
CANPut(TX_Message); //pošljemo
sporočilo
Na začetku main funkcije definiramo dve strukturi tipa CANMessage (definicija v Can.h),
RX_Message za sprejeta sporočila in TX_Message za sporočila, ki jih želimo poslati.
Definiramo tudi spremenljivki MSB in LSB tipa short int, v kateri shranjujemo dva zloga
podatkov iz kompasa in jih pošiljamo na CAN vodilo. Zatem sledi vklop prekinitev in
njihovih prioritet. Potem sledijo funkcije za inicializacijo I2C komunikacije, povprečenje in
izbiro načina delovanja kompasa.
Zatem vstopimo v neskončno zanko, v kateri najprej z ukazom
CANRXMessageIsPending() preverimo, ali v medpomnilniku obstaja neprebrano
sporočilo in če obstaja, ga shranimo v spremenljivko RX_Message z ukazom CANGet().
Nato preverimo, ali se naslovno polje v sporočilu ujema s sprejemnim naslovom za klic
naprave (senzorske enote kompasa) in če se, sledi klic funkcije ReadLastData() ali
ReadData(), odvisno od načina delovanja, s katero pridobimo podatke iz digitalnega
kompasa. Zatem opremimo strukturno spremenljivko TX_Message z odzivnim naslovom
in podatki ter jo pošljemo po CAN vodilu.
V datoteki MainI2C.c so definirane funkcije za:
inicializacijo I2C komunikacije: SetupI2C()
izbiro povprečenja: DataAveraging()
izbiro načina delovanja kompasa: OperationalMode()
branje iz RAM ali EEPROM pomnilnika: ReadFromMemory(short in *Data)
branje v načinu pripravljenosti (Standby): ReadData(*MSB, *LSB)
branje v kontinuirnem načinu (Continuous): ReadLastData();
Programska koda datoteke MainI2C.c s komentarji in razlago:
#include <p18f458.h> // Vključitev datotek z glavami
#include "MainI2C.h" //
#include <i2c.h> //
#include <delays.h> //
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
41
void SetupI2C(void) //nastavitev I2C
OpenI2C(MASTER, SLEW_OFF); //PIC je gospodar, hitrost je
100kHz
SSPADD = 49; //SSPADD =
((Fosc/BitRate)/4)-1 = ((20Mhz/100kHz)/4)-1 = 49
V začetku vključimo datoteke z glavami, med katerimi so datoteke »p18f458.h«, »i2c.h« in
»delays.h« vključene v inštalacijski paket prevajalnika C18, datoteko »MainI2C.h« pa smo
ustvarili sami. Sledi definicija funkcije SetupI2C(), v kateri uporabimo ukaz OpenI2C, ki
ima parametra MASTER in SLEW_OFF. Prvi definira mikrokrmilnik kot gospodarja,
drugi pa hitrost vodila 100kHz. Definiramo še vrednost SSPADD registra, katerega
spodnjih sedem bitov v načinu gospodarja generira vrednost za hitrost prenosa podatkov.
Izračuna se po enačbi:
𝑆𝑆𝑃𝐴𝐷𝐷 =
𝐹𝑜𝑠𝑐 𝐻𝑖𝑡𝑟𝑜𝑠𝑡 𝑝𝑟𝑒𝑛𝑜𝑠𝑎⁄
4− 1 =
20𝑀𝐻𝑧 100𝑘𝐻𝑧⁄
4− 1 =
= 49
(5.1)
//***********************************************************
***********************************************************//
// Funkcija: DataAveraging()
//
// Opis: Funkcija za izbiro povprečenja (zmanjšanje
podrhtavanja), možne so vrednosti od 0 do 16 vzorcev
//
// Ukaz: 0x77 - Pisanje v EEPROM
//
// Naslovi: 0x42 - I2C naslov kompasa (pisanje)
// 0x06 - EEPROM naslov za vrednost
povprecenja
//
// Vrednosti povprečenja: 0x00 - Brez povprečenja
// 0x10 - 16 vzorcev za
povprečenje
//
//***********************************************************
***********************************************************//
void DataAveraging()
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
42
StartI2C(); //Start signal
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C(0x42); //Naslov kompasa (pisanje)
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C(0x77); //Ukaz za zapis v EEPROM
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C(0x06); //EEPROM naslov za zapis
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C(0x10); //Vrednost povprečenja
IdleI2C(); //Čakanje na mirovanje vodila
StopI2C(); //Stop signal
Funkcija DataAveraging() vsebuje niz ukazov, s katerimi v EEPROM pomnilnik na naslov
0x06 shranimo vrednost števila vzorcev za povprečenje. Niz ukazov začnemo z ukazom
StartI2C(), ki ustvari START signal na vodilu zaključimo s StopI2C(), ki ustvari STOP
signal. Med posameznimi ukazi uporabimo ukaz IdleI2C(), ki ustvari zakasnitev, dokler
vodilo ni v mirovnem stanju. Najprej po vodilu pošljemo naslov naprave, s katero želimo
komunicirati, v našem primeru 42 (hex). Nato pošljemo ukaz WriteI2C(0x77) za zapis v
EEPROM, za katerim sledita naslov EEPROM lokacije z ukazom WriteI2C(0x06) in
vrednost za povprečenje z ukazom WriteI2C(0x10), ki pomeni 16 vzorcem meritev za
povprečenje.
//***********************************************************
***********************************************************//
// Funkcija: OperationalMode()
//
// Opis: Funkcija za izbiro načina delovanja (OM)
//
// Ukazi: 0x47 - Pisanje v RAM
// 0x77 - Pisanje v EEPROM
// 0x4C - Zapis OM iz RAM-a v EEPROM
//
// Naslovi: 0x42 - I2C naslov kompasa (pisanje)
// 0x74 - Naslov RAM registra za OM
// 0x08 - EEPROM naslov za OM
//
// Vrednosti OM: 0x50 - Standby mode
// 0x51 - Query mode
// 0x72 - Continuous mode 20Hz
//
//***********************************************************
***********************************************************//
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
43
void OperationalMode()
StartI2C(); //Start signal
WriteI2C(0x42); //Naslov kompasa (pisanje)
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C(0x47); //Ukaz za pisanje v RAM
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C(0x74); //Naslov RAM registra, v katerega
zapisujemo
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C (0x72); //OM zlog --->continuous mode 20Hz
//WriteI2C (0x50); //OM zlog --->standby mode
//WriteI2C (0x51); //OM zlog --->query mode
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C(0x4C); //Ukaz za prenos OM zloga iz RAM-a
v EEPROM
IdleI2C(); //Čakanje na mirovanje vodila
StopI2C(); //Stop signal
Funkcija OperationalMode() je namenjena izbiri načina delovanja kompasa, kar se izvrši z
zapisom vrednosti OM zloga v RAM register na lokaciji 0x74. Niz ukazov začnemo z
ukazom StartI2C() in zaključimo s StopI2C(), med ukazi uporabimo IdleI2C(). Najprej z
ukazom WriteI2C(0x42) pošljemo naslov kompasa. Zatem mu pošljemo ukaz
WriteI2C(0x47), ki pomeni pisanje v RAM pomnilnik. Nato moramo posredovati naslov
lokacije RAM registra, v katerega želimo pisati, kar storimo z ukazom WriteI2C(0x74), za
tem ukazom pa sledi še zapis podatkov z WriteI2C(0x72), ki pomeni kontinuirni način
delovanja s frekvenco 20 Hz. V programski kodi sta še ukaza za ostala dva načina
delovanja, ki sta zakomentirana (izpuščena iz prevajanja). Na koncu je uporabljen še ukaz
WriteI2C(0x4C), ki OM zlog iz RAM registra shrani tudi v EEPROM pomnilnik.
//***********************************************************
***********************************************************//
// Funkcija: ReadFromMemory()
//
// Opis: Funkcija za branje iz RAM-a ali EEPROM-a
//
// Ukazi: 0x67 - Branje iz RAM-a
// 0x72 - Branje iz EEPROM-a
//
// Naslovi: 0x42 - I2C naslov kompasa (pisanje)
// 0x43 - I2C naslov kompasa (branje)
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
44
// 0x74 - RAM register za OM
// 0x08 - EEPROM naslov za OM
//
// Vrednosti OM: 0x50 - Standby mode
// 0x51 - Query mode
// 0x72 - Continuous mode 20Hz
//
//***********************************************************
***********************************************************//
void ReadFromMemory(short int *Data)
StartI2C(); //Start signal
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C(0x42); //Naslov kompasa (pisanje)
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C(0x67); //Ukaz za branje iz EEPROM-a
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C(0x74); //EEPROM naslov za OM zlog
IdleI2C(); //Čakanje na mirovanje vodila
StopI2C(); //Stop signal
Delay10TCYx(40); //Zakasnitev 80us
StartI2C(); //Start signal
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C(0x43); //Naslov kompasa (branje)
IdleI2C(); //Čakanje na mirovanje vodila
(*Data) = ReadI2C(); //Shranimo prebrano vrednost
NotAckI2C(); //NACK signal
StopI2C(); //Stop signal
Funkcija ReadFromMemory(short int *Data) se uporablja za branje enega zloga iz RAM
ali EEPROM pomnilnika. Niz ukazov začnemo z ukazom StartI2C(), med ukazi
uporabimo IdleI2C(). Najprej z ukazom WriteI2C(0x42) pošljemo naslov kompasa. Nato
pošljemo ukaz za branje iz RAM-a z WriteI2C(0x67) ali EEPROM-a z WriteI2C(0x72).
Zatem sledi naslov lokacije, iz katere želimo brati z WriteI2C(0xnaslov). Potem pošljemo
STOP signal in po zakasnitvi ponovno pošljemo START signal. Tokrat pošljemo
kompasov naslov za branje z ukazom WriteI2C(0x43), za katerim preberemo podatek v
*Data z ukazom ReadI2C(). Ko je vrednost shranjena pošljemo NACK signal in na koncu
še STOP.
//***********************************************************
***********************************************************//
// Funkcija: ReadLastData()
//
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
45
// Opis: Funkcija za branje vrednosti kompasa, SAMO V
CONTINUOUS MODE!
//
// Naslov: 0x43 - I2C naslov kompasa (branje)
//
//***********************************************************
***********************************************************//
void ReadLastData(short int *MSB_Data, short int *LSB_Data)
LATC=0xff; //postavimo bite porta C na 1
(vklopimo LED)
StartI2C(); //Start signal
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C(0x43); //naslov kompasa (branje)
IdleI2C(); //Čakanje na mirovanje vodila
(*MSB_Data) = ReadI2C(); //Shranimo MSB zlog
AckI2C(); //ACK signal
IdleI2C(); //Čakanje na mirovanje vodila
(*LSB_Data) = ReadI2C(); //Shranimo LSB zlog
NotAckI2C(); //NACK signal
IdleI2C(); //Čakanje na mirovanje vodila
StopI2C(); //Stop signal
LATC=0; //postavimo bite porta C na 0
(izklopimo LED)
V kontinuirnem načinu za branje vrednosti iz kompasa uporabimo funkcijo
ReadLastData(short int *MSB_Data, short int *LSB_Data). Ker v kontinuirnem načinu ni
potreben »A« ukaz za branje vrednosti kompasa, z branjem vrednosti vedno dobimo svež
podatek. Najprej z ukazom LATC = 0xFF vklopimo LED diodo na portu C. Niz ukazov za
komunikacijo začnemo z ukazom StartI2C() in zaključimo s StopI2C(), med ukazi
uporabimo IdleI2C(). Najprej po vodilu pošljemo naslov za branje iz kompasa z ukazom
WriteI2C(0x43). Potem najprej preberemo MSB zlog podatka kompasa z ukazom
*MSB_Data = ReadI2C(), nato sledi ACK signal, zatem pa preberemo še LSB zlog z
ukazom *LSB_Data = ReadI2C(), za katerim sledi NACK signal. Na koncu izklopimo
LED diodo na portu C z ukazom LATC = 0.
//***********************************************************
***********************************************************//
// Funkcija: ReadData()
//
// Opis: Funkcija za branje vrednosti kompasa, SAMO V
STANDBY MODE!
//
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
46
// Ukaz: 0x41 - "A" ukaz za meritev in izračun
smeri
//
// Naslovi: 0x42 - I2C naslov kompasa (pisanje)
// 0x43 - I2C naslov kompasa (branje)
//
//***********************************************************
***********************************************************//
void ReadData(short int *MSB_Data, short int *LSB_Data)
LATC=0xff; //postavimo bite porta C na 1
(vklopimo LED)
StartI2C(); //Start signal
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C(0x42); //Naslov kompasa je 0x42
(pisanje)
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C(0x41); //"A" ukaz za meritev in
izračun smeri
IdleI2C(); //Čakanje na mirovanje vodila
StopI2C(); //Stop signal
Delay10TCYx(40); //zakasnitev 80us
StartI2C(); //Start signal
IdleI2C(); //Čakanje na mirovanje vodila
WriteI2C(0x43); //Naslov kompasa (branje)
IdleI2C(); //Čakanje na mirovanje vodila
(*MSB_Data) = ReadI2C(); //Shranimo MSB zlog
IdleI2C(); //Čakanje na mirovanje vodila
AckI2C(); //ACK signal
IdleI2C(); //Čakanje na mirovanje vodila
(*LSB_Data) = ReadI2C(); //Shranimo LSB zlog
NotAckI2C(); //NACK signal
IdleI2C(); //Čakanje na mirovanje vodila
StopI2C(); //Stop signal
LATC=0; //postavimo bite porta C na 0
(izklopimo LED)
V poizvedbenem načinu za branje vrednosti kompasa uporabimo funkcijo ReadData(short
int *MSB_Data, short int *LSB_Data), ki za vsako branje kompasu pošlje ukaz »A«.
Najprej z ukazom LATC = 0xFF vklopimo LED diodo na portu C. Niz ukazov začnemo z
ukazom StartI2C(), med ukazi uporabimo IdleI2C(). Po vodilu pošljemo naslov kompasa
za pisanje z ukazom WriteI2C(0x42). Zatem sledi »A« ukaz, ki ga pošljemo z ukazom
WriteI2C(0x41). Nato pošljemo STOP signal in po zakasnitvi ponovno START. Tokrat
pošljemo kompasov naslov za branje z ukazom WriteI2C(0x43). Potem najprej preberemo
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
47
MSB zlog podatka kompasa z ukazom *MSB_Data = ReadI2C(), nato sledi ACK signal,
zatem pa preberemo še LSB zlog z ukazom *LSB_Data = ReadI2C(), za katerim sledi
NACK signal. Na koncu izklopimo LED diodo na portu C z ukazom LATC = 0.
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
48
6. DOPOLNITEV UPORABNIŠKEGA PROGRAMA ZA
OSEBNI RAČUNALNIK
Izdelan je bil program za mikrokrmilnik PIC18F458, ki skrbi za komunikacijo sistemov na
vozičku z osebnim računalnikom, nato pa je bilo v okviru številnih projektov v okolju
Visual Studio izdelanih več programov za vodenje, ki med drugim služijo tudi kot
uporabniški vmesnik. Ta uporabnikom v večini primerov omogoča izpis stanja senzorjev,
nameščenih na voziček, obenem pa tudi nekaj preprostih ukazov za upravljanje z
vozičkom, kot so na primer ukazi naprej, nazaj, levo in desno. Za naše potrebe smo enega
od predhodno izdelanih programov dodelali. Celoten program je zelo obsežen in vsebuje
funkcije ostalih projektov, zato bomo opisali le najpomembnejše dele in naše spremembe.
Slika 6.1: Okno uporabniškega vmesnika
Podatki senzorjev VOIC vozička se preko RS-232 vodila prenašajo na osebni računalnik,
prav tako pa se po istem vodilu prenašajo ukazi vozičku. Vodilo RS-232 je serijsko, po
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
49
njemu pa lahko naenkrat prenesemo le vrednost, manjšo od 256, zato pošiljamo sporočila z
več zaporednimi zlogi. Že obstoječi senzorji so vedno oddajali sporočila s podatkom
velikosti enega zloga skupaj s svojim naslovom. Podatki in naslovi so se shranjevali v
tabelo RS232Data z zaporednim povečevanjem indeksa. Možne vrednosti podatkov niso
bile nikoli enake vrednostim naslovov, zato je bilo razlikovanje med naslovi in podatki v
tabeli enostavno. Kompas HMC6352 v sporočilu oddaja podatek velikosti dveh zlogov in
svoj naslov, ki sta lahko v naključnem primeru enaka, zato moramo točno vedeti, katere
vrednosti v tabeli so podatek in katere naslov.
void PassingData() //Funkcija za branje sprejetih podatkov Free = false; int MSB, LSB, heading, celi_del, decimalni_del; //Definicije spremenljivk while (ReadPointer != WritePointer) //Dokler ReadPointer ni enak WritePointer int Naslov = (int)RS232Data[ReadPointer]; //V spr. Naslov shrani podatek iz tabele RS232Data z indeksom ReadPointer if (Naslov > 81) //Če je naslov večji od najmanjše možne vrednosti naslova switch (Naslov) //Če je naslov.. case 0xAA: //Primer: senzorska enota z naslovom 0xAA textBox7.Text = Convert.ToInt16(RS232Data[((ReadPointer + 1) % RS232Data.Length)]).ToString(); //izpis vrednosti iz tabele z indeksom, povečanim za ena ReadPointer = ((ReadPointer + 2) % RS232Data.Length); //povečanje indeksa za branje break; case 0xBB: //naslov kompasa MSB = RS232Data[((ReadPointer + 1) % RS232Data.Length)]; //v spremenljivko MSB shranimo naslednjo vrednost od naslova LSB = RS232Data[((ReadPointer + 2) % RS232Data.Length)]; //v spremenljivko LSB shranimo naslednjo vrednost heading = (MSB << 8) + LSB; //pretvorba dveh zlogov v podatek decimalni_del = heading % 10; //pretvorba za izpis celi_del = heading / 10; //pretvorba za izpis textBox17.Text = Convert.ToString(celi_del) + "." + Convert.ToString(decimalni_del); //izpis vrednosti kompasa (kot) dejanski_kot = Convert.ToDecimal(textBox17.Text); // shranimo vrednost kota v spremenljivko dejanski_kot //kot1 = Convert.ToDouble(textBox17.Text); //timer3.Start(); ReadPointer = ((ReadPointer + 3) % RS232Data.Length);
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
50
break; default: ReadPointer = ((ReadPointer + 1) % RS232Data.Length); break; else ReadPointer = ((ReadPointer + 1) % RS232Data.Length); Free = true;
V funkciji najprej definiramo vse potrebne spremenljivke. Spremenljivki ReadPointer in
WritePointer sta definirani kot globalni spremenljivki z vrednostjo 0. Slednja se uporablja
za vrednosti indeksov v RS232Data tabeli, prva pa branje specifičnih indeksov v isti tabeli.
Ob vstopu v funkcijo PassingData() ima spremenljivka WritePointer vrednost števila
elementov, shranjenih v tabeli RS232Data (prvi indeks ima vrednost 0), spremenljivka
ReadPointer pa vrednost nič. V zanki while preverjamo, ali imata ti spremenljivki enako
vrednost, kar bi pomenilo, da smo pregledali celotno tabelo. Dokler se to ne zgodi,
shranjujemo vrednosti naslovov v spremenljivko Naslov. Dejstvo je, da ima tabela na
mestu z indeksom 0 shranjeno vrednost naslova naprave, naslednji dve lokaciji pa sta
odvisni od naprave same (število zlogov podatkov), zato prvi naslov v tabeli shranimo z
ukazom Naslov = (int)RS232[ReadPointer]. V nadaljevanju preverimo, katera naprava ima
naslov, shranjen v spremenljivki Naslov. Če gre za senzor, ki ima v programski kodi
naslov 0xAA in je dodan kot primer, potem vemo, da je vrednost v tabeli z indeksom
ReadPointer + 1 njegov podatek, ki ga v tem primeru izpišemo v polju textBox7. Nato
moramo povečati vrednost ReadPointer za 2, da pridemo do naslednjega naslova v tabeli in
ga shranimo v spremenljivko Naslov. V kolikor je vrednost spremenljivke Naslov enaka
0xBB, vemo da gre za naslov kompasa, torej sta vrednosti v tabeli z indeksoma
ReadPointer + 1 in ReadPointer + 2 dva zloga podatka iz kompasa, najprej MSB in potem
še LSB. Kompas pošilja vrednosti od 0 do 3599 v dveh zlogih, ki ju združimo tako, da
MSB zlog bitno zamaknemo za osem mest v levo in prištejemo LSB. Nato ločimo še celi
in decimalni del in vrednost kota izpišemo v polju textBox17, obenem pa to vrednost
shranimo v spremenljivko dejanski_kot, ki jo bomo uporabili kasneje. Zatem moramo še
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
51
povečati vrednost ReadPointer za 3, da pridemo do naslednjega naslova v tabeli
RS232Data.
V istem programu smo potem izdelali aplikacijo, v kateri določimo, kam naj se voziček
VOIC obrne s pomočjo digitalnega kompasa. Upravljanje motorjev vozička se vrši s
pomočjo dveh digitalnih potenciometrov, ki simulirata enake vrednosti kot jih dajeta
potenciometra v krmilni palici. Ukazi za premikanje so omejeni na premikanje naprej,
nazaj, levo, desno, naprej levo, naprej desno, nazaj levo in nazaj desno, možne so tri
hitrosti, ki jih izberemo v uporabniškem vmesniku, vendar sta v praksi uporabni le višji
dve hitrosti (2 in 3), najnižjo hitrost pa uporabljamo, ko je voziček dvignjen in sta
pogonski kolesi v zraku. Aplikacijo smo zasnovali tako, da v uporabniški vmesnik vpišemo
želeno orientacijo (kot) in pritisnemo pojdi, voziček pa se na mestu obrne na želen kot.
Ukazi, potrebni za obračanje vozička so:
SendDataToPIC(0x08, Speed); // obračanje v levo
SendDataToPIC(0x04, Speed); // obračanje v desno
SendDataToPIC(0x00, 0x00); // stop
Vrednost spremenljivke Speed izberemo v spustnem meniju Hitrost. V programski kodi je
dodano tudi preverjanje bližine želenega kota, tj. kako daleč od želenega kota smo, vendar
ta del kode ni ključen za delovanje in ga tukaj ne bomo opisovali. Ker se pri 359,9° zgodi
prehod na 0°, je potrebno v programsko kodo dodati algoritem, ki določi, v katero stran se
mora voziček zavrteti, da bo najhitreje na cilju.
Programska koda:
private void obrni() //funkcija za obračanje byte Speed = GetSpeedFromBox(); if (blizu == true) //zastavica, ki se postavi, ko smo blizu želene pozicije Speed = 0x02; //če smo blizu, zmanjšamo hitrost //dec = Convert.ToDecimal(textBox17.Text); referenci_kot = Convert.ToDecimal(textBox19.Text); //referenčni kot je željena pozicija if (dejanski_kot > referenci_kot) // če je dejanski kot večji od želenega if ((dejanski_kot - referenci_kot) <= 180) //desno
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
52
SendDataToPIC(0x08, Speed); //pojdi levo textBox20.Text = "levo"; //izpis smeri else SendDataToPIC(0x04, Speed); //pojdi desno textBox20.Text = "desno"; //izpis smeri if (dejanski_kot < referenci_kot) // če je dejanski kot manjši od želenega if ((referenci_kot - dejanski_kot) <= 180) SendDataToPIC(0x04, Speed);//pojdi desno textBox20.Text = "desno"; //izpis smeri else SendDataToPIC(0x08, Speed); //pojdi levo textBox20.Text = "levo"; //izpis smeri
Funkcija obrni() se izvede, ko kliknemo na gumb Pojdi (zastavica gumb_pojdi = true). V
njej najprej shranimo vrednost želenega kota v spremenljivko referencni_kot, vrednost
spremenljivke dejanski_kot pa je definirana v funkciji PassingData(), ki je bila opisana
prej. Nato moramo preveriti, ali je dejanski kot večji od želenega in če je, preverimo, ali je
razlika med dejanskim in želenim kotom manjša ali enaka 180. V tem primeru moramo
voziček obrniti v levo z ukazom SendDataToPIC(0x08, Speed), sicer pa v desno z ukazom
SendDataToPIC(0x04, Speed).
V kolikor je dejanski kot manjši od želenega, preverimo, ali je razlika med želenim in
dejanskim kotom manjša ali enaka 180 in v tem primeru obrnemo voziček v desno z
ukazom SendDataToPIC(0x04, Speed), sicer pa v levo z ukazom SendDataToPIC(0x08,
Speed).
V tej fazi se bo voziček v primeru razlike med želenim in dejanskim kotom obračal,
potrebno pa je dodati še algoritem, ki določi, kdaj se mora obračanje ustaviti:
private void textBox17_TextChanged(object sender, EventArgs e) if (gumb_pojdi == true)
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
53
if ((dejanski_kot >= (referenci_kot - 10)) && (dejanski_kot <= (referenci_kot + 10))) //območje +- 10° od želenga kota SendDataToPIC(0x00, 0x00); //ustavi voziček textBox20.Text = "stop";
Funkcija textbox17_TextChanged se izvede vedno, ko se osvežijo podatki kompasa. V njej
preverimo, ali je postavljena zastavica za gumb Pojdi, nato pa preverimo, ali je dejanski
kot v območju ±10° od želenega kota. V tem primeru ustavimo voziček. Omenjeno
območje je pogojeno z izbrano hitrostjo vozička, saj je lahko osveževanje podatkov
kompasa prepočasno in vrednost želenega kota preskočimo.
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
54
7. REZULTATI
Prvi od rezultatov je bil uspešno izdelan program za I2C komunikacijo med
mikrokrmilnikom PIC18F458 in digitalnim kompasom HMC6352. Ta vsebuje funkcije za
izbiro enega od treh možnih načinov delovanja kompasa, funkcije za branje iz RAM in
EEPROM pomnilniških mest, izbiro načina povprečenja in branje podatkov kompasa v
načinu pripravljenosti in kontinuirnem načinu. Potem je bil prirejen program glavnega
mikrokrmilnika v omrežju CAN, ki posreduje podatke preko vodila RS-232 osebnemu
računalniku. Uporabniški vmesnik, ki deluje na osebnem računalniku, je bil prirejen tako,
da lahko izpisuje vrednost kota orientacije digitalnega kompasa. Vanj so bila dodana tudi
aplikacija za praktično testiranje delovanja kompasa, ki nam omogoča izbiro želenega kota
orientacije vozička, voziček pa se sam obrne na želen položaj. V okviru te aplikacije smo
dobljene podatke prenesli v programsko okolje Matlab. Rezultat delovanja kompasa v
sistemu je prikazan na sliki 7.1, na kateri je prikazana razlika med dejanskim in
referenčnim kotom pri obračanju vozička v odvisnosti od časa.
Slika 7.1: Odziv vozička VOIC, vrtenje na mestu
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
55
Razvidno je, da se je voziček v primeru razlike med dejanskim in referenčnim kotom pričel
obračati v pravilni smeri in da se je ustavil, ko je dosegel referenčno vrednost. Pri času t =
30 s lahko opazimo razliko v kotni hitrosti, ki se zgodi pri spremembi smeri obračanja
vozička in je posledica obračanja prvih koles. Pri času t = 60 s, je opazen statični pogrešek
okoli 5°, kar je za to aplikacijo še sprejemljivo, saj je območje ustavitve zaradi hitrosti
osveževanja senzorja omejeno na ±10° od želenega kota. Ker motorji vozička niso
regulirani, se voziček po prejetju signala za ustavitev zaradi njegove gibalne količine ne
ustavi nemudoma, zato lahko rečemo, da gre pri odzivu za dober rezultat. V primeru
drugačnega načina pošiljanja informacij motorjema bi se pojavil problem hitrosti
osveževanja podatkov na osebnem računalniku, na katerem teče program za vodenje.
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
56
8. SKLEP
Cilj magistrske naloge je z uspešno izdelavo programske opreme za delovanje kompasa in
njegovo komunikacijo z ostalimi sistemi ter uspešnimi testiranji izpolnjen. Med delom smo
naleteli na številne probleme, ki niso bili neposredno povezani z magistrskim delom,
vendar so kljub temu onemogočali delo. Tako smo morali popraviti številne sisteme na
invalidskem vozičku, ki naj bi že delovali, npr. DC-DC pretvornik, senzorji razdalje,
vodila ipd.
Rezultati magistrske naloge kažejo, da je digitalni kompas deloval, vendar pa je njegova
uporaba vprašljiva zaradi njegovih karakteristik, kot je statični pogrešek 2,5°, vpliv motenj
in pomanjkanje kompenzacije naklona, vsaka stopinja naklona senzorja lahko v najslabšem
primeru doda 2 stopinji pogreška v izračunu smeri. Kompas je teoretično sposoben
izračunati smer in poslati podatek vsakih 6 ms, vendar je temu potrebno dodati še čase
komunikacije preko vodil I2C, CAN in RS-232, tako da se podatek v uporabniškem
vmesniku spremeni vsakih 250 ms, kar je prepočasi za morebiten izračun kotne hitrosti in
reguliranje motorjev. Voziček se za 360° lahko obrne v približno štirih sekundah, kar v
uporabniškem vmesniku pomeni 16 osvežitev podatka o orientaciji na obrat, torej so
razlike med osvežitvami lahko tudi večje od 20°, kar predstavlja težave pri vodenju
vozička. Vpliv motenj je velik, zato je zelo pomembna postavitev senzorske enote
kompasa na vozičku. Namestitev kompasa blizu delujočega motorja popači meritev tudi za
60°, zato smo kompas namestili na konzolo za senzorje razdalje, ki je najbolj oddaljena od
motorjev. Ker je namen uporabe kompasa pomoč pri navigaciji med prostori v domu, je
večino motenj moč predvideti in odstraniti ali jih obiti.
Aplikacija, ki smo jo razvili za testiranje kompasa, je delovala po pričakovanjih, vendar bi
jo bilo moč še izboljšati, pred tem pa bi bilo potrebno izboljšati način pošiljanja ukazov do
motorjev. Ta je zaenkrat osnovan na pošiljanju signalov, ki jih simulirata dva digitalna
potenciometra, program mikrokrmilnika, ki ju vodi, pa nam ni na voljo v nobeni od
dokumentacij avtorjev krmilnega vezja. Tako sta nam pri vrtenju na voljo le ukaza za levo
in desno, brez možnosti regulacije, kar je v praksi neuporabno. Ena od možnih aplikacij bi
bila tudi vožnja naravnost z regulacijo smeri, ki je trenutno neizvedljiva prav zaradi načina
pošiljanja ukazov motorjema.
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
57
V prihodnosti bi bilo smiselno razmisliti o drugačnih pristopih za navigacijo vozička.
Možnosti je več, npr. induktivne zanke ali magneti v tleh, črte za sledenje na tleh,
označevanje prostorov, največ pozornosti pa bi bilo vredno nameniti robotskemu
mapiranju in vizualni navigaciji s pomočjo kamer.
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
58
9. VIRI
[1] Pogorelc, J. Uvod v programiranje mikrokrmilnikov. Univerza v Mariboru,
Fakulteta za elektrotehniko in informatiko, 2005
[2] Medvešek, P. Senzorski modul za merjenje kotnega zasuka kolesa na
invalidskem vozičku. Maribor, 2011
[3] Añorga, E. Development of the feature extractor for speech recognition.
Maribor, 2009
[4] Šumej, K. Izdelava sistema senzorjev pri govornem upravljanju invalidskega
vozička. Maribor, 2009
[5] Javšnik, G. Razvoj programske in aparaturne opreme invalidskega vozička.
Maribor, 2009
[6] Žvar, T. Vgradnja ultrazvočnih senzorjev na invalidskem vozičku. Maribor,
2011
[7] MPLAB® IDE User’s Guide with MPLAB Editor and MPLAB SIM Simulator.
Microchip Technology, 2009, Dostopno na:
http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_User_Guide_51
519c.pdf [26.3.2013]
[8] 2-Axis Compass with Algorithms HMC6352. Dostopno na:
http://www51.honeywell.com/aero/common/documents/myaerospacecatalog-
documents/Missiles-Munitions/HMC6352.pdf [26.3.2013]
[9] I2C. Dostopno na: http://en.wikipedia.org/wiki/I%C2%B2C [10.6.2013]
[10] INVACARE SERVICE INSTRUCTIONS. Dostopno na:
http://doclibrary.invacare.nl/office/europe/marketing/mktdocnl.nsf/0/67a5523d
d973e110c1256dc6005b5c94/$FILE/1424712-Storm3-ServiceManual-
REV.008-English-LowRes.pdf [10.7.2013]
[11] INVACARE USER MANUAL. Dostopno na:
http://www.invacare.com/doc_files/1143151.pdf [10.7.2013]
[12] Motorized wheelchair. Dostopno na:
https://en.wikipedia.org/wiki/Motorized_wheelchair [10.7.2013]
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
59
[13] Ultrazvočni senzorji. Dostopno na:
http://www.cs.york.ac.uk/micromouse/Docs/SRF08UltraSonicRanger.pdf
[ULTRAZVOČNI SENZORJI, 10.7.2013]
[14] PIC microcontroller. Dostopno na:
http://en.wikipedia.org/wiki/PIC_microcontroller [10.7.2013]
[15] CAN bus. Dostopno na: http://en.wikipedia.org/wiki/CAN_bus [10.7.2013]
[16] Non return to zero. Dostopno na: http://en.wikipedia.org/wiki/Non-return-
to-zero [11.7.2013]
[17] Magnetoresistive sensor. Dostopno na: http://sensors-actuators-
info.blogspot.com/2009/08/magnetoresistive-sensor.html [29.7.2013]
[18] Magnetic sensor overview. Dostopno na: http://sensors-actuators-
info.blogspot.com/2009/08/magnetoresistive-sensor.html [29.7.2013]
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
60
10. PRILOGE
Priloga A: Naslov in življenjepis avtorja
Priloga B: CD s programi
Nadgradnja senzorike invalidskega vozička VOIC z digitalnim kompasom
61
Priloga A
Naslov avtorja
Ime in priimek: Gregor Tuljak
Naslov: Pesje 25 A
Pošta: 8253 Artiče
Tel. št: 031 715 919
e-mail: [email protected]
Kratek življenjepis
Rojen: 22.3.1988, v Brežicah
Šolanje: OŠ Artiče
Tehniška gimnazija, Šolski center Krško-Sevnica
UM FERI, diplomirani inženir mehatronike
63
64
65
66