Jste zde

Elektronický kompas a gyroskop

Tento článek popisuje konstrukci jednotky magnetického kompasu, která díky své konstrukci, umožňuje

její rozšíření o další funkce které ale nemají přímý vliv na funkci kompasu.

Stavět robota či autonomní vozítko (nezáleží na tom, jak ho budeme nazývat) bez zařízení, které umožní získat informaci o jeho poloze v prostoru je pravděpodobně nesmysl. Dlouho jsem zkoušel navrhnout elektronický kompas "snadno, rychle a levně", například využitím klasického magnetického kompasu a soustavou IR závor, kterými se snímala poloha ručky. Bohužel dané řešení jsem asi po 6měsících opustil, jelikož snímání ručky nebylo zase až tak spolehlivé, cena se nakonec vyšplhala také poměrně vysoko a spotřeba nebyla zrovna nízká. Nakonec jsem se pustil do konstrukce kompasu založeném na koncepci, používané všude tam, kde není možné použít systém GPS. Cena součástek celé jednotky se pohybuje okolo 1500,- Kč bez gyro senzoru a asi 3500,- Kč s gyro senzorem. Ten je poměrně drahý, díky tomu, že jsem jej musel vymontovat z hotového modelářského gyra. Vzhledem k tomu, že podobné kompasy jsou nabízeny v zahraničí minimálně za asi 25USD bez poštovného a nemají navíc možnost připojit sensory náklonu, gyro, neměří napájecí napětí a nemají analogový vstup pro měření další veličiny, vychází cena této jednotky celkem příznivě.


Pohled na hotovou jednotku. Pro snadnější manipulaci je připevněna na kousek plexiskla spolu s inklinometry v černé krabičce. Kompas je zde položen pouze pro kontrolu údaje elektronického kompasu :-) V levém horním rohu je možno vidět čidlo gyroskopu a v pravo nahoře na DPS jsou vidět dvě čidla magnetického pole.

Jednotka elektronického kompasu je určena pro měření magnetického azimutu různých zařízení. Vyvinul jsem ho pro použití v mobilním robotu kde byl také s úspěchem vyzkoušen. Dosahované rozlišení je 2st. a přesnost je okolo ±5st. Výstupní údaj o směru je reprezentován číslem v rozmezí 000 - 179. Samozřejmě záleží na okolí (přítomnost magnetických materiálů). Výhoda této koncepce je ta, že díky použitému SW je možná kalibrace a tím i z velké části potlačení vlivu těchto předmětů na funkci přístroje. Při zkoušení na robotu se mi podařilo téměř vyloučit vliv kovových částí robota ale například subwoofer stojící na zemi, kompas dokonale zmátl už na vzdálenost několika desítek cm. Zde se projevoval vliv magnetů použitých reproduktorů.



Rezistory R2, R3 R7, R8 a R49 mají funkci jumperů, v této verzi jsou osazeny (propojeny) pouze R8 a R2. Kliknutím na náhled získáte obrázek ve vyšší kvalitě

Magnetický kompas je postaven na bázi IO KMZ51. Tento obvod z produkce fy. Philips je přímo určen pro tyto aplikace. Pracuje na magnetoresistivním principu a obsahuje nastavovací a kompenzační cívky a magnetoresistivní můstek. V současné době je tento obvod možno koupit ve firmě FK-Technics za cenu asi 220Kč. Pro potřeby měření v osách x a y stačí dva tyto obvody, otočené vzájemně o 90°. Je však třeba zajistit vodorovnou polohu jednotky a to buď mechanicky (vhodný mechanický závěs) nebo elektronicky (sensory náklonu a přepočítání výsledku podle změřeného náklonu). Pokud není zajištěna vodorovná poloha kompasu, je třeba počítat s tím, že údaj o azimutu může být ovlivněn až o úhel, stejný jako je odchylka od vodorovné polohy. Tato vlastnost je typická pro všechny podobné systémy a mnozí výrobci je ve svých reklamních materiálech skromně opomíjejí.

přiloženého schématu je zřejmé, že koncepce jednotky je jednoduchá. Signál z můstků v KMZ51 je zesílen na úroveň zpracovatelnou pomocí A/D převodníku. Signál dále postupuje do A/D převodníku MAX1110, což je 8vstupový, 8bitový A/D převodník. MAX1110 lze zakoupit u firmy SE electronic Praha. Získaná data jsou zpracována v procesoru AT89C4051. Zde je ze signálu z dvou čidel KMZ51 vypočítán magnetický azimut jednotky. 89C4051 dále zpracovává data ze vstupů pro inklinometry a přepočítává ho na stupně. V paměti EEPROM 24C02 jsou uloženy kalibrační konstanty. Za zmínku stojí také obvod T1,T2 a C23. Ten slouží pro ovládání SET/RESET cívek v KMZ51. Při sepnutí T2, projde přes cívky a C23 proudový impuls, který nastaví pracovní bod magnetoresistivních můstků. Při sepnutí T1, se C23 opět vybije přes tyto cívky. Pracovní bod se s časem a změnami magnetického pole "rozlaďuje" a proto je třeba používat tyto nastavovací impulsy. Obvod VR1 zajišťuje napěťovou referenci 4,55V pro A/D.

