/* Reflow Oven Controller * * Copyright (C) 2020 Mario Hüttel * * This file is part of the Reflow Oven Controller Project. * * The reflow oven controller is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * The Reflow Oven Control Firmware is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the reflow oven controller project. * If not, see . */ #ifndef __PID_CONTROLLER_H__ #define __PID_CONTROLLER_H__ struct pid_controller { float k_deriv; float k_int; float k_p; float k_int_t; float k_deriv_t; float k_inv_deriv_t; float output_sat_max; float output_sat_min; float integral_max; float sample_period; volatile float control_output; volatile float last_in; volatile float integral; volatile float derivate; }; void pid_init(struct pid_controller *pid, float k_deriv, float k_int, float k_p, float output_sat_min, float output_sat_max, float integral_max, float kd_tau, float sample_period); void pid_zero(struct pid_controller *pid); float pid_sample(struct pid_controller *pid, float deviation); float pid_get_control_output(const struct pid_controller *pid); int pid_copy(struct pid_controller *dest, const struct pid_controller *src); #endif /* __PID_CONTROLLER_H__ */