add methods to inspect individual terms
This commit is contained in:
parent
75dba97d45
commit
d095a43697
11
PID_v1.cpp
11
PID_v1.cpp
@ -59,8 +59,11 @@ bool PID::Compute()
|
|||||||
else if(ITerm < outMin) ITerm= outMin;
|
else if(ITerm < outMin) ITerm= outMin;
|
||||||
double dInput = (input - lastInput);
|
double dInput = (input - lastInput);
|
||||||
|
|
||||||
/*Compute PID Output*/
|
/*Compute PID Output and store last values*/
|
||||||
double output = kp * error + ITerm- kd * dInput;
|
lastPTerm = kp * error;
|
||||||
|
lastITerm = ITerm;
|
||||||
|
lastDTerm = -kd * dInput;
|
||||||
|
double output = lastPTerm + lastITerm + lastDTerm;
|
||||||
|
|
||||||
if(output > outMax) output = outMax;
|
if(output > outMax) output = outMax;
|
||||||
else if(output < outMin) output = outMin;
|
else if(output < outMin) output = outMin;
|
||||||
@ -192,3 +195,7 @@ double PID::GetKi(){ return dispKi;}
|
|||||||
double PID::GetKd(){ return dispKd;}
|
double PID::GetKd(){ return dispKd;}
|
||||||
int PID::GetMode(){ return inAuto ? AUTOMATIC : MANUAL;}
|
int PID::GetMode(){ return inAuto ? AUTOMATIC : MANUAL;}
|
||||||
int PID::GetDirection(){ return controllerDirection;}
|
int PID::GetDirection(){ return controllerDirection;}
|
||||||
|
|
||||||
|
double PID::GetLastPTerm() { return lastPTerm; }
|
||||||
|
double PID::GetLastITerm() { return lastITerm; }
|
||||||
|
double PID::GetLastDTerm() { return lastDTerm; }
|
||||||
|
6
PID_v1.h
6
PID_v1.h
@ -51,6 +51,10 @@ class PID
|
|||||||
int GetMode(); // inside the PID.
|
int GetMode(); // inside the PID.
|
||||||
int GetDirection(); //
|
int GetDirection(); //
|
||||||
|
|
||||||
|
double GetLastPTerm();
|
||||||
|
double GetLastITerm();
|
||||||
|
double GetLastDTerm();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void Initialize();
|
void Initialize();
|
||||||
|
|
||||||
@ -72,6 +76,8 @@ class PID
|
|||||||
unsigned long lastTime;
|
unsigned long lastTime;
|
||||||
double ITerm, lastInput;
|
double ITerm, lastInput;
|
||||||
|
|
||||||
|
double lastPTerm, lastITerm, lastDTerm; // last P/I/D terms calculated
|
||||||
|
|
||||||
unsigned long SampleTime;
|
unsigned long SampleTime;
|
||||||
double outMin, outMax;
|
double outMin, outMax;
|
||||||
bool inAuto;
|
bool inAuto;
|
||||||
|
Loading…
Reference in New Issue
Block a user