Plošný spoj jsem vzhledem k složitosti konstrukce navrhl jako oboustranný - prokovaný o rozměru 80x100mm. Na současné verzi DPS je třeba udělat dvě úpravy pomocí drátových propojek.

Výstup z jednotky je řešen pomocí sériového rozhraní. Výstupní data se skládají z několika bytů a jsou vysílána binárně:

  • verze SW
  • magnetický azimut (000 - 179)
  • údaj z keramického gyra (000 - 255)
  • náklon "pitch" ve stupních s ofsetem 30° (000 - 060). Tedy 000 je náklon -30° a 060 je +30°
  • náklon "roll" ve stupních s ofsetem 30° (000 - 060). Tedy 000 je náklon -30° a 060 je +30°
  • napájecí napětí 4,8 - 5,2V (048 - 052)
  • napětí na vstupu EXT3
  • 8bitový kontrolní součet s přetečením (bytů 1 - 7)

Pro komunikaci je také použit pin X1-7 na konektoru X1. V úrovni L procesor jednotky kompasu ignoruje jakoukoli komunikaci na pinech RX a TX. Po uvolněni pinu X1-7 do H, se okamžitě odešle jeden datový packet a další následují s frekvencí 1Hz. Toho lze využít při propojení více podobných modulů na stejný sériový port nadřízeného systému. Na podobném principu mam již navržen jak modul digitálních výstupů (lze je použít pro spínání 8výstupů až 30V/500mA, nebo řízení až dvou krokových motorů nebo řízení až 8modelářských serv...), tak modul digitálních vstupů (lze použít pro načítání dat z 8vstupů, nebo IR čidel GP2D02...), připravuji také analogový modul (8 anal. vstupů a 8 anal. výstupů) a další. S těmito moduly lze již prakticky postavit nejen robota ale i jiná zařízení (domácí automatizaci) atd.

Použití je celkem jednoduché. Po první instalaci je třeba provést kalibraci celé jednotky. Kalibrovat se dají dvě nezávislé funkce. Jako první zkalibrujeme vlastní kompas. Po zapnutí se LED D1 rozbliká frekvencí asi 3,5Hz, na dobu 6 sec. To je doba, kdy lze zadáním znaku "m" po sériové lince spustíme funkci kalibrace magnetického kompasu, jednotka odpoví vysláním znaku "m". Tato funkce je indikována blikáním LED D1 frekvencí asi 1,4Hz. Nyní je třeba otáčet zařízením, kde je instalován kompas pomalu jedním směrem, až je opsán minimálně jeden úplný kruh. Kalibraci ukončíme zasláním jakéhokoli znaku na sériový port. Jednotka potom přejde do normálního režimu, který je indikován blikáním D1 frekvencí 0,5Hz. Kalibrace čidel náklonu probíhá takto: Po zapnutí jednotky zadáme do 6sec. znak "i" na sériový port, jednotka odpoví vysláním znaku "i" na sériový port. LED D1 začne blikat frekvencí 3,5Hz. Následně nakloníme celé zařízení, kde jsou čidla umístěna o 30 st. na všechny čtyři strany. kalibraci opět ukončíme zasláním libovolného znaku na sériový port.

