2020-04-20 21:16:39 +02:00
|
|
|
/* Reflow Oven Controller
|
|
|
|
*
|
|
|
|
* Copyright (C) 2020 Mario Hüttel <mario.huettel@gmx.net>
|
|
|
|
*
|
|
|
|
* 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 <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __OVEN_DRIVER_H__
|
|
|
|
#define __OVEN_DRIVER_H__
|
|
|
|
|
2021-10-11 19:45:13 +02:00
|
|
|
/**
|
|
|
|
* @defgroup oven-driver Oven SSR Driver and PID Controller
|
|
|
|
* @{
|
|
|
|
*/
|
|
|
|
|
2020-05-05 18:55:55 +02:00
|
|
|
#include <stdint.h>
|
2020-06-13 23:23:59 +02:00
|
|
|
#include <stdbool.h>
|
|
|
|
#include <reflow-controller/pid-controller.h>
|
|
|
|
|
2021-10-11 19:45:13 +02:00
|
|
|
/**
|
|
|
|
* @brief Status of the PID controlling the oven
|
|
|
|
*/
|
|
|
|
enum oven_pid_status {
|
|
|
|
OVEN_PID_DEACTIVATED, /**< @brief The PID of the oven is deactivated. */
|
|
|
|
OVEN_PID_RUNNING, /**< @brief The PID of the oven is currently active and running. */
|
|
|
|
OVEN_PID_ABORTED, /**< @brief The PID of the oven has been aborted due to an error and is not running. */
|
|
|
|
};
|
2020-05-05 18:55:55 +02:00
|
|
|
|
2021-10-11 19:45:13 +02:00
|
|
|
/**
|
|
|
|
* @brief Initialize the oven driver.
|
|
|
|
*
|
|
|
|
* This will initialize the Timer for the PWM output to the SSR.
|
|
|
|
* If the hardware revision is >= v1.3 the SSR safety enable line will also be initialized.
|
|
|
|
*/
|
2020-05-05 18:55:55 +02:00
|
|
|
void oven_driver_init(void);
|
|
|
|
|
2021-10-11 19:45:13 +02:00
|
|
|
/**
|
|
|
|
* @brief Set a power level on the oven control output
|
|
|
|
* @param power Power level between 0 to 100
|
|
|
|
* @note This will not actually set the output. For this, @ref oven_driver_apply_power_level() has to be called.
|
|
|
|
* It will be called in the main loop.
|
|
|
|
*/
|
2020-05-05 18:55:55 +02:00
|
|
|
void oven_driver_set_power(uint8_t power);
|
|
|
|
|
2021-10-11 19:45:13 +02:00
|
|
|
/**
|
|
|
|
* @brief Disable the oven driver.
|
|
|
|
*
|
|
|
|
* This shuts down the oven driver timer and the corresponding clocks.
|
|
|
|
*/
|
2020-05-10 23:13:03 +02:00
|
|
|
void oven_driver_disable(void);
|
|
|
|
|
2021-10-11 19:45:13 +02:00
|
|
|
/**
|
|
|
|
* @brief Initialize the PID controller for the oven output
|
|
|
|
* @param PID controller holding the settings
|
|
|
|
*/
|
2020-06-13 23:23:59 +02:00
|
|
|
void oven_pid_init(struct pid_controller *controller_to_copy);
|
|
|
|
|
2021-10-11 19:45:13 +02:00
|
|
|
/**
|
|
|
|
* @brief Handle the PID controller.
|
|
|
|
* This must be called cyclically. When the sampling period has passed, the function will process the PT1000
|
|
|
|
* resistance and do a PID cycluilation for this sample.
|
|
|
|
* @note This function must be called with a frequency greater or equal to the PID's sampling frequency
|
|
|
|
*/
|
2020-11-30 21:43:38 +01:00
|
|
|
void oven_pid_handle(void);
|
2020-06-13 23:23:59 +02:00
|
|
|
|
2021-10-11 19:45:13 +02:00
|
|
|
/**
|
|
|
|
* @brief Stop the oven PID controller
|
|
|
|
*/
|
2020-08-31 22:50:39 +02:00
|
|
|
void oven_pid_stop(void);
|
2020-06-13 23:23:59 +02:00
|
|
|
|
2021-10-11 19:45:13 +02:00
|
|
|
/**
|
|
|
|
* @brief Abort the oven PID controller. This is the same as oven_pid_stop() but will set the abort flag.
|
|
|
|
* @note this function is called by the safety controller to disable the PID controller in case of an error.
|
|
|
|
*/
|
2020-09-27 22:54:06 +02:00
|
|
|
void oven_pid_abort(void);
|
|
|
|
|
2021-10-11 19:45:13 +02:00
|
|
|
/**
|
|
|
|
* @brief Set the target temperature of the PID controller.
|
|
|
|
* @param temp
|
|
|
|
*/
|
2020-11-30 21:43:38 +01:00
|
|
|
void oven_pid_set_target_temperature(float temp);
|
|
|
|
|
2021-10-11 19:45:13 +02:00
|
|
|
/**
|
|
|
|
* @brief Output the power level currently configured to the SSR.
|
|
|
|
*
|
|
|
|
* This function is separated from oven_driver_set_power() because it is called in the main loop after the
|
|
|
|
* safety controller has run. This ensures, that if the safety controller decides to stop the PID no glitch makes it
|
|
|
|
* out to the SSR.
|
|
|
|
*/
|
2020-07-09 22:31:42 +02:00
|
|
|
void oven_driver_apply_power_level(void);
|
2020-06-13 23:23:59 +02:00
|
|
|
|
2021-10-11 19:45:13 +02:00
|
|
|
/**
|
|
|
|
* @brief Get the current status of the oven's PID controller
|
|
|
|
* @return
|
|
|
|
*/
|
2020-07-09 22:31:42 +02:00
|
|
|
enum oven_pid_status oven_pid_get_status(void);
|
2020-06-13 23:23:59 +02:00
|
|
|
|
2021-10-11 19:45:13 +02:00
|
|
|
/** @} */
|
|
|
|
|
2020-04-20 21:16:39 +02:00
|
|
|
#endif /* __OVEN_DRIVER_H__ */
|