Stabilus 322699 wDoublePID
Dependencies: mbed QEI PID DmTftLibraryEx
Revision 36:cab8aa44ef91, committed 2022-04-11
- Comitter:
- lex9296
- Date:
- Mon Apr 11 13:48:34 2022 +0000
- Parent:
- 35:0f6adc0b95b9
- Commit message:
- Double PID
Changed in this revision
Display/DisplayDriver.cpp | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/Display/DisplayDriver.cpp Mon Apr 11 11:52:49 2022 +0000 +++ b/Display/DisplayDriver.cpp Mon Apr 11 13:48:34 2022 +0000 @@ -592,8 +592,8 @@ // LA: Then PLOT the New // - aui16_PlotPOS2VelClears_Hi[ui16_Index000] = (uint16_t) (ai32_POS2VelGraph[(ui16_Index000* ci64_TargetPOS)/ 240]/ 1); - aui16_PlotPOS2VelClears_Lo[ui16_Index000] = (uint16_t) (ai32_POS2VelGraph[((ui16_Index000* ci64_TargetPOS)/ 240)- 1]/ 1); + aui16_PlotPOS2VelClears_Hi[ui16_Index000] = (uint16_t) (ai32_POS2VelGraph[(ui16_Index000* ci64_TargetPOS)/ 240]* 2); + aui16_PlotPOS2VelClears_Lo[ui16_Index000] = (uint16_t) (ai32_POS2VelGraph[((ui16_Index000* ci64_TargetPOS)/ 240)- 1]* 2); // Tft.drawVerticalLineEx (ui16_Index000, 175 - aui16_PlotPOS2VelClears_Hi[ui16_Index000], (int16_t) aui16_PlotPOS2VelClears_Hi[ui16_Index000]- aui16_PlotPOS2VelClears_Lo[ui16_Index000], ui16_Foreground); }
--- a/main.cpp Mon Apr 11 11:52:49 2022 +0000 +++ b/main.cpp Mon Apr 11 13:48:34 2022 +0000 @@ -64,8 +64,11 @@ //Timer Time; //PID SpeedClosedLoop(P,I,D,&Time); -// Kc, Ti, Td, interval -PID PID_VelocityClosedLoop (1.2, 0.0, 0.0, RATE); +// Kc, Ti, Td, interval +//PID PID_VelocityClosedLoop_FW (0.1, 0.001, 0.01, RATE); + +PID PID_VelocityClosedLoop_FW (0.4, 0.0, 0.0001, RATE); +PID PID_VelocityClosedLoop_BW (0.41, 0.0, 0.01, RATE); //PID PID_VelocityClosedLoop (P, I, D, RATE); //const int64_t ci64_TargetPOS = 240; // @@ -251,7 +254,7 @@ in_PosizionatoreSW.f_MaximumSpeed_x100_FW = 100.0f; // % of "i32_Max_Speed" in_PosizionatoreSW.f_MaximumSpeed_x100_BW = 100.0f; // in_PosizionatoreSW.f_ServoLockSpeed_x100_FW = 25.0f; // Riferimento di velocità minima a cui (appena) si muove l'asse [verso FW] - in_PosizionatoreSW.f_ServoLockSpeed_x100_BW = 25.0f; // Riferimento di velocità minima a cui (appena) si muove l'asse [verso BW] + in_PosizionatoreSW.f_ServoLockSpeed_x100_BW = 50.0f; // Riferimento di velocità minima a cui (appena) si muove l'asse [verso BW] // JOG Mode // ======== @@ -269,15 +272,17 @@ // ================= // // Input Speed (ref)= 0.. 512[ui/s] - PID_VelocityClosedLoop.setInputLimits(0.0f, (float)in_PosizionatoreSW.i32_Max_Speed); + PID_VelocityClosedLoop_FW.setInputLimits(0.0f, (float)in_PosizionatoreSW.i32_Max_Speed); + PID_VelocityClosedLoop_BW.setInputLimits(0.0f, (float)in_PosizionatoreSW.i32_Max_Speed); // Output PWM (ref)= 0.. 1 - PID_VelocityClosedLoop.setOutputLimits(0.0f, 1.0f); + PID_VelocityClosedLoop_FW.setOutputLimits(0.0f, 1.0f); + PID_VelocityClosedLoop_BW.setOutputLimits(0.0f, 1.0f); // If there's a bias. // PID_VelocityClosedLoop.setBias(0.3); - PID_VelocityClosedLoop.setMode(AUTO_MODE); - // Starts @Zero - PID_VelocityClosedLoop.setSetPoint(0.0f); +// PID_VelocityClosedLoop.setMode(AUTO_MODE); + PID_VelocityClosedLoop_FW.setMode(MANUAL_MODE); + PID_VelocityClosedLoop_BW.setMode(MANUAL_MODE); // LA: Color RGB Component(s) // ====================== @@ -528,15 +533,25 @@ // LA: PID Compute Section // =================== // - - // Update the process variable. - PID_VelocityClosedLoop.setProcessValue((float)i32_Velocity); + if (out_PosizionatoreSW.b_ATVDirectionFW) { + PID_VelocityClosedLoop_BW.reset(); - // Set Desired Value - PID_VelocityClosedLoop.setSetPoint((float)out_PosizionatoreSW.i32_ATVSpeed); + // Update the process variable. + PID_VelocityClosedLoop_FW.setProcessValue((float)i32_Velocity); + // Set Desired Value + PID_VelocityClosedLoop_FW.setSetPoint((float)out_PosizionatoreSW.i32_ATVSpeed); + // Release a new output. + f_PWMPercent = PID_VelocityClosedLoop_FW.compute(); + } + else { + PID_VelocityClosedLoop_FW.reset(); - // Release a new output. - f_PWMPercent = PID_VelocityClosedLoop.compute(); + // Update the process variable. + PID_VelocityClosedLoop_BW.setProcessValue((float)i32_Velocity); + // Set Desired Value + PID_VelocityClosedLoop_BW.setSetPoint((float)out_PosizionatoreSW.i32_ATVSpeed); + // Release a new output. + f_PWMPercent = PID_VelocityClosedLoop_BW.compute(); + } PWM_PB3.write((float) 1.0- f_PWMPercent); // Set to x% - }