cursada_mc2
Base de control de temperatura para EDU-CIAA-NXP
Loading...
Searching...
No Matches
control_on_off.c
Go to the documentation of this file.
1
7
8#include <limits.h>
9
15
17
24
29
30void control_on_off_procesar(int16_t medicion, uint32_t delta_tiempo_ms)
31{
32 bool salida_deseada = false;
33 uint32_t tiempo_minimo_requerido_ms = 0U;
34
35 if (UINT_MAX - control_on_off_.tiempo_en_estado_ms < delta_tiempo_ms) {
37 } else {
38 control_on_off_.tiempo_en_estado_ms += delta_tiempo_ms;
39 }
40
42 const int16_t umbral_corte = control_on_off_.parametros.setpoint_deci_celsius;
43 // Para calentar, este es el umbral inferior donde la salida vuelve a activarse.
44 const int16_t umbral_activacion = (int16_t) (control_on_off_.parametros.setpoint_deci_celsius
46
47 if (medicion <= umbral_activacion) {
48 salida_deseada = true;
49 } else if (medicion >= umbral_corte) {
50 salida_deseada = false;
51 } else {
52 salida_deseada = control_on_off_.salida_activa;
53 }
54 } else {
55 const int16_t umbral_corte = control_on_off_.parametros.setpoint_deci_celsius;
56 // Para enfriar, este es el umbral superior donde la salida vuelve a activarse.
57 const int16_t umbral_activacion = (int16_t) (control_on_off_.parametros.setpoint_deci_celsius
59
60 if (medicion >= umbral_activacion) {
61 salida_deseada = true;
62 } else if (medicion <= umbral_corte) {
63 salida_deseada = false;
64 } else {
65 salida_deseada = control_on_off_.salida_activa;
66 }
67 }
68
69 if (salida_deseada == control_on_off_.salida_activa) {
70 return;
71 }
72
73 if (salida_deseada) {
74 // Para pasar a encendido, se respeta el tiempo minimo en apagado.
75 tiempo_minimo_requerido_ms = control_on_off_.parametros.tiempo_minimo_apagado_ms;
76 } else {
77 // Para pasar a apagado, se respeta el tiempo minimo en encendido.
78 tiempo_minimo_requerido_ms = control_on_off_.parametros.tiempo_minimo_encendido_ms;
79 }
80
81 if (control_on_off_.tiempo_en_estado_ms < tiempo_minimo_requerido_ms) {
82 return;
83 }
84
85 control_on_off_.salida_activa = salida_deseada;
87}
88
static control_on_off_estado_t control_on_off_
void control_on_off_inicializar(parametros_control_t parametros)
Inicializa el control on/off.
bool control_on_off_esta_salida_activa(void)
Indica si la salida del control esta activa.
void control_on_off_procesar(int16_t medicion, uint32_t delta_tiempo_ms)
Procesa una nueva medicion y actualiza la salida del control.
void control_on_off_configurar(parametros_control_t parametros)
Actualiza la configuracion del control on/off.
Implementacion de control on/off con histeresis.
parametros_control_t parametros
uint32_t tiempo_minimo_apagado_ms
Definition parametros.h:16
uint16_t histeresis_deci_celsius
Definition parametros.h:14
uint32_t tiempo_minimo_encendido_ms
Definition parametros.h:15
int16_t setpoint_deci_celsius
Definition parametros.h:13