řízení rychlosti motoru

Odpovědět
vladask
Příspěvky: 7
Registrován: 25 lis 2013, 22:24

řízení rychlosti motoru

Příspěvek od vladask »

U svého robota bych chtěl použít pro řízení pohonu at megu16. Jedním časovačem budu generovat pwm pro dc motor pro řízení otáček a druhým časovačem bude pwm-kem řídit servo pro natáčení kola. Dc motor má zabudovaný enkodér 200imp/ot a chtěl bych ho použít jako zpětnou vazbu pro řízení otáček.
Jako první co mne napadlo bylo měřit impulzy v časovém intervalu. Ale pro toto řešení by bylo ideální dva volné čítače/časovače, které bohužel nemám. Takže další možnost je v programu udělat čekací smyčku, která bude spouštět a zastavovat volný čítač impulzů.
Jde to udělat bez sw čekací smyčky nějak jinak?
Bodie
Příspěvky: 110
Registrován: 05 kvě 2013, 17:52

Re: řízení rychlosti motoru

Příspěvek od Bodie »

U megy16 jsou pokud se nepletu 3 timery, dva z nich dokáží generovat PWM signál. Takže jeden pro DC motor, druhý pro servosignál, a třetím odměřovat čas. Výstup z enkodéru připojit na pin s externím přerušení a v něm inkrementovat nějakou proměnnou, případně je-li k dispozici A B signál, tak dle směru inkrementovat/dekrementovat. A v časové smyčce volného timeru když budeš po pravidelné době odečítat hodnotu z té proměnné a nulovat ji, mělo by všechno fungovat. S tím že smyčka hlavního programu je stále volná pro regulaci např., ale ta se dá zvládnout při tom odečítání hodnoty.
petr-kubac
Příspěvky: 96
Registrován: 24 úno 2013, 15:43
Bydliště: Frydek - Mistek
Kontaktovat uživatele:

Re: řízení rychlosti motoru

Příspěvek od petr-kubac »

Většinou jsem to měl uděláno tak, že na Timer0 jsem měl pověšenou rutinu, která se spouštěla velmi často třeba 5000x za sekundu a ta dělala veškerou "údržbu na pozadí" to jest inkrementovala proměnné podle pulsů enkodéru a spouštěla PID algoritmus, který mi z rychlosti vypočetl PWM pro motory

Pokud jsem něco potřeboval spouštět třeba 25X za sekudu tak jsem to dělal tak že někde v této proceduře bylo
něco jako

TICK = TICK + 1
IF TICK > 200 THEN
begin
TICK = 0
PID (LEVEKOLO, PRAVEKOLO)
end
"The best computer language is a solder" - "Nejlepší programovací jazyk je pájka" - Bob Pease
http://petr-kubac.blog.cz/
Odpovědět