Nie. Ale nameráš pulz s 8x lepšou presnosťou.Celeron píše:No a co tím vyřešíš? Systém clock poběží na 32 a nebo 64 MHz?
Servoreverz s ATtiny85
Moderátor: Moderátoři
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.
Proč mi nemůže všechno chodit hned ?!!
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í.
Proč mi nemůže všechno chodit hned ?!!
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).
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.
Proč mi nemůže všechno chodit hned ?!!
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 ne - hledá důvod.
Ze dvou možností často volím tu třetí.
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 ne - hledá důvod.
Ze dvou možností často volím tu třetí.
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.
Proč mi nemůže všechno chodit hned ?!!
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 ne - hledá důvod.
Ze dvou možností často volím tu třetí.
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.
Proč mi nemůže všechno chodit hned ?!!
- nostalcomp
- Příspěvky: 169
- Registrován: 09 lis 2022, 00:00
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