Chvilku jsem to zase šteloval a výsledkem je servotester s plynulým řízením jak rychlosti přeběhu serva tak s nastavením rozsahu pohybu. Je to sranda jak se servíčka škubou s malým rozkmitem a vysokou rychlostí
Návod jak vložit video do příspěvku na RCMANIA.cz Mám u toho vedle sebe "modrý zázrak" HXT500 a dvě silně letité HS50 (černou i modrou). To je jako Moskvič, Mercedes a Bavorák. Ten chróstal se pohybuje nekultivovaně, poskoky a proměnnou rychlostí zato HS-ka si tak jako vrní a jezdí měkce, plynule.
Registrován: 12.2.2016 Příspěvky: 1975 Bydliště: Vysočina, ČR
jyrry píše:
Funguje. Akorát se musí dobře připájet všechny potřebné piny směrem k převodníku
Jj, pájení je základ. Ale jen tak pro úplnost. Stačí 4 dráty (+,-,rx,tx). DTR je vlastně reset a když ho převodník nemá, musí se krátce stisknout tlačítko na desce v momentě, kdy začíná nahrávat soft do desky. A teď už můžeš mít (třeba zítra ) telemetrický měřič článků i na tvých 6S (a může to být i s variem)
Trochu si hraju s načítáním délky servoimpulzu ze servotesteru. Funguje mi to na X způsobů, s přerušením i bez něj ale když tím krmím servo, je pořád takové nervozní, jemně povrkává. Dal jsem si posílat do PC načtenou délku a ejhle, motá se to kolem plusmínus 4 us - tedy o takt procesůrku. Dá se s tím něco udělat? Mimo to jsem zjistil že ten servotester (G.T.Power v alu-profilu) jede s rámcem 16.5 ms ... Takhle to je třeba bez přerušení:
Kód:
// servo čtení: int puls_uS; long ramec_uS; unsigned long aktual_uS; unsigned long start_uS;
Registrován: 12.2.2016 Příspěvky: 1975 Bydliště: Vysočina, ČR
jyrry píše:
... a ejhle, motá se to kolem plusmínus 4 us - tedy o takt procesůrku. ...
Zase jen pro upřesnění, z manuálu - přeložil Google: ATmega48A / PA / 88A / PA / 168A / PA / 328 / P je nízkonapěťový 8bitový CMOS mikrokontrolér založený na architektuře ARIS RISC. Vykonáním výkonných instrukcí v jednom hodinovém cyklu ..... (Tohle není pic, nebo máš hodiny 250kHz?)
Registrován: 17.1.2017 Příspěvky: 1339 Bydliště: Brno
jyrry píše:
Trochu si hraju s načítáním délky servoimpulzu ze servotesteru. Funguje mi to na X způsobů, s přerušením i bez něj ale když tím krmím servo, je pořád takové nervozní, jemně povrkává. Dal jsem si posílat do PC načtenou délku a ejhle, motá se to kolem plusmínus 4 us - tedy o takt procesůrku. Dá se s tím něco udělat?
To jsou brutální rozdíly. Promicro teda nemá krystal, jen keramický oscilátor, ale to se spíš projeví na teplotní stabilitě v delším horizontu, ne takhle. 4 us je fakt hodne.
Nejpřesnější čtení délky pulzu se dělá přes input capture unit. Vezme se časovač který je napojený na input capture, nastaví se mu nějaký vhodný takt tak, aby měl jednak dostatečné rozlišení, a jednak aby nepřetekl mezi jednotlivými pulzy. Já jsem pro čtení PPM signálu z žákovského výstupu vysílačky nastavoval na 16MHz Promicru osminásobný dělič, čili takt 2 MHz, půl mikrosekundy. Toto pokryje 20 ms PPM signálu a přitom má dostatečné rozlišení na servo signál. A pak se už jen nechá zasílat přerušení od vzestupné nebo sestupné hrany, přičemž čas té hrany je uchovaný v tom input capture registru, a až tak moc nezáleží na tom, kdy se dostaneme k obsluze přerušení (samozřejmě to musíme stihnout do příští hrany signálu).
// tady nejak zpracovat informaci, ze mame pulz delky duration } packet_err: // tady zpracovat chybnou delku pobytu v nule }
A na výstup podobně - použít časovač a přes output compare unit říct, po kolika taktech časovače má dojít k překlopení signálu. Opět se to dá říct předem a časovač to pak nějak sám vykoná bez ohledu na to, jak zrovna hlavní program stíhá nebo ne.
Registrován: 26.5.2013 Příspěvky: 1538 Bydliště: Brno
jyrry píše:
To už je vyšší dívčí, já mám jen strojárnu. Plavu už jen v tom zápisu, samý znaky...
V zápisu se převážně jedná o bitové operace, něco o bitových operacích najdeš, když do googlu zadáš heslo jazyk C bitové operace, makro _BV(xy) je popsáno v knihovnách avr-lib, jedná se o bitový posun jedničky vlevo o xy míst, tj. 1<<xy, třeba posuv jedničky (např. 0b00000001) o tři bity vlevo, tj. 1<<3 potom je 0b00001000. Když máš nějaký např. 8 bitový registr TMSK s hodnotou 0b11000101, a potřebuješ nastavit bit IE, který je na pozici 5 bitu, tak v pro preprocesor nadefinuješ #define IE 5, a poté v programu napíšeš TMSK |= _BV(IE). Preprocesor to doplní takto TMSK |= 1<<5, což je vlastně TMSK=TMSK | 1<<5, což je bitový OR mezi bajty TMSK (0b11000101) a 1<<5 (0b0010000), takže výsledek je TMSK (0b11100101). Btw, bity se počítají zleva, 0 až 7.
Jinak TCCR1B |= _BV(ICES1); je nastaveni bitu ICES1 do jedničky v registru TCCR1B, TCCR1B &= ~_BV(ICES1); je vynulování bitu ICES1 v registru TCCR1B. & je bitový AND, a ~ je bitový doplněk (0b11111110 = ~ 0b00000001).
_________________ MC-20HOTT,DS-16,X10S,14SG,S-trino MkII,SpeedFire, Extra 102",MiniCorado,LOGO550SE,Goblin570
Naposledy upravil BoŠ dne úte 20.03.2018 22:26, celkově upraveno 1
Uživatelé procházející toto fórum: mior a 6 návštevníků
Nemůžete zakládat nová témata v tomto fóru Nemůžete odpovídat v tomto fóru Nemůžete upravovat své příspěvky v tomto fóru Nemůžete mazat své příspěvky v tomto fóru Nemůžete přikládat soubory v tomto fóru