ATtiny13A: Ovládání serva pomocí napětí Úvod Když jsem vyráběl krmítko pro psa s malým servomotorem, napadlo mně, že by mohlo být užitečné vytvořit nějaký jednoduchý obvod, který by podle analogové hodnoty napětí dokázal otáčet s hřídelkou serva. Využil jsem k tomu můj oblíbený mikrokontroler ATtiny13A. První verze programu byla velice jednoduchá. Servo se otáčelo v rozsahu -90° až +90° v závislosti na vstupním napětí 0V až 5V. Výsledná křivka převodu napětí na úhel vypadala takto: Postupem času jsem ten program vylepšil tak, že je možné nastavit nejen "dorazy", za které se servo nemůže dostat, ale také je možné zvolit, při jakém vstupním napětí se má servo k těmto dorazům přiblížit. Jedná se o 4 parametry, které jsou uloženy ve vnitřní EEPROM obvodu ATtiny13, a které určují:
Pokud vstupní napětí překročí nastavený interval, zůstane servo natočené ke zvolenému dorazu. Schéma
To samé schéma ve formátu pro Eagle: servodriver.sch Když už jsou nastaveny parametry pro body MIN a MAX na převodové křivce, stačí už jen zapojit servo podle tohoto schématu:
Nastavení parametrů: Parametry, které určují způsob převodu napětí na úhel, se nachází na prvních 4 adresách ve vnitřní EEPROM.První možností, jak je změnit, je přímá editace této EEPROM přes programátor (například s použitím programu eXtreme Burner). V tom případě se k ATtiny nemusí připojovat servisní trimr ani tlačítka. Požadovaný úhel je třeba ručně přepočítat z intervalu -90° až +90° na číslo 0x00 až 0xFF. Stejně tak požadovanou hodnotu napětí je také třeba přepočítat z intervalu 0V až Vcc (5V) na číslo 0x00 až 0xFF Je nutné dodržet podmínku, že nastavený minimální úhel je menší, než nastavený maximální úhel. Pokud tato podmínka není splněna, vyhodnotí to program jako chybu v EEPROM a pokusí se nastavit defaultní parametry:
Servisní režim: Druhý (komfortnější) způsob nastavení parametrů je obsažen přímo v programu - tzv. "Servisní režim".Když se při resetu (nebo při zapnutí napájení) drží tlačítko MIN, je možné pomocí servisního trimru nastavit minimální úhel natočení serva v rozsahu od -90° až do úhlu, který je aktuálně nastaven v EEPROM jako maximální úhel. Otáčením trimru se zároveň natáčí hřídel serva. Za stálého držení tlačítka MIN se na hlavní měřící vstup připojí takové napětí, při kterém se má servo na minimální úhel natočit. Po uvolnění tlačítka MIN dojde k zápisu obou parametrů minimálního bodu do EEPROM a servisní režim se ukončí. Takže například je možné nastavit, aby servo dojelo na
-30° při vstupním napětí 2V a při napětí 4V se natočilo na maximální
doraz, který je nastaven třeba na +45°.
Software POZOR! před použitím si prosím přečtěte doplnění z 19.1.2020 na konci této stránky Komentovaný zdroják: attiny_servo.ino Přeložený HEX soubor pro ATtiny13A: attiny_servo.hex Průběhy PWM signálů, kterými se servo ovládá:
Video
Doplnění 19.1.2020 Od nějaké verze překladače není pro ATtiny13 možné používat ve funkci "delayMicroseconds()" jako parametr proměnnou. Tuto funkci používám pro časování při generování PWM impulzů pro servo. Bylo nutné program trochu předělat.
těmito smyčkami:
Přepočet už není tak přesný, jako v původní verzi programu (verze 7). Pokud nepotřebujete dělat v programu změny, použijte původní HEX soubor verze 7, který nahrajete přes AVRDUDE (nebo přes nějakou grafickou nadstavbu - např AVRDUDESS) Jestliže potřebujete v kódu dělat nějaké úpravy, musíte si sehnat starší kompilátor zdrojáku pro verzi 7, nebo použijte upravenou verzi 8.
|
úvodní strana webu AstroMiK.org |
|
poslední úprava stránky 19.1.2020 |