Servoreverz s ATtiny85

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
samec
Příspěvky: 6670
Registrován: 19 pro 2017, 00:00

#16 Příspěvek od samec »

Celeron píše:No a co tím vyřešíš? Systém clock poběží na 32 a nebo 64 MHz?
Nie. Ale nameráš pulz s 8x lepšou presnosťou.
Uživatelský avatar
Celeron
Příspěvky: 20508
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#17 Příspěvek od Celeron »

Ale za jakou cenu? Spočítej si, kolik osmibitovej časovač při plnění 32 nebo 64 MHz je schopnej naměřit dobu. Další komplikace, dělat z toho 16 nebo 24 bitovej časovač s přerušením od přetečení časovače a přičítat +1 do proměnný.

Jinak dnes mi kámoš půjčil fabrickej servoreverz z Ali. Je na tom taky nějakej SMD osminohej procák menší než ATtiny25. Nepoužitelný, na digitálech to škube stejně jako škubala první verze mě. Ten code od Ellecta je proti tomu naprosto klidnej.

Já mám hotovo.
Přílohy
IMG_20240515_172718.jpg
IMG_20240515_172718.jpg
Jirka

Proč mi nemůže všechno chodit hned ?!!
Uživatelský avatar
Mahoney
Příspěvky: 759
Registrován: 26 říj 2019, 00:00

#18 Příspěvek od Mahoney »

Mimochodem je to vlastnoat mnoha serv, že se chvějou kolem středové polohy.
Uživatelský avatar
Celeron
Příspěvky: 20508
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#19 Příspěvek od Celeron »

Mahoney píše:Mimochodem je to vlastnoat mnoha serv, že se chvějou kolem středové polohy.

No jenže pokud servo na vstupu je v klidu a druhý stejný za reverzem cuká a po prohození se to nepřestěhuje, tak to servem není. A digitály v neutrálu nechvějou ale pískaj nebo hrajou. To chvění je vlastností analogů ale tohle není chvění ale nepravidelný cukání.
Jirka

Proč mi nemůže všechno chodit hned ?!!
Uživatelský avatar
JirkaZ
Příspěvky: 3650
Registrován: 26 úno 2021, 00:00

#20 Příspěvek od JirkaZ »

Jak mám chápat výkřik "já mám hotovo"?

Zkusil jsi tu 555?
Kdo chce, hledá způsob;
kdo ne - hledá důvod.

Ze dvou možností často volím tu třetí.
Uživatelský avatar
bdn
Příspěvky: 560
Registrován: 16 led 2020, 00:00

#21 Příspěvek od bdn »

U těchto 8 pinových MCU jsou možnosti ladění omezené, takže přijde vhod osciloskop a testovat kód postupně.
1/ vyzkoušel bych si pouze část "zápis" na "výstupní pin" viz. kód níže (*) a sledoval osciloskpem
2/ část "čtení" délky pulsu na PCINT0 bych si nejprve odladil na jiném hw např. na UNO atmega328 výpisem na Serial port.
3/ jakmile by fungovalo 1/ a 2/ potom kódy spojit dohromady...

(* příklad testu zapis do vystupu)

Kód: Vybrat vše

/* globalni promnenné pro test code */
uint16_t test_ms, test_ms_mem;
uint16_t test_x = 800;
uint16_t test_x_min = 800;
uint16_t test_x_max = 2200;

/* test code, kazdou 1 sekundu zvedne test_x o inkrement */
test_ms = (uint16_t) millis();
if ((test_ms - test_ms_mem)>=1000)
{
   test_ms_mem = test_ms;

   //
   uint16_t outputPulse = map( test_x, 800, 2200, 2200, 800); // Reverz mapa
   myServo.writeMicroseconds(outputPulse);   // řízení reverzovaného serva
   //

   test_x = test_x + 50;
   if(test_x > test_x_max)
   {
      test_x = test_x_min;
   }
}

- ono TCNT0 bude Arduinem interně použitý pro millis(), TCNT1 bude interně použitý v knihovně Servo::writeMicroseconds(uint16_t value).
Uživatelský avatar
Celeron
Příspěvky: 20508
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#22 Příspěvek od Celeron »

JirkaZ píše:Jak mám chápat výkřik "já mám hotovo"?

Zkusil jsi tu 555?


Tak snad na fotce vidíš, že to mám hotový. A proč bych zkoušel 555, když tohle chodí dokonale? A pokud se zrychlí strojový hodiny přes PPL na 16,5MHz, tak nelze rozeznat podle zvuku, který servo je normál a který revez.
Jirka

Proč mi nemůže všechno chodit hned ?!!
Uživatelský avatar
JirkaZ
Příspěvky: 3650
Registrován: 26 úno 2021, 00:00

#23 Příspěvek od JirkaZ »

A jak mám asi na té fotce poznat, že jsi to dělal a co je uvnitř (notabene když je ta fotka u textu o půjčeném zařízení)?

Možná jsem to měl nějakým zázrakem pochopit ze slov "ten code od Ellecta je proti tomu naprosto klidnej", ale žádného Ellecta tu nějak nenacházím.

No prostě mi chybí křišťálová koule a/nebo dekodér kryptosdělení.
Kdo chce, hledá způsob;
kdo ne - hledá důvod.

Ze dvou možností často volím tu třetí.
Uživatelský avatar
Celeron
Příspěvky: 20508
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#24 Příspěvek od Celeron »

To mě těší, že jsi na fotce nepoznal, že je to bastl a né profi výroba. To potěší. :lol: A k tomu ellectovi. Nezmínil ses tady o zapojení reverzu na RC-mánii? Ale možná že v tom mám chaos. :oops:
Jirka

