Kuczmann Miklós

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


IV.1.3. A vizsgálatokat vezérlő program kerete

A nyílt hurkú analízist és a szabályozási körök vizsgálatát a következő keretprogram segítségével végezzük el. A részleteket lépésről lépésre a későbbiekben mutatjuk be.
Az Arduino UNO impulzusszélesség-modulációt (PWM – pulse width modulation) használó kimenetével lehet a motor kapocsfeszültségét beállítani. Ez a kimenet itt (3. digitális port). A fordulatszám mérésére szolgál a 2. digitális bemenet: , amelyhez itt megszakítás is társul. Az áram mérése az analóg bemeneten történik.
A függvényben megadjuk a soros adatátvitel sebességét, definiáljuk a kimeneti és a bemeneti digitális csatlakozási pontokat, beállítjuk a időzítőhöz kapcsolt PWM-gerjesztés frekvenciáját a maximális értékre, definiáljuk a fordulatszám mérésére szolgáló megszakítást, és végül, példaképp, beállítjuk a PWM értékét 150-re. Az Arduino UNO PWM-kimenetével lehet a motor kapocsfeszültségét beállítani. A kimenet 8 bites, azaz a PWM-érték az függvényben 0 és 255 közötti egész érték lehet, így határozva meg a kitöltési tényező értékét, azaz a motort meghajtó armatúrafeszültséget.
A függvényben valósíthatók meg a különféle mérések, és maga a szabályozási hurok is. Az idő mérésére szükség van, ez a változó. A fordulatszám mérése megszakítással történik, emiatt szükséges a keret, hogy az éppen mért értéket ne írja felül egy időközben beérkező megszakítás, amíg a mikrokontroller a hibát számítja. A mért érték birtokában a hiba egyszerűen számítható (a hibát itt rad/s egységben kapjuk):
 
float error = (Ref - Fordulatszam)/60.0*2*3.1415;
 
azaz az RPM-ben definiált referenciaértékből le kell vonni a szintén RPM-ben mért fordulatszámértéket (). Ezt követi a beavatkozó jel meghatározása a szabályozó algoritmus segítségével, majd a tényleges beavatkozás az függvényen keresztül (itt a 150-es érték csak példaként szolgál, a későbbiekben ez az érték a szabályozó algoritmusa által számított beavatkozó jel lesz). Bizonyos változókat ezután frissíteni szükséges, a számunkra érdekes változókat pedig el kell menteni a soros porton keresztül. A részleteket később mutatjuk be. Ebben a programrészletben mutatjuk meg, hogy mérjük az áramot az árammérő szenzor segítségével.
A megszakításban előforduló változókat kulcsszóval kell deklarálni.
 
#define PWM_OUT 3
#define SPEED_IN 2
 
volatile unsigned long t0;
volatile bool start=false;
volatile float Fordulatszam=0;
float Ref=1000;
 
void setup() {
Serial.begin(9600);
 
pinMode(PWM_OUT, OUTPUT);
pinMode(SPEED_IN, INPUT);
 
TCCR2B = TCCR2B & 0b11111000 | 0x01;
 
attachInterrupt(digitalPinToInterrupt(SPEED_IN),MEASURE_ISR,RISING);
 
analogWrite(PWM_OUT, 150);
}
 
void loop() {
unsigned long t1 = micros();
noInterrupts();
// 1.) Fordulatszám mérése
// 2.) Hibaszámítás
interrupts();
 
// 3.) Beavatkozó jel számítása
 
// 4.) Beavatkozás
analogWrite(PWM_OUT, 150);
 
float v = (5.0/1024.0)*analogRead(A1);
float Aram = (v+0.01-2.5)/0.066;
 
// 5.) Változók felülírása és soros porton történő továbbítása
Serial.print(t1);
Serial.print(',');
Serial.print(Fordulatszam);
Serial.print(',');
Serial.print(Aram);
Serial.print('\n');
}
 
void MEASURE_ISR()
{
if (!start){
start = true;
t0 = micros();
}
else{
unsigned long t1 = micros();
unsigned long dt = t1-t0;
t0 = t1;
Fordulatszam = 60.0e6 / dt / 8.0;
}
}
 
A függvény a fordulatszám mérésére szolgál, és abban a pillanatban hívódik meg, amikor a tárcsa egy-egy fekete csíkja eléri az optokaput. A megszakítás két csík elhaladása közt eltelt időt méri, és abból számítja ki a percenkénti fordulatszámot.
Hangsúlyozzuk, hogy a szabályozó bemenetének mértékegysége , a referenciajelet és a mért fordulatszámot viszont RPM egységben értjük. A hibajel számításánál emiatt kell a értékű szorzó.
 

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