Kuczmann Miklós

Lineáris rendszerek és szabályozások Arduino UNO mikrovezérlővel


I.4.1. Mintavételezés a mikrovezérlő időzítőivel

A mintavételezés pontos megvalósításához célszerű a mikrovezérlő megszakítás (timer interrupt) szolgáltatásait felhasználni. Az I.2.4. fejezetben már utaltunk rá, hogy az Arduino UNO mikrovezérlő három ilyen időzítőt tartalmaz, amelyek speciális regisztereken keresztül programozhatók. Ezek a , és számlálók.
Az időzítő számlálóját a mikrovezérlő meghatározott időközönként inkrementálja. Ha ez a számláló elér egy előre beállított értéket, akkor nullázza (reseteli) a számláló értékét, és újraindítja a számlálást nulláról. Ez a számláló túlcsordulása. Ebben a pillanatban történik a számlálóhoz rögzített függvény meghívása, amely függvény a mintavételi pillanatokban szükséges elvégzendő műveleteket tartalmazza. Ha tehát beállítjuk a számláló végértékét és az inkrementálás frekvenciáját, akkor a mintavételi periódusidőt vagy az mintavételi frekvenciát állítjuk be. Az indexben szereplő s betű a sampling, azaz mintavételezés szóra utal.
Az Arduino UNO órajelfrekvenciája 16 MHz. Ez a maximális frekvencia, amellyel a számlálók inkrementálhatók. Ezt a frekvenciaértéket csökkenteni lehet az ún. segítségével, ami az
 
(I.1)
 
