Více serv -12 až 18

Pochlubte se svým robotem ostatním!
jo.hak
Příspěvky: 8
Registrován: 31 bře 2020, 11:53

Re: Více serv -12 až 18

Příspěvek od jo.hak » 31 bře 2020, 15:32

Sorry, mohu umazat to definici "pos", ta tam nemusí být.

DavidO
Příspěvky: 862
Registrován: 01 kvě 2013, 21:27

Re: Více serv -12 až 18

Příspěvek od DavidO » 31 bře 2020, 15:52

Nemyslím umazávat středníky, ale funkčnost ;) Tady nejde o to, že ten robot celkově nebude dělat co má, ale že se snažíš najít, proč nějaké servo cuká.

Například umaž v loop nastavování pozice prvního serva. Cukají zbylá? Pak umaž nastavení druhého. Cukají zbylá? atd. Když zůstane nastavované jen jedno a to pořád cuká, odmazávej attach. Pořád? Nebo naopak. Připoj a nastav jen jedno servo, taky zacuká? Dvě taky? atd.
A co servo, které je drátem připojené, v kódu připojené (attach), ale nenastavuješ mu pozici (write). Taky po resetu cukne? Nebo dokonce, připojené k napájení, ale nepřipojené k ovládání (vytáhni konektor jen ihned u Arduina, dráty jinak nech jak byly). Cukne?

Dále, když polohu neměníš, tak stačí nastavit jen jednou, ale tvé nastavení v loop se volá pořád dokola. To by nemělo principiálně vadit, ale nejjednodušší kód, kde se projeví chyba, to být nemusí - dej to všechno do setup a loop nech úplně prázdnou, bude to taky cukat?

Prostě snaž se najít co nejmenší program, kde se projeví nějaké nečekané cukání.

A ještě drobnost, to s problémem nejspíš nesouvisí, ale: ta prodleva 20ms na nastavení serva nestačí, běžná modelářská serva mají rychlost v řádu 0.1-0.2s/60°, což je navíc rychlost letmá, kdy to servo už jede. Když se rozjíždí, je samozřejmě ještě pomalejší. Takže na 20ms se zvládne natočit tak leda pár stupňů.

jo.hak
Příspěvky: 8
Registrován: 31 bře 2020, 11:53

Re: Více serv -12 až 18

Příspěvek od jo.hak » 31 bře 2020, 16:17

No psal jsem, že nerozumím otázce ... Vyzkouším. Děkuji za nápad. Ty časy jsou podle mne dost dlouhé, než se na něj zase dostane řada.

DavidO
Příspěvky: 862
Registrován: 01 kvě 2013, 21:27

Re: Více serv -12 až 18

Příspěvek od DavidO » 31 bře 2020, 17:14

jo.hak píše:
31 bře 2020, 16:17
Ty časy jsou podle mne dost dlouhé, než se na něj zase dostane řada.
Ano, celkově celý cyklus takhle bude trvat něco okolo 1/4 vteřiny (12x20ms + čas na ty příkazy a něco maličko navíc). Ale z téhle poznámky se mi zdá, že nevíš úplně dobře, jak to s řízením serv v Arduinu je (jestli se mýlím, tak promiň, ale v tom případě si to třeba aspoň přečte i někdo, kdo to opravdu nezná). Když servu jednou přikážeš polohu příkazem write nebo writeMicroseconds, tak to stačí, není potřeba mu to přikazovat opakovaně. Servo dojede na tu polohu a tu drží a když se ho něco bude snažit vychýlit, půjde proti. Tak to bude trvale, dokud mu nepřikážeš něco jiného nebo ho neodpojíš (detach) nebo nevypneš napájení.

Na druhou stranu, pokud servu budeš velet opakovaně tu samou hodnotu dokola, tak se navenek sice nic nestane, akorát tím spotřebováváš strojový čas (a ten ti u robota dřív nebo později bude chybět).

A na třetí stranu, principiálně jediná situace, kdy to může dělat problémy, by byla, kdybys mu furt dokola co nejrychlejc velel pokaždý něco jinýho. Sice se jako povel ke změně ujme jen tu a tam něco (technicky když se podíváš do implementace, tak z toho jde vykoukat, že se ujme zrovna ta hodnota, která byla nastavena jako poslední před tím, než systém tomuhle servu natáhne budíka, což je max 1x za 20ms), ale v reálném světě si tím zaděláš na problém - když budou hodnoty různé, servo bude škubat, protože se pokusí jet každých 20ms někam jinam...

