diff --git a/PID_AutoTune_v0.h b/PID_AutoTune_v0.h new file mode 100644 index 0000000000000000000000000000000000000000..8520d0a3233887258afab98524ff140400bbceef --- /dev/null +++ b/PID_AutoTune_v0.h @@ -0,0 +1,58 @@ + +//https://codebender.cc/library/PID_AutoTune_v0#PID_AutoTune_v0.h + +#ifndef PID_AutoTune_v0 +#define PID_AutoTune_v0 +#define LIBRARY_VERSION 0.0.1 + +class PID_ATune +{ + + + public: + //commonly used functions ************************************************************************** + PID_ATune(double*, double*); // * Constructor. links the Autotune to a given PID + int Runtime(); // * Similar to the PID Compue function, returns non 0 when done + void Cancel(); // * Stops the AutoTune + + void SetOutputStep(double); // * how far above and below the starting value will the output step? + double GetOutputStep(); // + + void SetControlType(int); // * Determies if the tuning parameters returned will be PI (D=0) + int GetControlType(); // or PID. (0=PI, 1=PID) + + void SetLookbackSec(int); // * how far back are we looking to identify peaks + int GetLookbackSec(); // + + void SetNoiseBand(double); // * the autotune will ignore signal chatter smaller than this value + double GetNoiseBand(); // this should be acurately set + + double GetKp(); // * once autotune is complete, these functions contain the + double GetKi(); // computed tuning parameters. + double GetKd(); // + + private: + void FinishUp(); + bool isMax, isMin; + double *input, *output; + double setpoint; + double noiseBand; + int controlType; + bool running; + unsigned long peak1, peak2, lastTime; + int sampleTime; + int nLookBack; + int peakType; + double lastInputs[101]; + double peaks[10]; + int peakCount; + bool justchanged; + bool justevaled; + double absMax, absMin; + double oStep; + double outputStart; + double Ku, Pu; + +}; +#endif +