CZE ENG

Servo7QG - UART a I2C řídící obvod pro 7 modelářských serv

 

 

Tento obvod byl vyvinut pro potřeby robotického ramene PidiArm, přesněji pro řízení jeho modelářských serv. Důvod pro vyvinutí vlastního řízení byl ten, že běžně dostupné obvody většinou nejsou schopny provádět plynulý pohyb samy a je nutné jej realizovat způsoby, které jsou náročné na rychlost komunikace s nadřízeným obvodem. Servo7QG však tento a další problémy řeší, a proto si vystačí i s relativně pomalou I2C sběrnicí.

 

Vlastnosti Servo7QG:

  • Schopnost řídit až 7 modelářských serv
  • Napájecí napětí 4 až 7,2 V (Maximální napájecí napětí je omezeno jen maximálním napájecím napětím serv)
  • Vypnutí všech nebo jednotlivých serv
  • Rozsah řídících impulzů 0,5 až 2,5 ms s 12 bitovým rozlišením
  • Opakovací frekvence řídících impulzů 57 Hz
  • Okamžitá změna řídících impulzů jednoho nebo všech modelářských serv
  • Plynulá změna řídících impulzů s nastavitelnou rychlostí 0.5 až 125 us (vysvětleno dále) s 8 bitovým rozlišením
  • Možnost čtení aktuálně nastavených parametrů a aktuální délky řídícího impulzu (při plynulém pohybu)
  • Komunikace po rozhraní UART rychlostí až 57600 baud(defaultní rychlost je 9600 baud) nebo
    po sběrnici I2C "rychlostí" 100 kHz

Schéma zapojení:


Serva jsou k mikrokontroléru M9S08QG8CBPE (IC1) připojeny přes odpor 1 kΩ, který slouží jako alespoň malá ochrana před přepětím, které by se při poruše mohlo na řídící pin dostat. Při potřebě zvýšené ochrany těchto výstupů by bylo vhodné použít např. zenerovy diody. Velikost plošného spoje však měla větší prioritu, a proto taková důmyslnější ochrana použita nebyla. Piny řídících signálů byly zvoleny tak, aby byl plošný spoj co nejjednodušší. Vývody PTA4 a PTA5 nebyly využity, jelikož PTA5 je schopny fungovat jen jako logický vstup a PTA4 je určen pro BDM rozhraní. Pro další úsporu je k taktování mikrokontroléru využit interní zdroj hodinového signálu nastavený na 8,192 MHz.

Napájení mikrokontroléru zprostředkovává stabilizátor LE33CD (IC2) v SMD pouzdru SO08, který je schopný pracovat se vstupním napětím až 18 V a dodávat proud až 100mA. Kondenzátor C1 nejen slouží pro funkci stabilizátoru, ale také pro krátkodobé vykrytí poklesů napětí při mechanickém zatěžování serv. Pro lepší vykrývání proudových špiček by bylo vhodné ještě před kondenzátor C1 zařadit tlumivku dimenzovanou.

Komunikační sběrnice se připojují přes konektor X2 určený pro konektory samořezné. Zapojení pinů bylo zvoleno tak trochu nešťastně a to z důvodu použití Servo7QG pro řízení robotického ramene PidiArm. Pro volbu komunikační sběrnice slouží jumper J8. Jeho stav je přečten pouze jednou hned po nastartování mikrokontroléru a při jeho běhu jej není možné změnit.

Toto schéma, zejména zapojení konektoru X2, slouží jen jako příklad zapojení řídícího obvodu Servo7QG a předpokládá se, že si každý přizpůsobí schéma a hlavě plošný spoj své aplikaci.

Popis komunikace:

Komunikační protokol je pro obě komunikační rozhraní stejný. I2C adresa jednotky Servo7QG je 0x5E (0x101111X), kde X určuje směr komunikace (1 - čtení, 0 - zápis).

Možné je nastavovat natočení jednotlivých servomotorů nebo všech servomotorů najedou. Plynulá změna natočení a rychlost této změny se odesílá pro každý servomotor zvlášť. Aktuální hodnoty natočení je také možné číst a tak kontrolovat, zda již bylo dosaženo žádané cílové polohy. Hodnota natočení může být v rozsahu 1 až 4095 a hodnota rychlosti v rozsahu 1 až 255. Příkazy (změna natočení, vypnutí atd.) jsou prováděny hned po přijmutí příkazu.