frekvenciát adja. A számláló tehát ezzel a frekvenciával inkrementál. A 1, 8, 32, 64, 256 és 1024 értékeket veheti fel a három (CS#2, CS#1, CS#0) megfelelő beállításával (l. I.3. táblázat). A helyébe 0, 1 vagy 2 kerül, ha a , vagy számlálóval dolgozunk.
 
I.3. táblázat. A beállítása a három segítségével.
CS#2
CS#1
CS#0
0
0
0
-
-
-
0
0
1
1
1
1
0
1
0
8
8
8
0
1
1
64
64
32
1
0
0
256
256
64
1
0
1
1024
1024
-
1
1
0
-
-
-
1
1
1
-
-
-
 
A számláló nullától indul, és az ún. értékig inkrementál, ami beállítható, majd reset után újra nullától indul. A megszakítás (interrupt) frekvenciája tehát a következő:
 
(I.2)
 
Más szóval ez a mintavételi frekvencia
 
(I.3)
 
A nullától indul, emiatt kell a +1 a nevezőben.
Ha tehát a mintavételi frekvenciát kívánjuk definiálni, akkor a megfelelő ismeretében a értékét kell megadnunk:
 
(I.4)
 
A az regiszterbe kerül.
A és számlálók 8 bitesek, azaz maximum -ig inkrementálhatók. A számláló 16 bites, azaz maximum -ig inkrementálható. Az előbbiekben kapott ezen értékeket veheti fel maximum.
A számlálók beállítása a függvényben történik, a könyvben a következők szerint használva:
 
void setup(){
cli();
 
TCCR0A = 0; // Timer0 inicializálás
TCCR0B = 0; // Timer0 inicializálás
TCNT0 = 0; // Counter inicializálás
OCR0A = 124; //=(16*10^6)/(64*2000)-1 (<256, l. (I.4))
TCCR0A |= (1 << WGM01);
TCCR0B |= (1 << CS01) | (1 << CS00); // prescaler=64
TIMSK0 |= (1 << OCIE0A);
 
TCCR1A = 0; // Timer1 inicializálás
TCCR1B = 0; // Timer1 inicializálás
TCNT1 = 0; // Counter inicializálás
OCR1A = 15624; //=(16*10^6)/(1024*1)-1 (<65536, l. (I.4))
TCCR1B |= (1 << WGM12);
TCCR1B |= (1 << CS12) | (1 << CS10); // prescaler=1024
TIMSK1 |= (1 << OCIE1A);
 
TCCR2A = 0; // Timer2 inicializálás
TCCR2B = 0; // Timer2 inicializálás
TCNT2 = 0; // Counter inicializálás
OCR2A = 249; //=(16*10^6)/(8*8000)-1 (<256, l. (I.4))
TCCR2A |= (1 << WGM21);
TCCR2B |= (1 << CS21); // prescaler=8
TIMSK2 |= (1 << OCIE2A);
sei();
}
 
A 2 kHz, a 1 Hz, végül a 8 kHz frekvenciával mintavételez. A és regiszterek nullázása inicializálja a számlálók beállítását, a nullázása nullázza a számlálót. A a számláló frekvenciájának megfelelően az regiszterbe kerül. Lényeges, hogy a kapott egész érték kisebb legyen 256-nál, illetve 65536-nál a és , illetve a esetében. Ezt a kódban is jelezzük. A megfelelő kiválasztásával ez a feltétel biztosítható. A következő három sor végzi sorban a CTC üzemmód bekapcsolását, a beállítását, végül a megszakítás engedélyezését. Ezt a három illusztratív példát értelemszerűen lehet módosítani a szükséges megszakítások beállításához.
A és a beállítások előtt tiltja, majd engedélyezi a megszakításokat.
Az I.4.3. fejezetben egy példát mutatunk az alkalmazásra, illetve a könyvben többször alkalmazni fogjuk ezt a mintavételezési módszert a szabályozók működtetésekor.
A függelékben összefoglaltuk az egész értékű mintavételi frekvenciák beállításait.
Ez a beállítás az ún. CTC Mode (Clear Timer on Compare Match Mode).
 

Lineáris rendszerek és szabályozások Arduino UNO mikrovezérlővel

Tartalomjegyzék


Kiadó: Akadémiai Kiadó

Online megjelenés éve: 2026

ISBN: 978 963 664 238 9

A könyv a lineáris rendszerek és lineáris szabályozások témaköreit dolgozza fel azzal a céllal, hogy az elméleti ismereteket egyszerűen kivitelezhető gyakorlati problémák megoldásával támassza alá, különös hangsúlyt fektetve ezért az Arduino UNO mikrovezérlő használatára. Fontos célunk, hogy a bemutatott demonstrációs eszközök egyszerűen kivitelezhetőek legyenek, így az eredmények könnyen rekonstruálhatóak, ugyanakkor jó alapot biztosítanak a továbblépéshez, bonyolultabb berendezések építéséhez, és az elmélet helyes alkalmazásához.

Az első rész a felhasznált hardvereket és szoftvereket mutatja be. A Matlab alapvető jelentőségű rendszerek analízisében, szabályozások tervezésében, és a különféle szimulációkban. A könyvbeli példákat Matlab környezetben dolgoztuk ki. Ezek bemutatása nagyon részletes, a példák nagyban segítik az elmélet megértését. Az Arduino UNO mikrovezérlőre és a hozzá kapcsolható egyéb hardverekre egyszerűségük és kedvező áruk miatt esett a választás. A Matlab környezetben tervezett szabályozókat, illetve a méréseket ezzel a mikrovezérlővel valósítjuk meg.

Számos nagyon jó könyv létezik, amelyek a szükséges mélységben vezetik be az Olvasót a Jelek és rendszerek, illetve a Szabályozástechnika témakörökbe. Néhányat a könyv végén található irodalomjegyzékben megadunk. Szándékosan csak magyar nyelvű könyveket sorolunk itt fel, a témakör hazai és nemzetközi irodalma óriási.

A második részben a Jelek és rendszerek témakörét dolgozzuk fel, ahol az elméleti háttér mellett illusztratív példákat hozunk, melyek segítségével könnyebben érthetővé válnak a tárgyalt fogalmak és módszerek. A témában számos kiváló irodalom fellelhető, melyekre hivatkozva tömör összefoglalását adjuk a témakörnek.

A harmadik rész a Szabályozástechnika területét járja körbe, ismét csak nagyon tömören, a klasszikus PID szabályozóktól az állapottér alapú szabályozásokig mutatjuk be a módszereket. Az elméleti alapokat egy konkrét példa illusztrálja.

A negyedik rész két esettanulmányt tárgyal nagyon részletesen. Az első egy egyenáramú motor, melynek modellezését, paramétereinek méréseken alapuló identifikálását és fordulatszámának szabályozását mutatjuk be. A másik egy instabil rendszer, egy lejtőn guruló golyó stabilizálását valósítja meg. Elvégezzük a demonstrációs eszközök aprólékos matematikai modellezését, a szabályozási körök elméleti tervezését, majd gyakorlati megvalósítását.

Reményeink szerint a könyv az Olvasó segítségére lesz a lineáris rendszerek és szabályozások megismerésében, valamint gyakorlatban való alkalmazásukban. A könyv jól használható az egyetemi mérnöki és informatikus oktatásban, különösen a témakörbe vágó szakdolgozatok, diplomamunkák és a hallgatói kutatómunka területén.

A közölt mintaprogramok szabadon felhasználhatók, továbbfejleszthetők.

Hivatkozás: https://mersz.hu/kuczmann-linearis-rendszerek-es-szabalyozasok-arduino-uno-mikrovezerlovel//

BibTeXEndNoteMendeleyZotero

Kivonat
fullscreenclose
printsave