01 · Punto de partida
Dos reglas para cerrar el lazo
En el tema 40 cerramos el lazo con una idea: medir el error y actuar sobre él. En el 41 aprendimos a juzgar el resultado con tiempo de subida, sobreimpulso y estabilidad. Falta decidir cómo se convierte el error en una orden para el actuador, y esa regla es el controlador. Hay dos reglas elementales:
- Todo o nada (on-off): el actuador está totalmente encendido o totalmente apagado según el signo del error. Es el termostato de una heladera, la bomba de agua de un tanque, el calefactor de una incubadora.
- Proporcional: la orden es proporcional al error,
u = Kp · e. Si el error es grande, la acción es fuerte; si es pequeño, suave.
Para compararlos usamos un sistema donde ambos aparecen en la vida real, un horno (o incubadora, o cama caliente de una impresora) con una constante de tiempo de 120 s. La potencia u va de 0 (apagado) a 1 (máxima) y con potencia máxima el horno llegaría a 100 °C si el ambiente está a 20 °C. Queremos mantenerlo en 60 °C.
Esto prepara el control PID del tema 43: cada limitación que veas acá es la que uno de sus tres términos viene a corregir.
02 · La regla más simple
El control todo o nada
La regla cabe en una línea: si la temperatura está por debajo de la referencia, se enciende; si está por encima, se apaga.
El problema aparece enseguida: si apagara exactamente en 60 °C y encendiera exactamente en 60 °C, el actuador tendría que conmutar infinitas veces por segundo alrededor del valor. Un relé real no puede, y aunque pudiera, se destruiría. La solución es la histéresis: dos umbrales distintos, uno para encender y otro para apagar.
Con una histéresis h de 2 °C alrededor de 60 °C, el controlador enciende por debajo de 59 °C y apaga por encima de 61 °C. Entre 59 y 61 °C no cambia de estado: recuerda cuál era. Eso significa que el controlador tiene memoria, y el programa tiene que guardar el estado entre una lectura y la siguiente.
La figura muestra el régimen estacionario con histéresis de 2 °C y un sensor con 5 s de retardo. La temperatura nunca se queda quieta: sube con el calefactor encendido, baja con él apagado, y el promedio coincide con la referencia. Mientras tanto, la señal de control alterna sin parar.
Dos propiedades hacen valioso a este controlador. Primero, compensa solo los cambios de carga: si baja la temperatura ambiente, el calefactor pasa más tiempo encendido y la temperatura media sigue siendo 60 °C. Con 5 s de retardo e histéresis de 2 °C, el tiempo de encendido pasa del 49,7 % al 62,1 % cuando el ambiente baja de 20 a 10 °C, y la temperatura media apenas se mueve (59,99 y 59,63 °C). Segundo, no hace falta saber nada de la planta: basta con que el actuador pueda mover la variable en los dos sentidos.
03 · Cuánto separar los umbrales
Histéresis y banda muerta
La histéresis es un compromiso entre la precisión y el esfuerzo del actuador. Con el horno sin retardo en el sensor, la oscilación es casi igual a la histéresis y cada conmutación es un desgaste:
| Histéresis h | Pico a pico | Conmutaciones por hora | Período |
|---|---|---|---|
| 0,5 °C | 0,53 °C | 2250 | 3 s |
| 2,0 °C | 2,03 °C | 592 | 12 s |
| 8,0 °C | 8,01 °C | 150 | 48 s |
Cuadruplicar la histéresis cuadruplica la oscilación y divide por cuatro la frecuencia de conmutación. Un relé electromecánico se especifica por el orden de 100 000 ciclos (un ciclo es encender y apagar, es decir, dos conmutaciones) en su vida útil. Con 592 conmutaciones por hora, que son 296 ciclos, se agotaría en unas 340 horas: unos 14 días de funcionamiento continuo. Con 2250 conmutaciones por hora, en menos de cuatro días. Un relé de estado sólido no tiene desgaste mecánico, pero sí calienta y genera interferencia en cada conmutación.
El ruido y el rebote
El sensor real no es perfecto: la lectura tiembla. Si el umbral de encendido y el de apagado casi coinciden, ese temblor cruza el umbral decenas de veces por minuto aunque la temperatura real esté quieta. Esto se llama rebote (chattering). Con un ruido de 0,3 °C de desvío estándar en la lectura:
| Histéresis | Tiempo mínimo entre cambios | Conmutaciones por hora | Pico a pico |
|---|---|---|---|
| 0 °C | ninguno | 18 872 | 0,69 °C |
| 0,5 °C | ninguno | 8516 | 0,86 °C |
| 1,0 °C | ninguno | 3148 | 1,19 °C |
| 2,0 °C | ninguno | 902 | 2,11 °C |
| 2,0 °C | 30 s | 120 | 9,95 °C |
Sin histéresis, el relé conmutaría más de 18 000 veces por hora: unas 10 horas de vida con un contacto mecánico. Subir la histéresis lo arregla a cambio de oscilar más. Hay una segunda defensa, el tiempo mínimo entre conmutaciones (protección contra ciclado corto): después de cambiar, el controlador ignora al sensor durante, por ejemplo, 30 s. Reduce el desgaste a 120 conmutaciones por hora, pero tiene un costo grande: mientras espera, el horno sigue calentando o enfriando, y la oscilación crece a casi 10 °C. Es la protección que traen los compresores de las heladeras y los aires acondicionados, donde un arranque demasiado seguido los daña.
La banda muerta
La banda muerta es un concepto vecino pero distinto. Es una zona alrededor de la referencia donde el controlador no hace nada, ni en un sentido ni en el otro. Aparece cuando hay dos actuadores opuestos, como un calefactor y un ventilador, o un motor que puede ir hacia delante y hacia atrás:
- Error mayor que +1 °C: encender el calefactor.
- Error entre −1 y +1 °C: ambos apagados (la banda muerta).
- Error menor que −1 °C: encender el ventilador.
Sin banda muerta, ambos actuadores se pelearían alrededor de la referencia, gastando energía para nada. La histéresis evita que un actuador conmute demasiado; la banda muerta evita que dos actuadores trabajen uno contra otro. Las dos se pueden combinar. En un control proporcional, la banda muerta se usa para que el actuador deje de moverse con errores pequeños, a cambio de aceptar un error de hasta esa magnitud.
04 · Lo que el sensor no sabe
Retardo, oscilación y desgaste
Hasta ahora el sensor medía la temperatura al instante. Pero un sensor real está dentro de una masa que tarda en calentarse, o lejos de la resistencia, o promedia varias lecturas. El efecto es el mismo que vimos en el tema 41: el controlador reacciona a una temperatura que ya no es la actual. El todo o nada sigue calentando durante esos segundos, y cuando por fin el sensor «se entera», la temperatura real ya se pasó.
| Retardo | Histéresis | Pico a pico | Conmutaciones por hora | Período |
|---|---|---|---|---|
| 0 s | 0,5 °C | 0,53 °C | 2250 | 3 s |
| 0 s | 2,0 °C | 2,03 °C | 592 | 12 s |
| 0 s | 8,0 °C | 8,01 °C | 150 | 48 s |
| 5 s | 0,5 °C | 3,77 °C | 318 | 23 s |
| 5 s | 2,0 °C | 5,19 °C | 230 | 31 s |
| 5 s | 8,0 °C | 10,97 °C | 108 | 66 s |
| 10 s | 0,5 °C | 6,89 °C | 174 | 41 s |
| 10 s | 2,0 °C | 8,27 °C | 144 | 50 s |
| 10 s | 8,0 °C | 13,77 °C | 86 | 83 s |
| 20 s | 0,5 °C | 12,73 °C | 92 | 77 s |
| 20 s | 2,0 °C | 13,99 °C | 86 | 85 s |
| 20 s | 8,0 °C | 19,07 °C | 62 | 117 s |
La tabla enseña tres cosas. Primero, con retardo la histéresis deja de ser lo que manda: con 10 s, una histéresis de 0,5 °C oscila 6,9 °C. Segundo, bajar la histéresis ayuda poco: pasar de 8 °C a 0,5 °C con 10 s de retardo reduce la oscilación de 13,8 a 6,9 °C, pero no la elimina, y el relé conmuta el doble (de 86 a 174 por hora). Tercero, la oscilación mínima está fijada por el retardo y por la velocidad con que el horno sube o baja: a 60 °C, unos 0,33 °C por segundo en cada sentido (con potencia máxima, (80 − 40) / 120; apagado, −40 / 120). Con 10 s de retardo la temperatura se pasa unos 3 °C a cada lado antes de que el controlador reaccione.
Observá la analogía con el tema 41: allá el retardo destruía el amortiguamiento de un sistema proporcional; acá fija una oscilación permanente en un sistema todo o nada. En ambos casos, la forma de mejorar es reducir el retardo: acercar el sensor al elemento calefactor, usar un sensor de respuesta más rápida o promediar menos lecturas. Antes de tocar el controlador, hay que mirar el lazo físico.
05 · Una acción a medida
El control proporcional
El proporcional corrige con una fuerza que crece con el error: u = Kp · (r − T), saturada entre 0 y 1 porque el calefactor no puede entregar menos que nada ni más que la potencia máxima. Con un horno a 20 °C y una referencia de 60 °C, el error es de 40 °C: con Kp = 0,5, el cálculo pide 20 veces la potencia máxima, y se entrega el 100 %.
La banda proporcional es el rango de error en que el controlador actúa de manera proporcional: va de 0 a 1/Kp. Fuera de esa banda, el actuador está saturado. Con Kp = 0,5 la banda es de 2 °C: con el horno por debajo de 58 °C está a plena potencia, y entre 58 y 60 °C la potencia baja linealmente. Los controladores industriales de temperatura suelen especificar la banda proporcional en lugar de la ganancia: una banda estrecha es una ganancia alta.
Ya lo usaste en el seguidor de línea del tema 31, donde el giro era proporcional a la desviación. Es una regla muy distinta de la del todo o nada. Cerca de la referencia, la potencia baja suavemente a medida que se acerca, y el horno llega sin pasarse y se queda quieto:
No hay oscilación, no hay conmutación, el actuador trabaja en forma continua. Pero hay un detalle en la figura: ninguna curva llega a 60 °C.
06 · Por qué no llega
El error que queda
La razón es lógica. Para mantener 60 °C a 20 °C de ambiente, el horno necesita una potencia fija: (60 − 20) / 80 = 0,5, la mitad de la máxima. Pero un controlador proporcional sólo entrega potencia si hay error: u = Kp · e. Para que u = 0,5 con Kp = 0,5, el error debe ser e = 1 °C. Si el error fuera cero, la potencia sería cero y el horno se enfriaría. El sistema se acomoda en el punto donde el error es justo el necesario para sostener la potencia. Con los números del horno:
e_ss = (r − T_ambiente) / (1 + K · Kp), con K = 80 °C por unidad de potencia.
| Kp | Banda 1/Kp | Error a 20 °C | Error a 10 °C | Fórmula (20 / 10 °C) |
|---|---|---|---|---|
| 0,05 | 20,0 °C | 8,00 °C | 10,00 °C | 8,00 / 10,00 |
| 0,10 | 10,0 °C | 4,44 °C | 5,56 °C | 4,44 / 5,56 |
| 0,20 | 5,0 °C | 2,35 °C | 2,94 °C | 2,35 / 2,94 |
| 0,50 | 2,0 °C | 0,98 °C | 1,22 °C | 0,98 / 1,22 |
| 1,00 | 1,0 °C | 0,49 °C | 0,62 °C | 0,49 / 0,62 |
| 2,00 | 0,5 °C | 0,25 °C | 0,31 °C | 0,25 / 0,31 |
| 5,00 | 0,2 °C | 0,10 °C | 0,12 °C | 0,10 / 0,12 |
Es la fórmula del tema 40 aplicada a este caso: el error del lazo cerrado es el del lazo abierto dividido por 1 + K · Kp. Dos lecciones:
- El error disminuye con la ganancia, pero nunca se anula. Para bajar de 1 °C hace falta Kp ≥ 0,5; para bajar de 0,1 °C, Kp = 5, con los problemas de ruido y retardo que siguen.
- El error depende de las condiciones. Cuando el ambiente baja a 10 °C, hace falta más potencia (0,625) y el error crece (0,98 a 1,22 °C con Kp = 0,5). El todo o nada, en cambio, no se enteraba del cambio. El proporcional puro paga con un error que se mueve con la carga.
El truco manual: el punto de reposo
Si se sabe de antemano la potencia necesaria, se puede sumar a la salida: u = u0 + Kp · e. Con u0 = 0,5 el error a 20 °C es exactamente cero. Los controladores industriales lo llaman reset manual o bias. Pero el truco sólo vale para una condición: con el ambiente a 10 °C, el error vuelve: (60 − 10 − 80 · 0,5) / (1 + 80 · 0,5) = 0,24 °C con Kp = 0,5. La acción integral del tema 43 es la forma de que el controlador encuentre y siga por sí mismo ese u0 mientras las condiciones cambian.
07 · Los límites de la ganancia
Ruido, saturación y retardo
Si subir la ganancia reduce el error, ¿por qué no usar la máxima? Por los tres precios que el tema 40 y el 41 ya anticipaban:
Ruido. El proporcional multiplica el ruido del sensor por Kp. Con un ruido de 0,3 °C de desvío estándar, la desviación de la señal de control resulta:
| Kp | Desvío de la salida u | Error en régimen |
|---|---|---|
| 0,1 | 0,030 | 4,45 °C |
| 0,5 | 0,152 | 1,04 °C |
| 1,0 | 0,280 | 0,58 °C |
| 2,0 | 0,387 | 0,35 °C |
El desvío de u es casi Kp · 0,3 (0,15 para Kp = 0,5) mientras no sature. Con Kp = 2 sería 0,6, pero la salida se recorta contra 0 y 1, y el valor baja a 0,387. Para un calefactor, esa variación es inofensiva; para un motor o una válvula, que vibran y se desgastan, es un problema. Esta es una razón para filtrar la medición (tema 44).
Saturación. En el arranque, el error es grande y el actuador va a plena potencia durante un tiempo: con Kp = 0,5, hasta los 77 s; con Kp = 5, hasta los 83 s. Durante la saturación el lazo está abierto de hecho (tema 40): subir Kp no acelera el arranque. El proporcional sin saturación sólo existe en el cálculo.
Retardo. Es el mismo mecanismo del tema 41: la acción correctiva llega tarde y, si la ganancia es alta, se suma a la oscilación en lugar de restarla. En el horno:
| Retardo | Kp = 0,1 | Kp = 0,5 | Kp = 1,0 | Kp = 2,0 |
|---|---|---|---|---|
| 0 s | 0,00 | 0,00 | 0,00 | 0,00 |
| 5 s | 0,00 | 1,44 | 2,68 | 3,05 |
| 10 s | 0,00 | 4,43 | 3,88 | 3,92 |
| 20 s | 0,00 | 7,10 | 7,61 | 7,69 |
Sin retardo, ninguna ganancia oscila. Con 5 s, Kp = 0,5 ya oscila 1,4 °C, y con ganancias mayores la oscilación se estaciona en unos pocos grados, porque la saturación la limita: un proporcional de ganancia muy alta con retardo se convierte, en la práctica, en un todo o nada. Sólo Kp = 0,1 permanece quieto incluso con 20 s, al precio de un error de 4,4 °C. Así queda el panorama: hacia un lado, error; hacia el otro, oscilación.
08 · Decidir con criterio
Cuál usar y cómo salir del paso
| Aspecto | Todo o nada | Proporcional |
|---|---|---|
| Complejidad | mínima, sin parámetros de ganancia | un parámetro (Kp) |
| Actuador | sólo encendido/apagado (relé, válvula, compresor) | de salida graduable (PWM, motor, válvula proporcional) |
| Oscilación | siempre, a menos que se acepte un retardo mínimo | ninguna si no hay retardo; con retardo y mucha ganancia, sí |
| Error medio | cero (el promedio coincide con la referencia) | distinto de cero, y varía con la carga |
| Desgaste del actuador | alto: miles de conmutaciones por hora | bajo: ajustes continuos |
| Respuesta al arranque | potencia máxima hasta llegar | potencia máxima hasta la banda proporcional, luego suave |
| Ruido del sensor | rebote: se cubre con histéresis | el ruido se multiplica por Kp |
La regla práctica: el todo o nada es suficiente cuando el sistema es lento, la oscilación tolerable es mayor que la que produce y el actuador soporta conmutar (una heladera, un termotanque, el nivel de un tanque, una bomba). El proporcional corresponde cuando el actuador se puede graduar, la oscilación no es aceptable y un error pequeño es tolerable (la velocidad de un motor, la posición de un brazo). Cuando se necesita precisión y suavidad a la vez, hace falta el PID.
Proporcional con un relé: la salida por ventana de tiempo
Un calefactor con relé sólo admite encendido o apagado, pero se le puede aplicar un control proporcional si se convierte u en una fracción de tiempo. Se elige una ventana, por ejemplo 10 s, mucho menor que la constante de tiempo del horno (120 s): con u = 0,5 el relé queda encendido 5 s y apagado 5 s en cada ventana. Es el PWM del tema 13 con un período largo, y el horno, por su inercia, promedia los pulsos. Cada ventana cuesta dos conmutaciones como máximo: 720 por hora con 10 s. Con un relé mecánico conviene una ventana mayor (30 s, 240 por hora), y con un relé de estado sólido puede ser corta.
09 · Código para la placa
Los dos controladores en Arduino
El sketch simula el horno con un paso de 0,1 s y aplica los dos controladores sobre la misma planta, incluyendo el retardo del sensor mediante una cola circular de temperaturas pasadas. Las dos funciones de control son las que se usarían con un sensor y un relé reales; el resto reemplaza a la planta. Se mide en la segunda mitad de la hora simulada, cuando el sistema ya está en régimen.
// Termostato de un horno simulado: control todo o nada con histéresis y control proporcional.
// Horno: TAU * T' = -(T - TA) + K * u, con u entre 0 (apagado) y 1 (potencia máxima). Paso de 0,1 s.
const float DT = 0.1, TAU = 120.0, K = 80.0, REF = 60.0, TA = 20.0;
const int N_MAX = 60; // muestras de retardo admitidas (6 s a 0,1 s)
float cola[N_MAX]; // temperaturas pasadas, para simular el retardo del sensor
bool todoONada(float medida, bool encendido, float h) {
if (medida < REF - h / 2) return true; // por debajo de la banda: enciende
if (medida > REF + h / 2) return false; // por encima: apaga
return encendido; // dentro de la banda: mantiene el estado
}
float proporcional(float medida, float kp) {
return constrain(kp * (REF - medida), 0.0, 1.0);
}
// Simula una hora. Mide en la segunda mitad (régimen): amplitud, conmutaciones por hora y error final.
void ensayar(bool onoff, float parametro, int retardo) {
float T = TA, u = 0, tMin = 1000, tMax = 0;
long cambios = 0;
for (long k = 0; k < 36000; k++) {
cola[k % N_MAX] = T;
float medida = (k >= retardo) ? cola[(k - retardo) % N_MAX] : TA;
float nuevo = onoff ? (todoONada(medida, u > 0.5, parametro) ? 1.0 : 0.0)
: proporcional(medida, parametro);
if (k > 18000 && nuevo != u) cambios++;
u = nuevo;
T += DT * (-(T - TA) + K * u) / TAU;
if (k >= 18000) { tMin = min(tMin, T); tMax = max(tMax, T); }
}
if (onoff) {
Serial.print("todo o nada h="); Serial.print(parametro, 1);
Serial.print(" C retardo="); Serial.print(retardo * DT, 0);
Serial.print(" s pico a pico="); Serial.print(tMax - tMin, 2);
Serial.print(" C conmutaciones/h="); Serial.println(cambios * 2);
} else {
Serial.print("proporcional Kp="); Serial.print(parametro, 2);
Serial.print(" error final="); Serial.print(REF - T, 2); Serial.println(" C");
}
}
void setup() {
Serial.begin(115200);
ensayar(true, 0.5, 0);
ensayar(true, 2.0, 0);
ensayar(true, 2.0, 50); // 5 s de retardo
ensayar(false, 0.5, 0);
ensayar(false, 2.0, 0);
}
void loop() {}
La salida repite la tabla del texto:
todo o nada h=0.5 C retardo=0 s pico a pico=0.53 C conmutaciones/h=2250
todo o nada h=2.0 C retardo=0 s pico a pico=2.03 C conmutaciones/h=592
todo o nada h=2.0 C retardo=5 s pico a pico=5.19 C conmutaciones/h=230
proporcional Kp=0.50 error final=0.98 C
proporcional Kp=2.00 error final=0.25 C
Las diferencias de centésimas que pueda haber, y de algunas conmutaciones más o menos, vienen de la aritmética de 32 bits. Con un sensor real, medida vendría de analogRead o de la librería del sensor (tema 5), y el resultado de todoONada iría a digitalWrite sobre el pin del relé.
Para ejecutar el control proporcional sobre un relé, se convierte u en una ventana de tiempo, sin bloquear el programa:
const unsigned long VENTANA = 10000; // ms; mucho menor que la constante de tiempo del horno
// u en [0, 1]: devuelve true mientras el relé debe estar encendido dentro de la ventana actual
bool salidaPorVentana(float u) {
return (millis() % VENTANA) < (unsigned long)(u * VENTANA);
}
// En loop(): digitalWrite(PIN_RELE, salidaPorVentana(proporcional(medida, kp)) ? HIGH : LOW);
Para el todo o nada real, agregá la protección de tiempo mínimo: guardá el instante del último cambio en millis() y no cambies de estado hasta que pase el intervalo mínimo, como hace la simulación de Python más abajo.
10 · Exploración interactiva
Laboratorios del horno
1. El termostato
Control todo o nada del horno durante 30 minutos. La curva violeta es la temperatura; la naranja, la señal de control (0 ó 1). Las medidas se toman entre los minutos 15 y 30.
Mové los controles.
Probá: con histéresis 2 y sin retardo, la oscilación es casi 2 °C. Ponele 10 s de retardo y observá cómo se cuadruplica sin tocar la histéresis. Poné histéresis 0 y ruido 0,3: el relé conmuta decenas de miles de veces por hora. Agregá 30 s de tiempo mínimo y ese número cae, pero la temperatura se va varios grados de la referencia.
2. El proporcional y el error
Control proporcional del mismo horno durante una hora. Si activás el enfriamiento del ambiente, a los 30 min baja de 20 a 10 °C y se ve cómo cambia el error.
Elegí Kp.
Probá Kp = 0,5 y los valores de la tabla: 0,98 °C de error a los 30 min y 1,22 °C después de enfriar el ambiente. Subí Kp a 5: el error baja a 0,10 °C. Ahora ponele 10 s de retardo, y observá cómo esa misma ganancia empieza a oscilar y a saturar.
11 · Código ejecutable
Comparar controladores en Python
El mismo horno, con los dos controladores, el retardo, el cambio de ambiente y las medidas de ciclo. El código reproduce las tablas del tema.
Probalo en el navegador. Python se descarga con Pyodide la primera vez y requiere conexión. El código es editable y no controla ningún equipo real.
DT, TAU, K, REF, TA = 0.1, 120.0, 80.0, 60.0, 20.0
def simular(modo, h=2.0, kp=0.2, retardo=0.0, tmin=0.0, ta=TA, ta_fin=None, t_pert=1800.0, t_fin=3600.0):
"""Horno: TAU*T' = -(T - ta) + K*u. 'onoff' con histéresis h; 'prop' con u = kp*(REF - medida)."""
T, u, ultimo = ta, 0.0, -1e9
n_ret = round(retardo / DT)
hist, temp, sal = [], [], []
for k in range(round(t_fin / DT)):
t = k * DT
hist.append(T)
medida = hist[k - n_ret] if k - n_ret >= 0 else ta # sensor con retardo
if modo == "onoff":
nuevo = 1.0 if medida < REF - h / 2 else 0.0 if medida > REF + h / 2 else u
if nuevo != u and t - ultimo >= tmin:
u, ultimo = nuevo, t
else:
u = min(1.0, max(0.0, kp * (REF - medida)))
amb = ta_fin if ta_fin is not None and t >= t_pert else ta
T += DT * (-(T - amb) + K * u) / TAU
temp.append(T); sal.append(u)
return temp, sal
def ciclo(temp, sal, a=1800.0, b=3600.0):
i0, i1 = round(a / DT), round(b / DT)
seg = temp[i0:i1]
cambios = sum(1 for i in range(i0 + 1, i1) if sal[i] != sal[i - 1])
subidas = [i * DT for i in range(i0 + 1, i1) if sal[i] > sal[i - 1]]
periodo = (subidas[-1] - subidas[0]) / (len(subidas) - 1) if len(subidas) > 1 else None
return {"pp": max(seg) - min(seg), "media": sum(seg) / len(seg),
"por_hora": cambios * 3600.0 / (b - a), "periodo": periodo}
if __name__ == "__main__":
print("Todo o nada: amplitud pico a pico, conmutaciones por hora y período (régimen, 30 a 60 min)")
print("retardo hist. pico-pico conm./h período")
for retardo in (0, 5, 10, 20):
for h in (0.5, 2.0, 8.0):
c = ciclo(*simular("onoff", h=h, retardo=retardo))
per = "—" if c["periodo"] is None else f"{c['periodo']:.0f} s"
print(f"{retardo:4d} s {h:4.1f} °C {c['pp']:6.2f} °C {c['por_hora']:6.0f} {per}")
print("\nProporcional sin retardo: error antes y después de bajar el ambiente de 20 a 10 °C")
print(" Kp banda error antes error después teoría antes / después")
for kp in (0.05, 0.1, 0.2, 0.5, 1.0, 2.0, 5.0):
temp, _ = simular("prop", kp=kp, ta_fin=10.0)
e1, e2 = REF - temp[17899], REF - temp[35899]
t1 = (REF - TA) / (1 + K * kp); t2 = (REF - 10.0) / (1 + K * kp)
print(f"{kp:5.2f} {1/kp:5.1f} °C {e1:6.2f} °C {e2:6.2f} °C {t1:5.2f} / {t2:5.2f}")
print("\nProporcional con retardo del sensor: oscilación residual (°C) entre 1600 y 1800 s")
print("retardo Kp=0,1 Kp=0,5 Kp=1,0 Kp=2,0")
for retardo in (0, 5, 10, 20):
fila = []
for kp in (0.1, 0.5, 1.0, 2.0):
temp, _ = simular("prop", kp=kp, retardo=retardo, t_fin=1800.0)
ref = temp[-1]
fila.append(max(abs(x - ref) for x in temp[16000:]))
print(f"{retardo:4d} s " + " ".join(f"{a:6.2f}" for a in fila))La salida repite las tablas del texto: doce combinaciones de histéresis y retardo para el todo o nada, siete ganancias del proporcional antes y después de enfriar el ambiente, y la oscilación residual con retardo.
Probá llamar a simular("onoff", h=0.5, tmin=30) y ver cuánto crece la oscilación con el tiempo mínimo, o buscar a mano la ganancia máxima que no oscila con 10 s de retardo.
12 · Método y diagnóstico
Pruebas y diagnóstico
- Registrá referencia, medida y salida a un período regular (tema 37): con esas tres señales se ve oscilación, saturación y error.
- Medí el retardo del sensor antes de elegir el controlador: dale un escalón al actuador y mirá cuánto tarda en notarse.
- En un todo o nada, contá las conmutaciones por hora y compará con la vida útil del actuador.
- Elegí la histéresis a partir de la oscilación tolerable, no al revés, y verificá que la oscilación real, con el retardo, no la supere.
- En un proporcional, medí el error en régimen con la carga normal y con la peor carga; si cambia mucho, el proporcional puro no alcanza.
- Probá con el sensor ruidoso y con el sensor desconectado: en ambos casos el sistema debe quedar en un estado seguro (tema 39).
- Subí Kp de a poco y detenete ante el primer signo de oscilación sostenida o de actuador temblando.
«El todo o nada es un control primitivo que hay que reemplazar»
No: es el apropiado para actuadores que sólo conmutan y sistemas lentos. Una heladera con PID sería más cara y no mejoraría nada que importe.
«A menor histéresis, mejor control»
Menos oscilación aparente, pero más conmutaciones y más rebote por ruido. Con retardo, la oscilación apenas mejora y el desgaste aumenta.
«La banda muerta y la histéresis son lo mismo»
La histéresis evita que un actuador conmute demasiado, con dos umbrales y memoria. La banda muerta apaga ambos actuadores en una zona de error pequeño.
«Con suficiente ganancia el proporcional llega a la referencia»
El error baja como 1 / (1 + K · Kp), pero no se anula, y la ganancia está acotada por el ruido, la saturación y el retardo.
«El error del proporcional es un defecto del ajuste»
Es una propiedad del controlador: si la planta necesita una salida distinta de cero para sostener la referencia, hace falta un error que la produzca.
«Si el proporcional oscila, hay que subir la ganancia»
Al contrario: la oscilación por retardo se corrige bajando la ganancia o reduciendo el retardo.
13 · Práctica guiada
Predecí antes de comprobar
1. Vida del relé
El horno sin retardo con histéresis de 2 °C conmuta 592 veces por hora. Un relé aguanta 100 000 ciclos de encendido y apagado. ¿Cuánto dura funcionando sin parar?
Ver solución
Cada ciclo son dos conmutaciones: 592 / 2 = 296 ciclos por hora. Entonces 100 000 / 296 ≈ 338 horas, unos 14 días. Con una histéresis de 8 °C (150 conmutaciones, 75 ciclos por hora) serían 1333 horas, unos 56 días; y con un relé de estado sólido, sin desgaste mecánico, el problema desaparece.
2. Potencia de mantenimiento
¿Qué fracción de la potencia necesita el horno para mantener 60 °C con el ambiente a 20 °C y a 10 °C? ¿Cómo se ve en el todo o nada?
Ver solución
u = (60 − Tamb) / 80: 0,5 a 20 °C y 0,625 a 10 °C. El todo o nada lo logra con el tiempo de encendido: 49,7 % y 62,1 % en la simulación con 5 s de retardo. El proporcional lo logra con el error.
3. Banda proporcional
Un controlador tiene una banda proporcional de 4 °C. ¿Cuánto vale Kp y cuál es el error en régimen a 20 °C de ambiente?
Ver solución
Kp = 1/4 = 0,25 u/°C. El error es 40 / (1 + 80 · 0,25) = 40/21 = 1,90 °C. El horno se estabiliza en unos 58,1 °C.
4. Ganancia para un error dado
Se quiere un error en régimen menor a 0,5 °C con el ambiente a 20 °C. ¿Qué Kp hace falta? ¿Alcanza si el ambiente baja a 10 °C?
Ver solución
40 / (1 + 80 · Kp) ≤ 0,5 da Kp ≥ 0,99, es decir Kp = 1. Con 10 °C de ambiente el error sería 50 / 81 = 0,62 °C: no alcanza. Hace falta Kp ≥ 1,24 o una acción integral.
5. Saturación
Con Kp = 0,5, ¿hasta qué temperatura está el horno a plena potencia?
Ver solución
La salida es 1 mientras 0,5 · e ≥ 1, es decir, e ≥ 2 °C: hasta 58 °C. La simulación muestra que sale de la saturación a los 77 s.
6. Reset manual
Se agrega u0 = 0,5 a un proporcional con Kp = 0,5. ¿Cuál es el error con el ambiente a 20 °C y a 10 °C?
Ver solución
A 20 °C: (60 − 20 − 80 · 0,5) / 41 = 0. A 10 °C: (60 − 10 − 40) / 41 = 0,24 °C. Es mejor que el 1,22 °C sin u0, pero sigue dependiendo de la condición.
7. Elegir con retardo
El sensor del horno tiene 10 s de retardo y se exige 60 ± 1 °C. ¿Sirve el todo o nada con histéresis de 2 °C? ¿Y un proporcional?
Ver solución
El todo o nada oscila 8,27 °C pico a pico: no cumple, ni bajando la histéresis (con 0,5 °C son 6,89 °C). Un proporcional con Kp = 0,5 oscila 4,4 °C, y con Kp = 0,1 no oscila, pero deja 4,4 °C de error. Ninguno sirve: hay que acercar el sensor para reducir el retardo o pasar a un PID bien ajustado (temas 43 y 44).
14 · Síntesis
Ideas para recordar
- El todo o nada enciende o apaga el actuador según el signo del error; necesita histéresis (dos umbrales y memoria) para no conmutar sin parar.
- Su temperatura oscila siempre; el promedio coincide con la referencia y compensa solo los cambios de carga.
- Menos histéresis significa más conmutaciones y más rebote por ruido; un tiempo mínimo entre cambios protege el actuador pero aumenta la oscilación.
- El retardo del sensor fija la oscilación mínima del todo o nada, por mucho que se reduzca la histéresis.
- La banda muerta evita que dos actuadores opuestos se peleen; la histéresis evita que uno conmute demasiado.
- El proporcional,
u = Kp · e, es suave y no oscila sin retardo, pero está saturado fuera de su banda proporcional1/Kp. - Deja un error en régimen
(r − Tamb) / (1 + K · Kp): baja con la ganancia, nunca se anula y cambia con la carga. - La ganancia está acotada por el ruido, la saturación y el retardo; con mucha ganancia y retardo, el proporcional oscila como un todo o nada.
¿Listo para el tema 43?
Antes de avanzar, elegí el horno con 5 s de retardo y 1 °C de error tolerable. Anotá qué hace el todo o nada con histéresis de 1 °C y qué hace el proporcional con Kp = 0,5 y con Kp = 2. Escribí qué le falta a cada uno.
En el próximo tema sumamos dos ideas para completar el proporcional: la acción integral, que elimina el error en régimen, y la derivativa, que amortigua la oscilación. Juntas forman el control PID.