čtvrtek 13. listopadu 2008

Enkodér

Prozatím mám k dispozici motorek s enkodérem, který dává 100 impulzů na otáčku výstupní hřídele převodovky. Pokud tedy využiji čtyřnásobnou přesnost dekódování, dostanu 400 impulzů na otáčku. To je pro regulaci málo. Zatím tedy mám v nepájivém poli procesor (attiny2313) a lcd, na kterém zobrazuji počet tiků enkodéru a rychlost otáčení v cm/s.

Enkodér, který bude použitý v BP by měl mít 100 impulzů, ale na otočku motoru, což je při převodu 30:1 (GHM-16) 3000 impulzů na otáčku výstupní hřídele - a to pouze při jednoduché přesnosti. Při čtyřnásobné přesnosti je to už 12000 impulzů-tiků. S tím by se už mělo dát regulovat dobře. Níže uvádím odkazy, na kterých je zajímavé počtení o enkodérech, regulátorech apod.

Implementace regulátoru
Povídání o enkodérech
AVR - regulátor dvou motorků
Řízení pohybu, zpětná vazba
Enkodéry (princip funkce)

Takto primitivně vypadá čtení stavu enkodéru v programu - detekce nástupné i sestupné hrany:

// vzestupna hrana - ENA
if ((C_CHECKBIT(ENA)) && (!C_CHECKBIT(PENA))) {
if (C_CHECKBIT(ENB)) t_en++;
else t_en--;
}

// sestupna hrana - ENA
if ((!C_CHECKBIT(ENA)) && (C_CHECKBIT(PENA))) {
if (!C_CHECKBIT(ENB)) t_en++;
else t_en--;
}

// vzestupna hrana - ENB
if ((C_CHECKBIT(ENB)) && (!C_CHECKBIT(PENB))) {
if (!C_CHECKBIT(ENA)) t_en++;
else t_en--;
}

// sestupna hrana - ENB
if ((!C_CHECKBIT(ENB)) && (C_CHECKBIT(PENB))) {
if (C_CHECKBIT(ENA)) t_en++;
else t_en--;
}

// ulozeni minuleho stavu ENA
if (C_CHECKBIT(ENA)) C_SETBIT(PENA);
else C_CLEARBIT(PENA);

// ulozeni minuleho stavu ENB
if (C_CHECKBIT(ENB)) C_SETBIT(PENB);
else C_CLEARBIT(PENB);

}

ENA a ENB jsou pojmenování pro vstupní piny. PENA a PENB jsou pomocné bity.

Tento kód se vykonává v přerušení od timeru 0, s frekvencí 20kHhz, přičemž procesor běží na 8MHz. Frekvence vzorkování 20kHz se ukázala jako naprosto dostatečná pro čtení tohoto enkodéru. Otázkou dalšího pokusu bude, jaká frekvence je potřeba, pro čtení výše zmíněného lepšího enkodéru QME-01.

Pokud lze dekódování impulzů z enkodéru řešit lépe, budu rád, když mě na to někdo upozorní.

1 komentář:

  1. Dobry den,
    prave se rozhoduji jaky zpusob cteni enkoderu pouziju ve sve aplikaci a nejspis pouziju z predchozi konstrukce-privadet signaly na vstupy přerušení - používám ATmega16,který tyto vstupy má.V rutine prerusení jen přičítám hodnotu enkoderu ,jen se musí dávat pozor kde se zakáže přerušení

    Zbysek

    OdpovědětVymazat