Libs for using Nucleo STM32F411 periphery

Embed: (wiki syntax)

« Back to documentation index

PIDControl Class Reference

PIDControl Class Reference

#include <PIDControl.h>

Public Member Functions

 PIDControl (bool P_usr, float KP_usr, bool I_usr, float KI_usr, bool D_usr, float KD_usr)
 ~PIDControl ()
int16_t ctrltask (int16_t wsoll, int16_t yist, uint16_t time)
bool setKP (bool P_usr, float KP_usr)
bool setKI (bool I_usr, float KI_usr)
bool setKD (bool D_usr, float KD_usr)
bool setAWU (float awu_gain_usr)
void setUlimits (int16_t u_max_usr, int16_t u_min_usr)
void setIlimits (bool integrallimiter_usr, int16_t i_max_usr, int16_t i_min_usr)
void lock ()
void unlock ()
uint8_t getStatus ()
void setERFFCT (void(*CTRL_HANDLER)(void))

Protected Attributes

bool P
 Aktiviert den Proportional-Anteil.
bool I
 Aktiviert den Integral-Anteil.
bool D
 Aktiviert den Differnetial-Anteil.
float KP
 Verstärkung für den Proportional-Anteil.
float KI
 Verstärkung für den Integral-Anteil.
float KD
 Verstärkung für den Differnetial-Anteil.
int16_t u_max
 Maximale Führungsgröße.
int16_t u_min
 Minimale Führungsgröße.
int16_t i_max
 Maximaler Integralanteil.
int16_t i_min
 Minimaler Integralanteil.
float awu_gain
 Anti-Windup Verstärkung.
uint8_t status

Detailed Description

Diese Klasse erstellt einen PID-Regler. die einzelnen Regeranteile können bei der Initialisierung seperat einsgestellt werden. Bei der Initialisierung des Reglers bzw. der Klasse wird der Statusvektor resettet und die einzelnen Anteile werden auf null gesetzt und gesperrt. Solange die Variable Lock nicht wahr ist, kann über die Funktionen setKP(), setKI() und setKD() der Regler parametriert werden. Es ist zudem möglich die Regelgrenzen des Regelers festzulegen. Bei Überschreiten der Regelgrenzen wird ein Eintrag in dem Statusvektor erzeugt. Bei einer Änderung im Statusvektor kann eine externe Funktion aufgerufen werden, die dann den Statusvektor auswertet. Der Regeltask ctrltask sollte in regelmäßigen Abständen aufgerufen werden. Wichtig dabei ist eine Stänige Übergabe des Ist und Soll-Werts sowie die Regelzeit.

pid-controller.jpg

Schematischer Regleraufbau ohne Statusvektoren und Fehlermeldungen

 #include "mbed.h"
 #include "PIDControl.h"        

 int16_t ist_value;                                   // Ist-Wert der Strecke
 int16_t soll_value;                                  // Soll-Wert der Strecke
 int16_t stell_value;                                 // Stell-Wert der Strecke

 uint8_t statusvektor;                                // Statusvektor des Reglers

 int main() {
    
     PIDControl  PIregler(1,50.8,1,0.5,0,0);          // PI-Regler mit KP = 50,8 und KI = 0,5

     PIregler.setIlimits(1,6000,1000);                // Aktivierung der maximale und minimale Größe des I-Anteils

     PIregler.setAWU(5);                              // Die Differenz zwischen I-Anteil und Limit wird mit 
                                                      // Verstärkung zurückgeführt

     PIregler.setUlimits(7000,500);                   // Limitierung der Stellgröße

     PIregler.lock();                                 // Sperrt weitere Einstellung an dem Regler
 
      while(1){
      
          stell = PIregler.ctrltask(ist, soll, 1000); // Die Schleife wiederholt sich alle 1kHz  
 
          statusvektor = PIregler.getStatus();        // Status des Reglers wird ausgelesen

        wait(0.001);                                  // Regler wird alle 1kHz aufgerufen
      }
    }

Definition at line 49 of file PIDControl.h.


Constructor & Destructor Documentation

PIDControl ( bool  P_usr,
float  KP_usr,
bool  I_usr,
float  KI_usr,
bool  D_usr,
float  KD_usr 
)

Konstruktor zum Erstellen einer Instanz mit einer vom User festgelegten Größe

Parameters:
PP-Anteil Aktivert den P-Anteil, wenn der Wert 1 ist
KPP-Anteil Verstärkung des P-Anteils
II-Anteil Aktivert den I-Anteil, wenn der Wert 1 ist
KII-Anteil Verstärkung des I-Anteils
DD-Anteil Aktivert den D-Anteil, wenn der Wert 1 ist
KDD-Anteil Verstärkung des D-Anteils

Definition at line 8 of file PIDControl.cpp.

~PIDControl (  )

Destruktor entfernt den Regler

Definition at line 65 of file PIDControl.h.


Member Function Documentation

int16_t ctrltask ( int16_t  wsoll,
int16_t  yist,
uint16_t  time 
)

Reglerprozess. Rückgabewert ist die Führungsgröße

Parameters:
usollSOLL-Wert Soll-Wert der Regelstrecke
yistIST-Wert Ist-Wert der Regelstrecke
timeZeitkonstatnte vergangene Zeit seit dem letzen Regeltask in ganzen Mirkosekunden (1ms = 1000µs)

