Philipp Kundegraber / Mbed 2 deprecated SRUT_20190121_PID_Regler

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
kunphil
Date:
Tue Jan 22 19:14:35 2019 +0000
Parent:
0:a1208d0c44c8
Commit message:
Mit funktionierender "Xi"-Begrenzung und passendem "kd"

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r a1208d0c44c8 -r 6979c41729fb main.cpp
--- a/main.cpp	Tue Jan 22 18:48:28 2019 +0000
+++ b/main.cpp	Tue Jan 22 19:14:35 2019 +0000
@@ -2,7 +2,7 @@
 
 double  Xp = 0, Xi = 0, Xd = 0;         //Ausgabewerte der einzelnen Regler
 double Xe = 0, XeAlt = 0, Xa = 0;       //Störgröße, Alte Störgröße, Ausgabewert
-const double kp = 1, ki = 1, kd = 10;   //Verstärkungskonstanten für P, I und D
+const double kp = 1, ki = 1, kd = 8;   //Verstärkungskonstanten für P, I und D
 const double dt = 1;                    //Zeitkonstante in Sekunden
 const double maxi = 1023, mini = 0;     //Max.- und Min.- Werte für Ausgabe
 
@@ -13,9 +13,9 @@
 AnalogOut Output(p18);                  //Analoger Ausgang
 
 
-
 int main(){
-    printf("---  PID- Regler  ---\r\n");
+    printf("---  PID - Regler  ---\r\n");
+    printf("---  Kundegraber   ---\r\n");
     
     wait(2);                            // Zwei Sekunden warten vor Start
     
@@ -27,20 +27,22 @@
         Xp = kp * Xe;                   // P-Regler
         Xi = Xi + ki * Xe * dt;         // I-Regler
         Xd = kd * (Xe - XeAlt)/dt;      // D-Regler
-        
-        // Serielle Ausgabe der einzelnen Regler-Werte
-        printf("Xp = %4.1f, Xi = %4.1f, Xd = %4.1f \r\n",Xp,Xi,Xd); 
+         
         
         XeAlt = Xe;                     // Eingang für nächsten Zyklus merken
         
         Xa = Xp + Xi + Xd;              // PID Regler-Werte zusammenführen
         
+        if (Xi > maxi) Xi = maxi;       // Begrenzung des I-Reglers auf Maximum
         if (Xa > maxi) Xa = maxi;       // Begrenzung des Ausgangs auf Maximum
         else if (Xa < mini) Xa = mini;  // Begrenzung des Ausgangs auf Minimum
         
         
         Output = Xa/1023;              // Ausgang in 0 bis 1 ausgeben (0...3,3V)
         
+        // Serielle Ausgabe der einzelnen Regler-Werte
+        printf("Xp = %4.1f, Xi = %4.1f, Xd = %4.1f \r\n",Xp,Xi,Xd);
+        
         // Serielle Ausgabe des 10bit Ausganswertes 0...1023
         printf("   In: %4.1f     Out: %4.1f\r\n \r\n", Xe, Xa);