Čtení aktuálních nastavených délek řídících pulzů se provádí pro všechny serva najednou, tj. Servo7QG odešle 14 bajtů hodnot natočení (7 hodnot 1 až 4095). Při komunikaci prostřednictvím sběrnice I2C se čtení provádí rovnou (stačí pouze správné nastavení R/W bitu při volání I2C adresy. Při komunikaci prostřednictvím rozhraní UART je však potřeba nejprve vyslat znak (0x52) 'R'. Po přijmutí tohoto znaku odešle jednotka Servo7QG všech 14 bajtů.

Při komunikaci přes rozhraní UART je možné změnit baudrate, pokud je 9600 baud, nastavených po restartu, nedostatečných. Rozsah možných rychlostí je 2400 až 57600 baud. Dále viz tabulka s výčtem všech příkazů.

Příkaz 1. bajt Další bajty
Nastavení všech serv 0x41 (‘A‘) 14 bajtů hodnot natočení
(hodnoty 1 až 4095 pro 7 serv)
Nastavení jednoho serva 1 bajt - Zvolení serva
0x30 až 0x36 (‘0’ až ‘6‘)
2 bajty - Natočení
(1 až 4095)
Plynulé nastavení
jednoho serva
0x46 (‘F’) 1 bajt - Zvolení serva
0x30 až 0x36 (‘0’ až ‘6‘)
2 bajty - Natočení
(1 až 4095)
Nastavení rychlosti
plynulého pohybu serva
0x53 (‘S’) 1 bajt - Zvolení serva
0x30 až 0x36 (‘0’ až ‘6‘)
1 bajt - Rychlost
(1 až 255)
Vypnutí všech serv 0x58 (‘X’) 0x41 (‘A’)
Vypnutí zvoleného serva 0x58 (‘X’) 1 bajt - Zvolení serva
0x30 až 0x36 (‘0’ až ‘6‘)
Čtení natočení serv
(Pouze pro UART)
0x52 (‘R’)
Změna baudrate
(Pouze pro UART)
0x42 (‘B’) '1' => 2400 baud, '2' => 4800 baud, '3' => 9600 baud, '4' => 19200 baud, '5' => 38400 baud, '6' => 57600 baud

Zdrojové kódy a algoritmy:

Zdrojové kódy Servo7QG (ke stažení zde) se skládají ze souborů main.c, tpm.c, iic.c, sci.c a inicializačnímy soubory vygenerovanými komponentou "Device Initialization". V souboru tpm.c je implementováno samotné generování řídících impulzů a v iic.c a sci.c obsluha komunikačních sběrnic. Komunikační protokol byl implementován v main.c (metoda ProccesCommandBuffer).

Pro generování řídících impulzů byl použit pouze jeden 16 bitový čítač/časovač. Ten přeteče každé 2,5 ms. Tento čas odpovídá hodnotě čítače 5119 = 1023 + 4096 (1023 je offsetová hodnota a odpovídá času 0,5ms). Při přetečení časovače je ukončena obsluha aktuálního serva a je obslouženo servo následující. Obsluha všech sedmi serv tedy celkem trvá 17,5 ms (7 x 2,5 ms) z čehož vyplývá opakovací frekvence řídících pulzů 57 Hz.

Délka pulzu je řízena tak, že na začátku každé obsluhy je na daném pinu nastavena log. 1 a do "value" registru nultého kanálu časovače je uložena hodnota žádaného natočení (1 až 4095). Tato hodnota je hardwarově komparovaná s hodnotou 16 bitového čítače a pokud dojde ke shodě je vyvoláno přerušení (isrVtpmch0). V obsluze toho přerušení dojde k nastavení log. 0 na pinu právě obsluhovaného serva.

Pokud je nastavena rychlost pro plynulý pohyb není do "value" registru nultého kanálu časovače hned uložena hodnota žádaného natočení (tak jak popisuje předchozí odstavec), ale k hodnotě, která je ve "value" registru je přičtena hodnota odpovídající nastavené rychlosti. Délka řídícího pulzu se tak změní o 0,5 až 125 us (Tyto hodnoty vyplývají z 8 bitového rozsahu hodnoty "rychlost" a z rozlišení řídícího pulzu a to následovně: inkrement = rychlost*((2,5 - 0,5)/4096) ). K této inkrementaci dochází při každé obsluze serva (tedy jednou za 17,5 ms) až do té doby, než je dosaženo cílové hodnoty.

Konstrukce:

Díky jednoduchosti tohoto zařízení bylo možné použít jen jednovrstvý plošný spoj. Pasivní součástky pro povrchovou montáž jsou ve velikostech 1206. Pro mikrokontrolér byla použita obyčejná patice, jelikož nebyl osazen konektor pro připojení programovacího a ladícího rozhraní BDM.

Osazení horních součástek Osazení spodních součástek Spodní vrstva (600 dpi)

Seznam použitých součástek:

R1 až R7100 ΩOdpor SMD1206
R82,7 kΩOdpor SMD1206
R9, R1047 kΩOdpor SMD1206
C1470 uF / 16 VElyt. kondenzátor 10x13 mm, RM5 mm
C2, C4100 nFKeramický kondenzátor SMD1206
C310 uF / 16 VElyt. kondenzátor 4x7 mm, RM1.5 mm
LED13mm zelená 2 mA
IC1MC9S08QG8CBPEMikrokontrolér HCS08 DIP16
IC2LF33CDStabilizátor 3,3 V, 100 mA, SO08
X1K375ANapájecí konektor 2,1 mm
X2MLW10Konektor 5x2 pin s roztečí 2,54 mm
JP1 až JP7Lámací kolíky 7x1 pin a 7x2 RM2,54 mm
JP8Lámací kolíky 1x2 pin RM2,54 mm
Obyčejná patice DIP 16

Závěr:

Funkčnost Servo7QG byla ověřena na robotickém ramenu PidiArm a zejména při použití nízké komunikační rychlosti se ukázala výhodnost plynulého nastavování řídících impulzů.

Jistě by bylo vhodné použité algoritmy využít pro řízení více než sedmi modelářských serv a při použití mikrokontroléru s alespoň jedním 16 bitovým časovačem navíc implementovat sofistikovanější plynulé pohybování s větším rozlišením a s možností rampování.

Nakonec malá prezentace toho co Servo7QG dovede. Přes UART rychlostí 9600 baud je ovládáno maximální množství modelářských serv. Nejprve jsou všechna natočena do krajních poloh, poté do středu a nakonec jsou postupně plynule natáčena.


Soubory ke stažení:

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 © 2025 Mica
Pokud není uvedeno jinak, je obsah tohoto webu dostupný pod licencí Creative Commons Attribution 3.0 License