Proč mi nemůže všechno chodit hned ?!!
Uživatelský avatar
JirkaZ
Příspěvky: 3650
Registrován: 26 úno 2021, 00:00

#25 Příspěvek od JirkaZ »

Hm, na RCmanii je ellet (nikoliv ellect), ale v tom příspěvku o reversech (co tu uváděl pepik9) má řešení s 555, nikoliv nějaký "code".

Takže Tvoje kryptosdělení pokračuje ;-)

Hele, v podstatě o nic nejde, já mám jen rád jasno alespoň v základních věcech...

No a jako bonus by mě možná docela zajímalo, který že to konkrétní postup byl nakonec úspěšný. Tentokrát opravdu, bez kryptování ;-)
Kdo chce, hledá způsob;
kdo ne - hledá důvod.

Ze dvou možností často volím tu třetí.
Uživatelský avatar
Celeron
Příspěvky: 20508
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#26 Příspěvek od Celeron »

No zatím to vyřešený do úplný spokojenosti není. I když na stole to s digitálama Emax bylo téměř neznatelný, tak po montáži do modelu vlivem přepákování na cca 2-2,5 násobek už to je na odtokovce vztlakovek vidět jako nepravidelný cukání asi 1 mm. Možná jsou KTS digitál serva rychlejší a přesnější a taky násobně dražší než Emaxy a víc se to projevuje. Horší je, že tomu nepomáhá ani "digitální" filtrace, zkusil jsem dělat průměr ze tří měření, nejvzdálenější hodnotu zahodit, udělat znovu průměr ze dvou a to vystavit na port. Lepší ale stále trochu znát.
Problém prostě je, že vzorkování je 1uS a na servu se už 3-4uS projeví pohybem. Bylo by potřeba zrychlit vzorkování ale není to tak jednoduchý, tenhle prcek má proti ATmegám jen osmibitový časovače. A ten stačí jen s malou rezervou při plnění 1us tak akorát na servoimpulz s maximální dýlkou 2,2ms.

Dnes jsem na nepájivým poli našťouchal ten reverz s TL5555. Chodí to ale taky je na reverzovaným servu vidět a slyšet nepatrnej pravidelnej pohyb. Řekl bych, že tohle je zase interference opakovacího rámce 20ms s 50-kou v síti. Jestli jen v dílně a venku to nebude jsem zatím nezkusil.
Jirka

Proč mi nemůže všechno chodit hned ?!!
Uživatelský avatar
JirkaZ
Příspěvky: 3650
Registrován: 26 úno 2021, 00:00

#27 Příspěvek od JirkaZ »

Znova opakuju: nesnažil bych se být průkopníkem slepých uliček a na takovýto problém bych nenasazoval (jak je dnes obecným úchylným zvykem) stovky tisíc a víc transistorů v podobě MCU.

Jinými slovy udělal bych to "analogově", ať už s 555 nebo jinak.

Klíčové věci k ohlídání jsou zhruba tyto:

• stabilizace napájení (nějakým LDO)

• filtrace téhož (včetně třeba blokování průniku rušení tlumivkami)

• stínění celého zařízení

• pokud možno malé pracovní impedance

• stabilní prvky, zejména časovací C

• provedení zemí, nevést silovou zem od serva přes signálové obvody reverzátoru
Kdo chce, hledá způsob;
kdo ne - hledá důvod.

Ze dvou možností často volím tu třetí.
Uživatelský avatar
Atlan
Příspěvky: 4514
Registrován: 10 kvě 2004, 00:00
Bydliště: Košice

#28 Příspěvek od Atlan »

Pouzit nieco rychlejsie? Napr ch32v003 5v cip bezi do 48Mhz priklady na nete su.
Uživatelský avatar
Celeron
Příspěvky: 20508
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#29 Příspěvek od Celeron »

Jo, kámoš mě slíbil půjčit vývojovou desku s ARM STM32F103, která má přes PPL takt 72 MHz. :) Přímo kanón na vrabce. :wink: Ale klon se dá sehnat za cenu ATtiny85 a Arduino IDE má pro něj podporu.
Tak už jen se v příštím životě naučit, jak se tam hejbá s registrama od PPL, časovačů, přerušení a PWM a musí to makat jak víno. :D
Jirka

Proč mi nemůže všechno chodit hned ?!!
Uživatelský avatar
nostalcomp
Příspěvky: 169
Registrován: 09 lis 2022, 00:00

#30 Příspěvek od nostalcomp »

A nebylo by lepší to napsat v assembleru? Ta ATTINY na 8 MHz to přece musí dát. Přeci mi nechcete tvrdit, že na zpracování standardního servosignálu, jehož parametry byly stanoveny dávno před přistáním Apolla na Měsíci, potřebujete 32-bitovej CPU.

U toho Arduino jazyka bych se zvysoka vykašlal na použití funkce map. Už jsem si s ní párkrát naběhl. Pokud jsou intervaly pevně daný, je lepší udělat přepočet ručně. Zde stačí (3000-pulseLenght). Map je šílenost pro amatéry. Použití té servoknihovny je taky naprostá zbytečnost.

Na náběžnou na vstupu bych začal odpočítávat 3 ms (pokud se bavíme o standardních servopulsech 1-2 ms). Na sestupnou na vstupu bych vytáhnul servovýstup na H a po dočítání těch 3 ms bych ho shodil na L. To je v podstatě přímá analogie tomu obvodovému řešení, nebo výpočtu (3000-pulseLenght). Celerone promiň, ale ten program v prvním příspěvku s map a servoknihovnou je normálně vopičárna :)
Přílohy
servoreverz.jpg
Reverzace servopulsu
Reverzace servopulsu
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“