DavidO
Příspěvky: 862
Registrován: 01 kvě 2013, 21:27

Re: Více serv -12 až 18

Příspěvek od DavidO » 31 bře 2020, 18:01

A teď něco k tomu počtu serv na Arudino Uno / Mega:
Na Uno i Mega se používá pro každý časovač max. 12 serv. Na Unu se použije jeden časovač, na Mega 4 (a pro každý z nich to platí stejně). Pokud nezvrtáš svůj vlastní kód, tak to funguje docela dobře.

V rámci obsluhy jednoho časovače to je tak, že se postupně obslouží všechna jeho serva a to tak, že se vždycky nastaví budík a zapne se signál pro jedno aktuální servo a až budík doběhne, signál pro servo se shodí a pokračuje se dalším servem (zapne budík + signál atd.) Pokud obsloužení všech serv netrvalo déle než 20ms, tak se zbytek do 20ms nic nedělá. Pokud to už bylo víc, tak se to hned jede zase od začátku. A v tom může být trochu potíž, protože pokud bys všechna serva nechal vytočit na maximum, tak to bude 12x2.4ms a to je trochu víc, než 20ms, protože jedna perioda servosignálu má být těch 20. Pokud ale serva na jednom časovači v součtu nedají těch 20ms, tak se vůbec nic neděje. Třeba když všechna budou nastavena do půlky, tak to je 12x1.5ms a to je furt OK. Ve tvém případě je máš celkově nastavené průměrně mírně nad 90°, takže tam potíž nebude, pořád jsi pod 20ms.

Ale ani to teoretické překročení 20ms z běžně zažité definice správného servosignálu obvykle není tragický. Jednak se to musí sejít v součtu všech serv na jednom časovači, a pak serva si obvykle nechají leccos líbit. Akorát teda problém je v tom "běžně zažité" a "obvykle", protože to neznamená "závazné a platné" a "vždycky". Jakmile jsme mimo správný rozsah, nemáme zaručeno vlastně nic a někdy ani když jsme "uvnitř". Třeba šuntózní servo může dělat brikule, i když je všechno formálně v cajku, a i kvalitní serva můžou dělat brikule, když se na drátech objeví šum atd.

Čili teoreticky v tomhle případě nemá co cukat. Pokud to cuká, tak je potřeba ořezat to právě na ten co nejmenší případ, kdy to blbne a tam se důkladně zaměřit. Čistě od stolu, já bych si nejspíš nejdřív tipnul na potíže s eletrikou - blbě vyřešené napájení, blbě pospojovaná serva s Arduinem atd. Když si vezmeš dvě serva, obě připojíš k napájení a jen jedno k Arduinu a to budeš řídit, ale všechny dráty ti povedou ve společném čurbesu, tak máš dost velkou šanci, že ti bude cukat i to druhý. Mimochodem, čím to celý napájíš?

Uživatelský avatar
jrt
Příspěvky: 1564
Registrován: 17 úno 2013, 17:13

Re: Více serv -12 až 18

Příspěvek od jrt » 31 bře 2020, 20:23

Možná trochu pomůže tohle: http://robodoupe.cz/2016/arduino-a-vice-serv/
jrt
jederobot.cz, hobbyrobot.cz, profirobot.cz
edurobot.cz, robodoupe.cz

micer
Příspěvky: 149
Registrován: 12 čer 2014, 19:14

Re: Více serv -12 až 18

Příspěvek od micer » 01 dub 2020, 20:27

No, ono by to možný šlo i jinak. Není servo jako servo, co třeba tahle:
https://www.ebay.com/itm/3-Meccano-Tech ... SwPMZeMOqm
nebo zde, ale teď nejsou
https://www.postavrobota.cz/Adresovatel ... -d1518.htm
Tohle dost dobře nemá šanci kmitat.

+ malá spotřeba do cca 1A
+ standardní velikost, rozměry, hmotnost
+ na každý pin Arduina s PWM se pověsí až 4 serva (řetězení)
+ nemusí se pro ně dělat signál pokud se nemají hýbat, aktivně drží polohu
+ možnost snímání polohy (obousměrná komunikace)
- přesnost nic moc, modelářská bývají lepší
- pomalejší odezva

Uživatelský avatar
fulda
Příspěvky: 919
Registrován: 04 led 2016, 17:18

Re: Více serv -12 až 18

Příspěvek od fulda » 01 dub 2020, 21:16

Nebo třeba PCA9685? To je takové arduinovské.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host