brewco/pid.h

changeset 446
78e9d5234d15
parent 435
4b1ed6897d80
child 448
7fe45f6e4f48
--- 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

mercurial