Ales píše:@Fulda : pochopil jsem, že k jednomu generátoru impulsů postupně připouješ jednotlivé vývody se servy ? Mojl by jsi mi to trochu upřesnit ?
Ten problém, který jsem měl na mysli je to, že používám vestavěný příkaz "servo", který by měl generovat příslušné pulsy. Vše vypadá v pořádku, jen se občas ( po pár sekundách ale nepravidelně) tam objeví ještě nějaky další puls, ktery truvhu pohny s servy. Takové bzučení od 100 serv by mě tedy silně vadilo. Vypadá to, že to generuje processor. A to přitom nic jiného nedělá (není tam zatím komunikace.) Už jsem zkoušel napájet i bateriemi a nc. Ještě chci zkusit rozdělení zdrojů. Pak už je jedině cesta nalrogramovat přímo jednotlivé pulsy na výstupu.
Nejspíš si myslím, ža to je ten příkaz ve vyšším jazyce, že tam je ještě nějaká obslužná rutina, která není časově zanedbatelný. Začínám tady studovat i fóra k picaxe.
Prohlížel jsi si někdy protokol, který serva používají, včetně toho jak a proč vznikl?
Je to trochu o dějepisu, ale člověku to trochu pomůže při uvažování nad tím, co se v servu odehrává.
Původní myšlenka byla, jak udělat ze sériové komunikace z vysílače do přijímače paralelní pro serva. Nejvíce se ujala metoda, která se dala v tehdejší době (konec 70 let) snadno vyřešit elektromechanicky. takže ve vysílači byl zdroj hodinového signálu nastavený zhruba na 50Hz, posuvný registr (s paralelním výstupem) a balíček RC členů, kde R byl potenciometr na kniplu. Logika byla asi taková, že 50Hz generátor na začátku pulzu vygeneroval právě jednu jedničku do posuvného registru. na každém z paralelních výstupů byl jeden RC člen, pokud se na vstupu objevila 1, člen se připnul a začel nabíjet to vygenerovalo impulz, který se odeslal do rádia, když došlo k nabití, posunul se posuvný registr a vygeneroval další pulz do rádia. Čili, rádio odesílá pulzy, jejich náběřné hrany jsou tak daleko od sebe, jaké jsou výchylky jednotlivých potenciometrů. pochopitelně když dojdou potenciometry (kanály), ta jednička vypadne z registru a je dlouhé ticho.
Na straně přijímače byla podobná logika. Dlouuhé ticho vedlo k resetu = do posuvného registru se nastavila právě jedna jednička (využití paralelního mazání) a ta se posouvala přez jednotlivé výstupy. Takže pokud vysílač disponoval například 5 potenciometry a přijímač pouze 4 bitovým registrem, tak jednička na konci vypadla, pokud naopak disponoval delším 8 bitovám registrem, tak vzhledem k paralelnímu mazání nikdy nedošla do konce.
Tento princip u nás používala třeba RC souprava Modela Digi (chápej, v té době pokud v tom bylo použito 2ks obvodu 7400, tak to bylo digi). Dobré bylo, že se pouhým prodlužováním posuvného registru dal zvětšovat počet kanálů. Jedná se o takzvaný
PPM systém.
Osciloskopem napěříte zhruba toto:
na modulátoru
na rádiu
funkce demodulátoru
(
ZDROJ1 ZDROJ2 - obrázky jsem nalinkoval z těchto stránek, nechtělo se mi je znovu malovat)
Takže servo dostává pulz, jehož délku porovnává s výchylkou potenciometru ve snímači. Původní logika byla taková, že se pulz poslal do RC členu (R je potenciometr snímače) a porovnávalo se co vypadne. Pokud bylo nastavení RC stejné, tak pulz trval stejně dlouho, jako jeho obraz v RC soustavě a nedělo se nic, pokud byl pulz kratší nebo delsí, tak se rozdíl použil jako kladný a nebo záporný pulz pro motor. Podle rozdílu se motoru prostě poslala větší nebo menší šlupka.
Poznámka:Tím pádem bylo možné definovat něco jako dlouhou nulu - tedy stav, kdy servo nedostává žádné impulzy se považuje za stabilní, motor serva má být v takovém případě uveden do bržděného režimu.
Tak a teď moje realizace. Já mám v nějakých registrech očekávanou výchylku pro serva, řekněme 4 serva A,B,C,D na výstupech jednoho portu procesoru. Logika kterou používám je identická jako u přijímače: připravím si do časovače hodnotu pro servo A, nastavím na 1 výstup pro servo A a spustím časovač. Časovač po uplynutí požadovaného času vynuluje celý port kde jsou serva (jedna instrukce). Hlavní program rozpozná, že servo bylo odbaveno, takže nastaví stejným způsobem pulz pro servo B. A tak dále. Na konci se vytvoří ještě pulz pro neexistující servo s délkou trvání 50-(A+B+C+D) a tak pořát dokola.
Pokud se serva namají pohybovat (a jsou dostatečně stabilizovaná), tak každé jedno servo vyřadím z logiky a přestanu pro něj generovat signál. Tím pádem nedocházi ke chvění u levných analogových serv.
Tato logika má několik předností, snadno se například rozšíří pomocí jednoduchého demultiplexeru (74 154) na větší množství serv než mám vývodů na procesoru.
Pochopitelně to předpokládá, že si celou ovládací logiku napíšeš sám a nepoužiješ knihovní funkci u které není jasné jak se chová. Viz poznámka o tom, že do všeho chceš vidět.
zdeno píše:presne to je to, co mi na servech vadi, ja to volam "chveni", teda nepravidelne oscilovani okolo nastavene hodnoty.
...
Tady je několik faktorů které vedou ke chvění serva. Jednak se jedná o teplotní a proudovou nestabilitu RC členu pro analogová serva, která používají klasické porovnávání délky pulzu. zejména jde o to, že kondenzátor se nevybíjí dokonale a RC vazba je citlivá i na délku nuly. Pak pochopitelně kvalita trimru a kvalita komparačních operáků použitých uvnitř pochybných ASIC obvodů.
Hodně se to liší u každého výrobce a rozhodně u čínského serva TG9 za $2 (40,- korun) nelze očekávat žádnou velkou stabilizaci.
Dá se tomu pomoci právě používáním dlouhé nuly, která ovšem u levného serva neznamená brzdu, ale uvolnění motoru, takže servo přestane být v tahu a pokud proti němu máme nějakou velkou sílu, tak prostě podlehne a posune se.