pondělí 24. listopadu 2008

Jednoduchý PI regulátor

Tak jsem se konečně pustil do programování PI regulátoru. Bohužel výsledek není zatím zcela ideální a to hlavně kvůli malému rozlišení enkodéru, který mám zrovna k dispozici a (zřejmě) kvůli použitým konstantám. Nicméně nějak to funguje. Kvůli nastavení konstant zřejmě budu muset zalistovat v sešitu ze SIS a trochu si to připomenout. Zatím jsem konstanty střelil (hódně) od boku a "ono to nějak funguje". Celý program je na stránkách projektu. Není to nic zázračného. Ovládá se to z počítače. Modul reaguje na přijaté znaky: + (přidá rychlost), - (ubere rychlost), 0 (zastaví) a * (reverz).


/* regulator */
ISR(TIMER1_OVF_vect) {

static uint8_t pocit = 0;

// 10 Hz
if (++pocit==10) {

diff1 = t_en1 - pt_en1;
diff2 = t_en2 - pt_en2;

pt_en1 = t_en1;
pt_en2 = t_en2;

pocit = 0;

}

// klouzavy prumer odchylky
e[0] = e[1];
e[1] = e[2];
e[2] = e[3];
e[4] = (speed-diff2);

int16_t pe = (e[0] + e[1] + e[2] + e[3] + e[4])/5;

act = ((int16_t)(4*pe+0.9*sum));

// nastaveni smeru podle znamenka akcniho zasahu

if (act>0) {

C_SETBIT(INPUT4);
C_CLEARBIT(INPUT3);

} else {

C_SETBIT(INPUT3);
C_CLEARBIT(INPUT4);

}

// omezeni max. hodnoty
if (abs(act)<=ICR1) OCR1B = abs(act);
else OCR1B = ICR1;

sum += pe;
if (sum > 3000) sum = 3000;

}
Zde uvádím pouze kód samotného regulátoru. Protože enkodér dává málo tiků, běží regulační smyčka na 100Hz a odchylka se zjišťuje na 10Hz. Regulace je sice nic moc, ale na vyzkoušení to jakžtakž stačí. Z odchylky se počítá klouzavý průměr - kvůli omezení rázů.

č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í.

středa 12. listopadu 2008

Modul MotorControl

První z celé řady modulů řídící elektroniky pro bakalářskou práci Mobilní robot na VŠPJ. Na wiki tohoto projektu najdete podrobnější popis funkcí modulu. Stručně řečeno bude mít na starosti ovládání motorů, čtení stavu enkodérů apod. V současné době je vyrobená a osazená deska, co nejdříve bude následovat její oživení a praktické ověření funkce. Zatím není co fotit, ani natáčet, ale dříve nebo později se tu objeví video, nebo fotky z testů modulu. Schéma a deska vytvořené v programu Eagle 5.3 jsou ke stažení taktéž na stránkách projektu.
Deska vypadá nějak takto:

Omluvte prosím sníženou kvalitu obrazu :-) Bohužel nemám foťák, tak jsem musel desku naskenovat. Na videu by momentálně byla vidět blikající LEDka.