CZE ENG

Robot Biped - I2C Servo

 

Pro první pokusy s chodícím robotem jsem používal obyčejná modelářská serva, která byla řízena jedním "velkým" mikrokontrolérem. Časem mi však ale nestačil výpočetní výkon jednoho mikrokontroléru a byl jsem donucen vymyslet jinou alternativu tak, abych dokázal ovládat všechny serva dostatečně rychle a s dostatečnou přesností. Alternativa byla vyvinout serva s vlastní elektronikou, která bude schopná "nastavovat" polohu serva a bude schopná komunikovat s hlavním mikrokontrolérem po I2C sběrnici.

Výběr serva:

Jelikož jsem se regulátor snažil navrhnout tak, aby jej bylo možné použít s libovolným modelářským servem záleží jeho výběr jen na tom jak silné a jak velké servo je pro danou aplikaci potřeba. Osobně jsem pro chodícího robota použil levná standardní serva HS-311. Určitě by bylo lepší použít silnější, ale na celého robota je jich potřeba nejméně 6. Tím by i výrazně stoupla cena celého robota. Každopádně použití jiného serva než HS-311 bude znamenat jen jednoduchou změnu konstant regulátoru při jeho programování...

Popis zapojení elektroniky:

Celá elektronika byla navrhnuta tak, aby jí bylo možné připojit přes jeden 10ti pinový samořezný konektor. Ten se k desce připojuje jednořadým konektorem. Přes něj je přivedeno napájení logiky (3,3V) a i napájení motorů, které je vyvedeno přímo z baterie robota (cca 7,2V). To je indikováno LED1. Napětí 3,3V je použito k napájení mikrokontroleru MC9S08QB8 (IC1) v pouzdru TSSOP16 a snímacího potenciometru, který je uvnitř serva. Dále je toto napětí blokováno, na rozdíl od napájení pro motory, kondenzátory C1 a C2.

Pro připojení GND byl vyhrazen pouze jeden pin, což se záhy projevilo na spolehlivosti zařízení. Přesněji při větším proudovém odběru motorů docházelo k velkému zarušení I2C sběrnice (zvednutí GND potenciálu) a tudíž i k nemožnosti s elektronikou komunikovat. Bohužel kvůli nedostatku místa na DPS nebylo možné použít 2x 5pin konektor, a proto byl další GND vodič přiveden pouze drátkem zasunutým do jednoho z 5ti nezapojených GND pinů, které jsou na samořezném konektoru.

H-můstek byl nejprve sestaven z obyčejných tranzistorů. Jejich proudové zesílení však bylo nedostatečné, a proto se více energie proměňovalo v teplo než v moment na hřídeli serva. Další verze H-můstku byla sestavena z MOSFET tranzistorů, ale kvůli nedostupnosti dostatečně velkého napětí pro gate je nebylo možné dokonale sepnout a tudíž jejich použití také nepřipadalo v úvahu. Nakonec jsem zvolil darlingotovy tranzistory jejichž proudové zesílení (B>10000) bylo vzhledem k použitým servům dostačující.

Komunikace pomocí I2C a princip ovládání:

Tuto sběrnici jsem zvolil z důvodů její oblíbenosti a možnosti obsluhovat až 127 nezávislých zařízení. Mikrokontrolér by měl umět pracovat až s 1MHz taktem, ale taková rychlost není příliš vhodná z důvodu rušení. U robota pracuji s taktem 100kHz. Další informace jsou uvedeny ve zdrojích, proto se nebudu zabývat detailním popisem.

Sběrnice je k mikrokontroléru připojena přímo přes pull-up rezistory R2 a R3. Packety jsou dlouhé čtyři bajty. První bajt slouží pro naadresovaní serva a nastavení směru komunikace. Adresu je potřeba nastavit ve zdrojovém kódu v rozsahu od 0 do 127. Druhý bajt určuje co se bude provádět a další dva bajty určují parametry toho co se bude provádět (poloha, rychlost změny apod.). Polohu serva je možné nastavovat s rozlišením na 10 bitů (0 až 1023) a rychlost změny polohy, neboli periody s jakou bude prováděna inkrementace či dekrementace polohy o "jedničku", odpovídá nastavení modulo registru osmibitového časovače MTIM (1 až 255 => 25,4us až 3276,8us => rozlišení 12,8us).

Dále je možné po I2C sběrnici hodnotu natočení i číst a to s přesností na 10bitů. V prvním odeslaném bajtu je informace o stavu motoru ("0" pokud je vypnutý a "1" pokud je zapnutý). V druhém bajtu jsou dva nejvyšší bity hodnoty natočení serva a ve třetím bajtu je zbylých 8 bitů. Všechno by mělo být patrné z přiložených zdrojových kódů. Nakonec ještě shrnutí všech příkazů:

Příkaz1. bajt2. bajt3. bajt4. bajt
Vypnutí serva"0" (0x30)Hodnota nemá vlivHodnota nemá vlivHodnota nemá vliv
Okamžité natočení"1" (0x31)Horní bajt
žádané polohy
Dolní bajt
žádané polohy
Hodnota nemá vliv
Plynulé natočení"2" (0x32)Horní bajt
žádané polohy
Dolní bajt
žádané polohy
Nastavení časovače
Čtení natočeníStav serva
"0" nebo "1"
Horní bajt
aktuální polohy
Dolní bajt
aktuální polohy
0

Řízení motoru:

