/*
 * pid.h
 *
 *  Created on: Jan 18, 2022
 *      Author: mcfly
 */

#ifndef INC_PID_H_
#define INC_PID_H_


typedef struct {
	//Controller gains
	float Kp;
	float Ki;
	float Kd;

	//Derivative low-pass filter time constant
	float tau;

	//Output limits
	float limMin;
	float limMax;

	//Sample time in seconds
	float T;

	//Controller "memory"
	float integrator;
	float prevError;		//required for integrator
	float differentiator;
	float prevMeasurement;	//required for differentiator

	//Controller output
	float out;
} PIDController;

void PID_Init(PIDController *pid);
float PID_Update(PIDController *pid, float setpoint, float measurement);

#endif /* INC_PID_H_ */
