thermferm/pid.h

Sun, 17 May 2015 19:34:55 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sun, 17 May 2015 19:34:55 +0200
changeset 363
468ec0d96cce
parent 362
c92651a54969
child 492
750f2468dec5
permissions
-rw-r--r--

Back to the old PID algorythm. Version 0.3.1.

#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		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		Type;		/* Value is 'HEAT' or 'COOL'			*/
} pid_var;


void InitPID( pid_var *, int);
void UpdatePID( pid_var *);

#endif

mercurial