Použito bylo použito pouze proporcionální řízení. Pokoušel jsem se experimentovat i s integrační složkou, ale nepodařilo se mi jí nastavit tak, aby byla regulace dostatečně rychlá. Její nastavování nejspíše vhodné až při využití lepšího serva než je HS-311. Bylo méně pracné se spokojit s malým překmitem. Ten je však znatelný jen při nezatíženém servu a při zatížení dochází k maximálnímu využití momentu, které servo dokáže vyvinout.

Konstrukce elektroniky:

DPS jsem se snažil navrhnou tak, aby jej bylo možné vyrobit jako jednostranný plošný spoj s pouhými čtyřmi drátovymi propojkami nebo jako oboustranný plošný spoj jehož horní vrstva je velice jednoduchá. Takový spoj je možné snadno vyrobit v domácích podmínkách, avšak já jsem si je nechal vyrobit i s nepájivou maskou, která zaručuje větší odolnost proti vnějším vlivům a tedy i větší spolehlivost.

Pro osazování je nezbytné použít alespoň mikropájku. U jednostranného spoje je potřeba začít osazením propojek. Dále je vhodné připájet mikrokontrolér, což sice odporuje standardnímu postupu (Prvně se osazují pasivní a až poté aktivní součástky), ale jelikož je pouzdro TSSOP16 velice malé, je lepší mít k jeho správnému připájení k dispozici co nejvíce místa. Dále se osadí pasivní součástky a nakonec darlingtonovy tranzistory a jednořadý konektor.

K nahrání firmwaru je potřeba k pinu BDM připájet tenký vodič (aby nemohlo dojít k vytrhnutí plošky od DPS a nebo ke spojení s okolními piny) a společně s GND je napojit na BDM interface. Připojení RESET pinu není nezbytně nutné, jelikož debugovací program CodeWarrioru vyzve uživatele k vypnutí a zapnutí napájení cílového zařízení, pokud se nepodaří mikrokontrolér restartovat pomocí BDM interface. Po naprogramování mikrokontroléru tenké drátky odpojíme a elektronika je zcela hotová. (V době psaní článku ještě nebyl otestován UART bootloader)

Seznam použitých součástek:

R11KΩOdpor SMD1206
R2, R3100KΩOdpor SMD1206
R4, R5, R6, R7330ΩOdpor SMD1206
C14,7uF/10VTantalový kondenzátor SMDA
C2100nFKeramický kondenzátor SMD1206
L1100uHTlumivka R207
LED1Modrá LED 20mASMD1206
T1, T4BSP52Darlingtonův N tranzistor SOT223
T2, T3BSP60Darlingtonův P tranzistor SOT223
IC1MC9S08QG8CDTEMiktokontrolér HCS08 TSSOP16
JP15 pinů90° jednořadý konektor

Instalace elektroniky:

Nejprve je potřeba rozebrat servo tak, aby se bylo možné dostat k originální elektronice serva. Což ve většině případů obnáší povolení 4 šroubků a sejmutí plastového krytu. U HS-311 je motor připájen přímo k DPS. Odpájíme tedy jeho oba vývody. Nejvhodnější je použít odsávačku nebo lícnu. Snímací potenciometr je k desce připojen přes 3 vodiče. Vzhledem k tomu, že je bude potřeba nastavit delším vodičem, je možné je rovnou ustřihnout. Po připájení a zaizolování delších vodičů na vodiče, které vedou z potenciometru bude potřeba připájet kabely i k motorům. Nakonec upilujeme drážku v plášti serva, kterou protáhneme všechny kabely a zašroubujeme kryt serva.

Pokud máme servo upravené, připájíme vodiče vedoucí k motoru. Ty se z důvodu ušetření místa na DPS připájí na kolektory tranzistorů, tak jak je to vidět na fotografii hotového serva. Na tom kam který vodič připojíme příliš nezáleží. Před připájením vodičů snímacího potenciometru je potřeba zjistit který z nich je připojen na jezdce. Zbývající dva vodiče připájíme libovolně. Při obrácené polaritě se nic nestane. Regulátor pouze otočí hřídel serva ihned po zapnutí na doraz. Když k tomuto dojde, bude stačit jen obrátit krajní vodiče potenciometru nebo motoru. Dále připájíme drátek pro GND, kterou používá H-můstek, a po jeho pocínování (Aby lépe držel) ho zasunem do jedné z pěti volných pinů na samořezném konektoru. A nakonec po otestování funkčnosti připevníme regulátor k servu tak, aby bylo možné pohodlně zapojit samořezný konektor. Nejlepší je použít lepidlo z tavné pistole.

Závěr:

Po vyřešení všech problémů, které byly způsobeny relativně hrubými chybami v návrhu předchozích verzích regulátorů se servo s mojí elektronikou velice osvědčilo jako pohon pro chodícího robota. Je možné předpokládat že jej bude vhodné použít i do jiných zařízení, ve kterých je potřeba mnoho modelářských serv a zároveň by bylo složité nebo výpočetně náročné pro ně generovat řídící impulzy. Použitý mikrokontrolér je možné zakoupit např. v GM, Farnell nebo je možné si jej objednat jako vzorek přímo z webových stránek Freescale.

Zdrojové kódy:

Použitá literatura:

 

Sociální sítě:

 

Vložit komentář:



Jméno:   E-mail:   WWW:   

  Zaškrtni (Ochrana proti spamu)       

 

Všechna práva skoro vyhrazena. Copypaste © 2021 Mica
Pokud není uvedeno jinak, je obsah tohoto webu dostupný pod licencí Creative Commons Attribution 3.0 License