aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules/Control
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-11-29 18:59:55 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-11-29 18:59:55 +0200
commitae614a63f593122cd28c644625db179f298dd640 (patch)
tree4ee706e22277d88a5d5dbd0c4fa9dc1ec0377477 /Software/Embedded_SW/Embedded/Modules/Control
parentdd724f118f584eea84a11af90292a88c62ecd022 (diff)
parent536b311b7dd2f571e38b9c38c1190ce01c549815 (diff)
downloadTango-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.c36
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.h4
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_ */