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?
řízení rychlosti motoru
Re: řízení rychlosti motoru
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.
-
- Příspěvky: 96
- Registrován: 24 úno 2013, 15:43
- Bydliště: Frydek - Mistek
- Kontaktovat uživatele:
Re: řízení rychlosti motoru
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
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/
http://petr-kubac.blog.cz/