Definition at line 32 of file PIDControl.cpp.

uint8_t getStatus (  )

Liest den Status des Reglers aus

Definition at line 207 of file PIDControl.cpp.

void lock (  )

Sperrt den Zugriff auf die Reglerparameter

Definition at line 197 of file PIDControl.cpp.

bool setAWU ( float  awu_gain_usr )

Ermöglich Zugriff auf den Anti-Windup zum begrenzen des I-Anteils

Parameters:
awu_gainAnti-Windup Verstärkung Rückführung der Differenz zwischen Stellgröße und Begrenzung mit einer Verstärkung in den I-Anteil

Definition at line 166 of file PIDControl.cpp.

void setERFFCT ( void(*)(void)  CTRL_HANDLER )

Setzt eine Routine die verwendet wird, wenn ein schwerwiegender Fehler im Statusvektor gesetzt wird.

Parameters:
BUFFER_HANDLERAdresse zur weiteren Routine

Definition at line 212 of file PIDControl.cpp.

void setIlimits ( bool  integrallimiter_usr,
int16_t  i_max_usr,
int16_t  i_min_usr 
)

Setzt die Limits des Integralanteils

Parameters:
integrallimiterAktiviert den Limiter aktiviert eine seperate Begrenzung des I-Anteils
i_maxmaximales Limit maximaler I-Anteil
i_minminimsler Limit minimaler I-Anteil

Definition at line 178 of file PIDControl.cpp.

bool setKD ( bool  D_usr,
float  KD_usr 
)

Ermöglich Zugriff auf die Reglerparameter des D-Anteils. Rückgabe Wert ist eins, wenn die Reglerwerte gespeichert worden sind.

Parameters:
DD-Anteil Aktivert den D-Anteil, wenn der Wert 1 ist
KDD-Anteil Verstärkung des D-Anteils

Definition at line 152 of file PIDControl.cpp.

bool setKI ( bool  I_usr,
float  KI_usr 
)

Ermöglich Zugriff auf die Reglerparameter des I-Anteils. Rückgabe Wert ist eins, wenn die Reglerwerte gespeichert worden sind.

Parameters:
II-Anteil Aktivert den I-Anteil, wenn der Wert 1 ist
KII-Anteil Verstärkung des I-Anteils

Definition at line 138 of file PIDControl.cpp.

bool setKP ( bool  P_usr,
float  KP_usr 
)

Ermöglich Zugriff auf die Reglerparameter des P-Anteils. Rückgabe Wert ist eins, wenn die Reglerwerte gespeichert worden sind.

Parameters:
PP-Anteil Aktivert den P-Anteil, wenn der Wert 1 ist
KPP-Anteil Verstärkung des P-Anteils

Definition at line 124 of file PIDControl.cpp.

void setUlimits ( int16_t  u_max_usr,
int16_t  u_min_usr 
)

Setzt die Limits der Stellgröße U bzw. des Ausgangs des Reglers

Parameters:
u_maxmaximales Limit maximale Ausgangsgröße
u_minminimales Limit minimale Ausgangsgröße

Definition at line 187 of file PIDControl.cpp.

void unlock (  )

Erlaubt den Zugriff auf die Reglerparameter

Definition at line 202 of file PIDControl.cpp.


Field Documentation

float awu_gain [protected]

Anti-Windup Verstärkung.

Definition at line 205 of file PIDControl.h.

bool D [protected]

Aktiviert den Differnetial-Anteil.

Definition at line 187 of file PIDControl.h.

bool I [protected]

Aktiviert den Integral-Anteil.

Definition at line 185 of file PIDControl.h.

int16_t i_max [protected]

Maximaler Integralanteil.

Definition at line 201 of file PIDControl.h.

int16_t i_min [protected]

Minimaler Integralanteil.

Definition at line 203 of file PIDControl.h.

float KD [protected]

Verstärkung für den Differnetial-Anteil.

Definition at line 194 of file PIDControl.h.

float KI [protected]

Verstärkung für den Integral-Anteil.

Definition at line 192 of file PIDControl.h.

float KP [protected]

Verstärkung für den Proportional-Anteil.

Definition at line 190 of file PIDControl.h.

bool P [protected]

Aktiviert den Proportional-Anteil.

Definition at line 183 of file PIDControl.h.

uint8_t status [protected]

8-Bit Statusvektor:

  • [7] Regelgrenze max überschritten (EXTFCT)
  • [6] Regelgrenze min unterschritten (EXTFCT)
  • [5] Fehler bei der Berechnung (EXTFCT)
  • [4] aktueller IST-Wert < Soll-Wert
  • [3] aktueller IST-Wert > Soll-Wert
  • [2] Regelabweichung ist null
  • [1] I-Anteil Limit erreicht
  • [0] Reglertask aktiv
    Bei schwerwiegenden Fehlern wird eine externe Routine (EXTFCT) aufgerufen, falls diese angegeben wurde.

Definition at line 219 of file PIDControl.h.

int16_t u_max [protected]

Maximale Führungsgröße.

Definition at line 197 of file PIDControl.h.

int16_t u_min [protected]

Minimale Führungsgröße.

Definition at line 199 of file PIDControl.h.