diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-11-29 18:59:55 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-11-29 18:59:55 +0200 |
| commit | ae614a63f593122cd28c644625db179f298dd640 (patch) | |
| tree | 4ee706e22277d88a5d5dbd0c4fa9dc1ec0377477 /Software/Embedded_SW/Embedded/Modules/Control | |
| parent | dd724f118f584eea84a11af90292a88c62ecd022 (diff) | |
| parent | 536b311b7dd2f571e38b9c38c1190ce01c549815 (diff) | |
| download | Tango-ae614a63f593122cd28c644625db179f298dd640.tar.gz Tango-ae614a63f593122cd28c644625db179f298dd640.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules/Control')
| -rw-r--r-- | Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c | 36 | ||||
| -rw-r--r-- | Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.h | 4 |
2 files changed, 40 insertions, 0 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c b/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c index f37759943..72774461a 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c @@ -36,4 +36,40 @@ float PIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_Config_P return output; } +float AdvancedPIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_Config_Params *params, float *_pre_error, float *_integral) +{ + float error; + float derivative; + float output; + + //Calculate P,I,D + error = _setPoint - _mesuredParam; + + //In case of error too small then stop integration + if(abs(error) > params->epsilon) + { + *_integral = *_integral + error*params->dt; + } + + derivative = (error - *_pre_error)/params->dt; + float IntegralErrorMultiplier; + float ProportionalErrorMultiplier; + + output = params->Kp*error/params->ProportionalErrorMultiplier + params->Ki**_integral/params->IntegralErrorMultiplier + params->Kd*derivative; + + //Saturation Filter + if(output > params->MAX) + { + output = params->MAX; + } + else if(output < params->MIN) + { + output = params->MIN; + } + + //Update error + *_pre_error = error; + + return output; +} diff --git a/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.h b/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.h index 03c363131..4792be9ec 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.h +++ b/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.h @@ -12,7 +12,11 @@ typedef struct float Kp; float Kd; float Ki; + float IntegralErrorMultiplier; + float ProportionalErrorMultiplier; + }PID_Config_Params; float PIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_Config_Params *params, float *_pre_error, float *_integral); +float AdvancedPIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_Config_Params *params, float *_pre_error, float *_integral); #endif /* MODULES_PIDALGO_H_ */ |
