Stránka 2 z 4
Napsal: 14 kvě 2024, 23:44
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.
Napsal: 15 kvě 2024, 17:51
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.
Napsal: 15 kvě 2024, 17:59
od Mahoney
Mimochodem je to vlastnoat mnoha serv, že se chvějou kolem středové polohy.
Napsal: 15 kvě 2024, 18:09
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í.
Napsal: 15 kvě 2024, 20:41
od JirkaZ
Jak mám chápat výkřik "já mám hotovo"?
Zkusil jsi tu 555?
Napsal: 15 kvě 2024, 21:35
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).
Napsal: 15 kvě 2024, 22:52
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.
Napsal: 16 kvě 2024, 00:03
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í.
Napsal: 16 kvě 2024, 18:42
od Celeron
To mě těší, že jsi na fotce nepoznal, že je to bastl a né profi výroba. To potěší.

A k tomu ellectovi. Nezmínil ses tady o zapojení reverzu na RC-mánii? Ale možná že v tom mám chaos.

Napsal: 16 kvě 2024, 21:05
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í

Napsal: 17 kvě 2024, 01:06
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.
Napsal: 17 kvě 2024, 10:35
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
Napsal: 19 kvě 2024, 20:46
od Atlan
Pouzit nieco rychlejsie? Napr ch32v003 5v cip bezi do 48Mhz priklady na nete su.
Napsal: 20 kvě 2024, 10:33
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.

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.

Napsal: 21 kvě 2024, 13:31
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