Vzhledem k ceně jednotky jsem se snažil o maximální využití použitého hardwaru, takže ji je možné rozšířit o několik dalších funkcí:

  • Keramický gyroskop - umožňující sledovat zatáčení robota ve chvílích, kdy magnetický kompas nemůže pracovat (například rušení kompasu silným magnetickým polem). Porovnáváním údajů z kompasu a gyra je možno eliminovat změny azimutu z kompasu v závislosti na okolních kovových předmětech. Pro zajištění funkce gyroskopu jsem použil čidlo CG-16D od firmy Tokin, používané například pro modelářská gyra. Tato se používají převážně pro stabilizaci letu vrtulníků. Bohužel jsem nenašel dovozce těchto součástek do ČR a tak jsem byl nucen zakoupit celé "GYRO" v modelářských potřebách a sensor z něho vyjmout. Na pozici IC3 je třeba použít kvalitní OP například TLC271. Trimrem R6 se nastaví ofset napětí tak aby se data na výstupu z jednotky pohybovala okolo hodnoty #100 v klidovém stavu. Trimrem R5 se nastaví požadované zesílení (citlivost gyra na otáčení jednotky). Data získaná z A/D převodníku nejsou v procesoru nijak zpracovávána a jsou rovnou posílána na výstup. Převod dat z této jednotky na nějaký smysluplný údaj o rotaci, například st/sec, se musí provést až v "nadřízeném" systému.
  • Dva analogové vstupy (0 - 4,55V) pro inklinometry - které měří náklon robota v osách (předo-zadní = "pitch") a (levo-pravá = "roll"), názvy jsou převzaté z leteckého žargonu. Použitý SW umožňuje po kalibraci převod vstupního napětí na st. Pro snímání náklonu lze použít několik způsobů. Jednak je možno použít již hotové sensory. Já jsem například použil sensory NS15-E od firmy HL-Planartechnik. Je to však poněkud drahá alternativa a tak je například možné použít dva potenciometry s jakýmsi kyvadlem navzájem otočené o 90st. Tento systém jsem v počátcích používal s uspokojivým výsledkem. Výsledná data o náklonu robota v obou osách lze použít například pro navigaci ve venkovním prostředí, kde se spíše vyskytují "terénní nerovnosti". Ovšem i v interiéru najde inklinometr své uplatnění, například zjištění, ze robot přejel práh ve dveřích může být dobrým orientačním bodem. Také lze údaj o náklonu robota použít pro kompenzaci odchylky kompasu způsobené tímto náklonem, v případech, kdy není kompas mechanicky udržován v rovnovážné poloze.
  • Jeden další analogový vstup pro měření libovolné další veličiny, kterou lze reprezentovat napětím v rozsahu 0 - 4,55V. Lze ho například použít pro připojení IR měřiče vzdálenosti GP2D12. Tímto lze z jednotky kompasu dostávat nejenom informaci o poloze robota ale i informaci o okolí robota, bez dalších dodatečných nákladů.
  • Pokud by nebyly inklinometry potřebné, lze jumperem JP1 přepnout program tak, aby byla data z konektorů EXT_1 a EXT_2, původně určených pro inklinometry, posílána přímo na sériový port. Tím se získají další dva analogové vstupy, které se mohou použít například pro další IR měřiče vzdálenosti GP2D12, nebo pro měření jiných hodnot.
  • Měření napájecího napětí jednotky (4,8 - 5,2V). V mnoha případech je užitečné znát velikost napájecího napětí.
  • Použitá DPS umožňuje vestavět třetí čidlo magnetického pole pro svislou osu Z. Pro eliminaci vlivu náklonu na údaj magnetického kompasu založeného na použití dvou čidel X a Y se dá použít údaj z třetího (vertikálního) čidla Z. V současné době tato možnost není využita ale DPS je na tuto eventualitu připraven.

Program je rozdělen do několika částí: Vlevo nahoře je část, zobrazující azimut (červeně) + údaj z gyra (modře). Údaj z gyra má střed dole a ručička se vychyluje o 90° doprava nebo doleva podle zatáčení robota. Táhlem Ofset je možno ručičku vynulovat v situaci, kdy se robot nehýbe. Na tomto místě je třeba podotknout že údaj z gyra stále mírně osciluje okolo nulové polohy a i v případě kdy se robot nehýbe. Tento jev je typický pro použitý keramický gyro sensor. Vlevo dole je jakási obdoba umělého horizontu, používaného v letadlech a zobrazuje příčný a podélný náklon robota. V sekci Control lze zapínat/vypínat jednotlivá zobrazení. Tlačítka Mag.Cal. a Inc.Cal. slouží pro zapnutí/vypnutí režimu kalibrace magn. kompasu a inklinometrů. V sekci Comm jsou táhla, která umožňují simulovat činnost jednotky kompasu a po navázání spojení (tlačítko open COM1) je jejich poloha nastavována dle údajů z jednotky (hodnoty z jednotky lze sledovat v okně vedle tlačítek).

Pro testování jednotky kompasu jsem napsal jednoduchý program pod Windows. Je vyzkoušen na W2k ale měl by pracovat na všech 32bitových Windows. program je freeware a ke stažení je zde

Technické údaje:

  • Napájecí napětí 4,8 - 5,2V
  • Odběr proudu 40 - 60 mA
  • Rozlišovací schopnost kompasu 2 st.
  • Přesnost kompasu (po kalibraci) ±5st
  • Rozlišení analogových vstupů 8 bit
  • Výstup dat UART 9600,8,N,1 (úroveň 5V) na konektorech X1 a X2
  • Vstup povelů UART 9600,8,N,1 (úroveň 5V) na konektorech X1 a X2

Naprogramovaný procesor AT89C4051 lze objednat za 250,- Kč na adrese jreich@volny.cz. K procesoru dostanete nastavovaci predpis pro analogovou část. Oboustraný, prokovený DPS s maskou, lze objednat za 500,- Kč na adrese jreich@volny.cz.

DOWNLOAD & Odkazy

Hodnocení článku: 

Komentáře