Fri, 11 Mar 2016 20:27:02 +0100
Changed PID code. PID parameters are now stored 3 digits instead of 2 behind the decimal point. Prevent extreme heating or cooling in Beer mode. Heat and Cool lockdown now allows the lagest value to win instead of zero them both. PID output treshold from 2% to 50%.
#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_TYPE_HEAT 0 /* PID is used for heating */ #define PID_TYPE_COOL 1 /* PID is used for cooling */ #define PID_TIMES 60 /* 60 calculations per minute */ #define PID_WINDUP_GUARD 10.0 /* Error windup guard */ typedef struct _pid_var { double iMax; /* Maximum allowable integrator state */ double iGain; /* Integral gain */ double pGain; /* Proportional gain */ double dGain; /* Derivative gain */ double idleRange; /* Idle range */ double Input; /* Input value */ double Err; /* Error, diff between input and set point */ double InputLast; /* Input 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 Type; /* Value is 'HEAT' or 'COOL' */ } pid_var; void InitPID( pid_var *, int); void UpdatePID( pid_var *); #endif