diff -r 3ec477cda546 -r 78e9d5234d15 brewco/pid.h --- a/brewco/pid.h Fri Dec 04 22:57:23 2015 +0100 +++ b/brewco/pid.h Sat Dec 05 21:46:22 2015 +0100 @@ -1,32 +1,45 @@ #ifndef PID_H #define PID_H -#define PID_MODE_NONE 0 /* Process control off */ -#define PID_MODE_AUTO 1 /* Process control auto */ -#define PID_MODE_BOO 2 /* Process control Bang On/Off */ -#define PID_TIMES 60 /* 60 calculations per minute */ -#define PID_WINDUP_GUARD 10.0 /* Error windup guard */ - +#define P_MANUAL 0 +#define P_AUTOMATIC 1 +#define P_DIRECT 0 +#define P_REVERSE 1 typedef struct _pid_var { - double iMax; /* Maximum allowable integrator state */ - double iGain; /* Integral gain */ - double pGain; /* Proportional gain */ - double dGain; /* Derivative gain */ - - double Input; /* Input value */ - double Err; /* Error, diff between input and set point */ - double ErrLast; /* Error from last pass */ - double iState; /* Error from next last pass */ - double SetP; /* Set point */ - double OutP; /* Output of PID algorithm */ - int Mode; /* Value is 'PID_AUTO' if loop is automatic */ - int Times; /* Calculations per minute */ + double Kp; /* (P)roportional Tuning Parameter */ + double Ki; /* (I)ntegral Tuning Parameter */ + double Kd; /* (D)erivative Tuning Parameter */ + double dispKp; + double dispKi; + double dispKd; + int Direction; /* Controller direction */ + double *myInput; /* Input parameter */ + double *myOutput; /* Output parameter */ + double *mySetpoint; /* Setpoint parameter */ + long lastTime; /* Last compute time */ + double ITerm; + double lastInput; + long SampleTime; + double outMin; + double outMax; + int inAuto; } pid_var; -void InitPID( pid_var *); -void UpdatePID( pid_var *); +void PID_init(pid_var *, double *, double *, double *, double, double, double, int); +void PID_setMode(pid_var *, int); +void PID_setOutputLimits(pid_var *, double, double); +void PID_setTunings(pid_var *, double, double, double); +void PID_setControllerDirection(pid_var *, int); +void PID_setSampleTime(pid_var *, int); +double PID_getKp(pid_var *); +double PID_getKi(pid_var *); +double PID_getKd(pid_var *); +int PID_getMode(pid_var *); +int PID_getDirection(pid_var *); +int PID_compute(pid_var *); + #endif