Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 1:6979c41729fb, committed 2019-01-22
- 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);