atmega16 + servomotor(SG90) + 8bit timer

Dobrý den,

rád bych poprosil o radu, snažím se ovládat servomotor pomocí FAST PWM s časovačem TIMER0, časovač je 8bitový a nemá možnost zapisovat do ICRx, díky které bych byl schopný zvolit přesnou frekvenci a to 50hz. Je nějaká možnost jak změnit jak pomocí 8bitového časovače u atmega16 měnit frekvenci. Napadlo mě, že prostě jednoduše bude počítat čas na 20ms pomocí časovače, které servo potřebuje. Předem děkuji za jakoukoliv pomoc.

Předně je potřeba si uvědomit co vlastně potřebuješ generovat a to je ve skutečnosti impuls v délce 1-2 [ms] s určitým rozlišením, nikoliv přesnou frekvenci 50Hz. Servu je jedno jestli je to 45 nebo 55 Hz.

Takže pokud to chápu správně, tak by mi prostě jednoduše mělo stačit podržet log.1 na pinu přesnou dobu tedy podle toho kam chci otočit servem a tudíž není vůbec potřeba používat PWM ?

Stačí chvilka hledání :

Je to tam jednom v odstavci vedle obrázku s polohama serva a impulzama do něj. Při použití interního oscilátoru (1/2/4/8 MHz) jsi schopný se dostat na 30,5 Hz nebo 61 Hz.

Pokud bys trval na 50 Hz, pak bys musel použít krystal 3,2768MHz (nebo jiný, vypočítaný z požadované frekvence, rozlišení čítače a jednoho z dostupných prescalerů), startovat impulzy druhým časovačem nebo signál generovat zcela softwarově.


To byla reakce na Tvojí prosbu o radu (první příspěvek) a teď odpověď na Tvou otázku (druhý příspěvek) :

Pochopil jsi to správně. Nicméně pokud použiješ HW PWM, pak s tím má procesor daleko méně práce, než když budeš generovat signál plně softwarově. Zkusil bych PWM s frekvencema, jak jsem psal výše (30,5 nebo 61 Hz). Pokud by to dělalo potíže, pak by asi záleželo na tom, co všechno má procesor na starosti.

  1. Pokud v podstatě jenom generuje signál pro servo a na polohu dostává po UARTu nebo AD převodníkem a nic jinýho, pak bych asi sahnul po té variantě s použitím jednoho časovače v PWM režimu na generování pulzu s tím, že při TOV by se vypnul a druhý časovač v CTC režimu nastavený tak, aby k přerušení docházelo s periodou cca 50 Hz a startoval bych PWM časovač pomocí něho.

  2. Pokud by toho měl na starosti mnohem více, pak bych asi sahnul po variantě HW PWM + krystal.