Rólunk Cikkek Galéria Projektek Tagok Tudásbázis Tanfolyam Workshopok 3D Nyomtatás

Lego Tanfolyam: Szabályozástechnika

Szabályzási algoritmusokra a legkülönfélébb rendszerek tervezésénél lehet szükségünk: folyamatirányítás, robotika, erőművek, tápegységek. Ezen az alkalmon igyekszünk bemutatni, hogy érdemes egy alapszintű szabályzás implementálásának nekilátni úgy, hogy a témában teljesen kezdők is sikeresen tudják alkalmazni az átadott tudást a vizsgafeladat során.

Szabályzás hatásvázlata

Szabályzásra akkor van szükségünk egy rendszer irányításakor, ha nem tudjuk közvetlenül befolyásolni a szakasz (rendszer) irányítani kívánt paraméterét, viszont közvetett módon tudunk rá hatni. Gondoljunk csak például a modern autók sebességtartó funkciójára (tempomat): A vezető a kívánt sebességet állítja be, a rendszer pedig a motortól kért teljesítmény értéket változtatja. Nyilvánvaló, hogy ez összefüggésben van az autó sebességével, azonban mégse tudjuk azt mondani a motornak, hogy most adjon ki adott sebességhez szükséges teljesítményt. Még ha egy konstans sebesség tartását írjuk is elő, akkor is könnyen belátható, hogy egy emelkedő, vagy széllökés hatására csökkenni/növekedni fog az autó sebessége azonos leadott teljesítmény mellett. Itt jön a képbe a visszacsatolt szabályzási kör használata:

zárt kör

Az előírt paraméter az input ágon található, a szabályzott paraméter pedig az output. Mindkettő azonos dimenziójú, kettő különbsége a hibajel. A szabályzó a hibajelet kapja meg, ezen lefuttatja az algoritmust, majd kiadja a kiszámított beavatkozójelet a szakasznak (plant).

PID algoritmus

Rengeteg féle szabályzóalgoritmust fejlesztettek ki, és a mai napig születnek újak, mi most az alapvetőnek mondható PID algoritmussal fogunk megismerkedni.

Az algoritmus egyenlete nagyon egyszerű, mégis rengeteg esetben bőven elég a feladat megoldásához. Három részre bontható a felépítése: arányos (Proportional), integráló (Integral) és deriváló (Derivate) tagokra, a kimenet ezen tagok összege. Az arányos tag egyszerűen a hibajel felszorzott értéke, az integráló tag a hibajel integráljának, a deriváló tag pedig deriváltjának egy konstanssal szorzott értéke. Az algoritmus tervezésekor a mintavételi időt és a három konstans tényező értékét kell jól megválasztani. A konstansok hatása a rendszer viselkedésére:

Mint láthatjuk, a paraméterek megválasztása során kompromisszumot kell hoznunk. A teljes rendszerünk nem lehet instabil a legtöbb alkalmazás esetén, viszont szeretnénk minél gyorsabb beállást. A paraméterek megválasztására az előadáson láthatunk példákat.

Szabályzó implementálása

Bár az algoritmus ismertetése után bárki könnyen implementálhatja az algoritmust, az alkalom felgyorsítása érdekében előre megírtuk az algoritmus vázát:

#define dT 0.02
#define Ultrahang IN_3

#define P 1.0
#define I 0.0
#define D 0.0

task main() {
  float integral = 0;
  float lastError = 0;
  // 30cm-es távolság tartása
  float setpoint = 30;

  // Ultrahangszenzor inicializálása
  SetSensorLowspeed(Ultrahang);

  while(1) {
    float input = SensorUS(Ultrahang);
    float error = 0;
    float deriv = 0;
    float output = 0;

    // Ezen a tartományon még megbízhatóan működik
    if (input > 200) {
      input = 200;
    }

    // Hiba számítása
    error = setpoint - input;

    // Integrál számítása
    integral = integral + (error * dT);

    // Integráló tag limitálása
    if (integral > 5) {
      integral = 5;
    } else if(integral < -5) {
      integral = -5;
    }

    // Derivált számítása
    deriv = (error - lastError) / dT;
    lastError = error;

    // Beavatkozójel számítása
    output = P * error + I * integral + D * deriv;

    // Beavatkozójel korlátozása
    if (output > 100) {
      output = 100;
    } else if (output < -100) {
      output = -100;
    }

    // Beavatkozójel érvényre juttatása (az irány a motorok állásától függhet rover-enként)
    OnFwdSync(OUT_AB, (-1 * output), 0);

    // Távolság (szabályzott jellemző) megjelenítés
    NumOut(0, LCD_LINE1, input, TRUE);

    // dT miliszekundumokban
    Wait(20);
  }

  Off(OUT_AB);
}

További leírások: NI White paper