Está en la página 1de 11

Ing.

Oscar Concha Rdz

Control PID de temperatura con


PIC18F4455

Ing. Oscar Concha Rdz

Mayo 4, 2017
Ing. Oscar Concha Rdz

Controlador PID
El control PID es un mecanismo de control que a través de un lazo de retroalimentación
permite regular la velocidad, temperatura, presión y flujo entre otras variables de un
proceso en general. El controlador PID calcula la diferencia entre nuestra variable real
contra la variable deseada; El algoritmo de control incluye tres parámetros fundamentales:
Ganancia proporcional (P), Integral (I) y Derivativo (D)
El parámetro Proporcional (P) mide la diferencia entre el valor actual y el set-point (en
porcentaje) y aplica el cambio. La señal de control depende del tamaño de error actual

El parámetro Integral (I) se refiere al tiempo que se toma para llevar a cabo una acción
correctiva. Mientras el valor sea más pequeño, el ajuste es más rápido pero puede causar
inestabilidad en el sistema. La acción integral genera una señal de control proporcional al
error histórico (error acumulado)

El parámetro Derivativo (D) emite una acción predictiva, es decir, prevé el error e inicia
una acción oportuna. Responde a la velocidad del cambio del error y produce una
corrección significativa antes de que la magnitud del error se vuelva demasiado grande. La
acción derivada genera una señal de control proporcional a la variación de error

La correcta sintonización o programación de estos parámetros nos ayuda a controlar de


manera efectiva nuestra planta, de no ser así el sistema puede quedar inestable
Curva de reacción Ziegler-Nichols
En lazo abierto, muchos procesos pueden definirse según la siguiente función de
transferencia:
𝐾𝑜𝑒 −𝑠𝑇0
𝐺(𝑠) =
1 + 𝑦0𝑠
Donde los coeficientes Ko, T0 τ y y0 γ se obtienen de la respuesta del sistema en lazo
abierto a una entrada escalón

La respuesta escalonada en forma de “S”


La curva en forma de “S” puede ser caracterizada por dos parámetros; tiempo de retardo ()
y la constante de tiempo
Los parámetros se pueden obtener de la respuesta mostrada en la Figura 1.1
𝑇0 = 𝑡1 − 𝑡0
𝑦0 = 𝑡2 − 𝑡1
𝑦1 − 𝑦0
𝐾𝑜 =
𝑢1 − 𝑢0
Ing. Oscar Concha Rdz

Figura 1.1 Respuesta de salida ante una entrada escalón

Según Ziegler-Nichols, la relación de estos coeficientes con los parámetros del controlador
son:
𝑦0
𝐾𝑝 = 1.2
𝑘0𝑇0
𝑇𝑖 = 2𝑇0
𝑇𝑑 = 0.5𝑇0

Figura 1.2 Determinación de los parámetros por medio de curva de reacción


Ing. Oscar Concha Rdz

Controlador digital PID


Existen distintas posibilidades de la realización práctica de un controlador PID, una de las
más habituales es la realización en paralelo

Figura 2.1 Diseño paralelo de controlador PID digital

Donde la función de transferencia para el controlador PID digital se convierte en:


𝑎 = 𝐾𝑝
𝐾𝑝𝑇
𝑏=
𝑇𝑖
𝐾𝑝𝑇𝑑
𝑐=
𝑇
Algoritmo de programación

Figura 3.1 Función de transferencia del modelo


Ing. Oscar Concha Rdz

Controlador PID de temperatura


El siguiente programa creado con el software de programación MPLAB X y con el
microcontrolador PIC18F4455 en lenguaje #C tiene como objetivo regular con precisión la
temperatura de un proceso sin una intensa participación del operador, un sistema
controlador de temperatura confía en un microcontrolador, que acepta como entrada un
sensor de temperatura análogo (LM35)
El programa consiste en comparar la temperatura real con la temperatura de control deseada
o su punto de ajuste y proporciona una salida a un elemento de control (lámpara
incandescente) El controlador es una parte de todo el sistema de control y se deberá
analizar todo el sistema para seleccionar el controlador adecuado

#define _XTAL_FREQ 4000000

#include <xc.h>
#include <stdio.h> //Uso de la función sprintf, float %f, int %d, char %s,
#include "flex_lcd.h" //Librería LCD

//Variables PID
unsigned long valor, controlador; //Variables para lectura de ADC y señal de control al módulo CCP
float a,b,c; //Constantes para parámetros de controlador PID
float TEMPERATURA_LIMITE; //Referencia de Temperatura
float rT,eT,iT,dT,yT,uT,iT0,eT0; //Variables del controlador PID
float max,min; //Variables para anti-windup

//Variables LCD
char buffer1 [16];
char buffer2 [16];
float tempera = 0;

void PID ()
{
ADCON0bits.GO = 1; //AD conversion status bit (conversion in progress)
while (ADCON0bits.nDONE == 1) continue; //Wait until conversion is over
valor = (ADRESH << 8) + ADRESL; //Leer ADC de 10bits
Ing. Oscar Concha Rdz

yT = (5000.0 * valor) / (1024.0); //Señal de salida y(kT)


rT = TEMPERATURA_LIMITE; //Referencia
eT = rT - yT; //Calcular señal de error e(kT)
iT = b * eT + iT0; //Calcular termino integrativo i(kT)
dT = c * (eT - eT0); //Calcular termino derivativo d(kT)
uT = iT + a * eT + dT; //Calcular señal de control u(kT)

if (uT >= max)


{
uT = max;
}
else
{
if (uT <= min)
{
uT = min;
}
}

unsigned long uTEntero = (unsigned long) uT; //flotante a entero


controlador = uTEntero;

CCPR1L = controlador;
iT0 = iT;
eT0 = eT;
}

void LCD ()
{
sprintf (buffer1," Setpoint %f ",TEMPERATURA_LIMITE); //Guardamos en el string Buffer1 la palabra
Setpoint y su valor
Lcd_Out2 (1, 0, buffer1); //Escribimos en el renglón uno, columna cero lo que contiene buffer1
tempera = yT/10;
sprintf (buffer2,"Tempera %f",tempera); //Guardamos en el string Buffer2 la palabra Tempera y su valor
Ing. Oscar Concha Rdz

Lcd_Out2 (2, 0, buffer2); //Escribimos en el renglón dos, columna 0 lo que contiene buffer2
}

void main(void)
{
OSCCONbits.IRCF2 = 1; //Internal oscillator frequency select bits (4MHz)
OSCCONbits.IRCF1 = 1;
OSCCONbits.IRCF0 = 0;

min = 0.0;
max = 1000.0;
iT0 = 0.0;
eT0 = 0.0;
a = 0.1243;
b = 0.0062;
c = 0.6215;
TEMPERATURA_LIMITE = 600.0; //Set-Point r(kT)= 60°C

//PWM
TRISCbits.RC2 = 0; //Pin RC2/CCP1 as an output
PORTCbits.RC2 = 0;
CCP1CONbits.CCP1M3 = 1; //PWM mode
CCP1CONbits.CCP1M2 = 1;
CCP1CONbits.CCP1M1 = 0;
CCP1CONbits.CCP1M0 = 0;
PR2 = 0x7C; //1KHz
T2CONbits.T2CKPS1 = 1; //TMR2 clock prescaler select bits (prescaler is 16)
T2CONbits.T2CKPS0 = 0;
T2CONbits.TMR2ON = 1; //TMR2 On bit (TMR2 is on)

//ADC
ADCON2bits.ACQT2 = 1; //Table 2-11
ADCON2bits.ACQT1 = 1;
Ing. Oscar Concha Rdz

ADCON2bits.ACQT0 = 0;
ADCON2bits.ADCS2 = 1; //Table 2-11
ADCON2bits.ADCS1 = 0;
ADCON2bits.ADCS0 = 1;
ADCON2bits.ADFM = 1; //AD result format select bit (right justified)
ADCON1bits.PCFG3 = 1; //AD port configuration control bits (AN0 analog)
ADCON1bits.PCFG2 = 1;
ADCON1bits.PCFG1 = 1;
ADCON1bits.PCFG0 = 0;
ADCON0bits.CHS3 = 0; //Analog channel select bits (AN0)
ADCON0bits.CHS2 = 0;
ADCON0bits.CHS1 = 0;
ADCON0bits.CHS0 = 0;
ADCON1bits.VCFG1 = 0; //Voltage reference (Vss)
ADCON1bits.VCFG0 = 0; //Voltage reference (Vdd)
ADCON0bits.ADON = 1; //AD on bit

//LCD
Lcd_Init ( ); //Inicializamos el LCD
Lcd_Cmd (LCD_CLEAR); //Limpiamos el LCD
Lcd_Cmd (LCD_CURSOR_OFF); //Apagamos el cursor

while (1)
{
PID ( ); //Llamamos la rutina PID a ejecutar
LCD ( ); //Llamamos la rutina LCD a ejecutar
__delay_ms (100); //Periodo de muestreo T = 0.1 segundos
}
return;
}
Ing. Oscar Concha Rdz

Simulación en ISIS y esquemático del circuito

LCD

120 VAC

PIC

TRIAC

Sensor

Foco

Para explicar este circuito primeramente hablaremos del sensor LM35 que ya se mencionó
anteriormente; este sensor de temperatura análogo tiene una tensión de salida linealmente
proporcional a la temperatura en grados Celsius (centígrados), es decir, a mayor
temperatura se obtiene un mayor voltaje. Esta salida entra a nuestro microcontrolador (PIC)
gracias al ADC (convertidor análogo-digital) para que nuestro sistema embebido pueda leer
la información que recibe del sensor el cual realiza todas las operaciones aritméticas
necesarias dentro de su software para generar una señal de salida. Aquí en el DAC
(convertidor digital-análogo) se obtiene una frecuencia de oscilación que con ayuda de un
TRIAC (Triodo para corriente alterna) seremos capaces de conmutar la corriente alterna, es
decir, prenderemos y apagaremos un foco dependiendo de la respuesta que nos del
microconrolador. Finalmente, el calor generado por el foco elevará la temperatura del
sensor volviendo a generar la función de transferencia

El proceso se repetirá una y otra vez hasta alcanzar la temperatura deseada. En cuanto la
temperatura difiera en lo más mínimo, el microcontrolador volverá a trabajar hasta tener
una planta estable
Ing. Oscar Concha Rdz

NOTA: El ADC y el DAC son programas elaborados a base de software que realiza el PIC
en sus múltiples tareas

Por otro lado, el LCD (display de cristal líquido) mostrará la temperatura deseada por el
usuario y la temperatura a la cual el sensor se encuentra por el momento

Para la implementación y simulación del controlador PID se utilizará el software ISIS


Proteus. Este software ofrece el modelo esquemático de un sistema de calefacción
denominado OVEN. El modelo esquemático OVEN contiene un terminal sensor “T” que
entrega un voltaje proporcional a la temperatura del sistema

Figura 4.1 Simulación en ISIS PROTEUS

Figura 4.2 Control de temperatura en funcionamiento


Ing. Oscar Concha Rdz

Referencias:
García, Pamela. (N/A). ¿Qué es el control PID?. Recuperado el 3 de Mayo de 2017 de
Noticias del mercado. Sitio web:
https://franklinelinkmx.wordpress.com/2013/09/05/que-es-el-control-pid/
Ruge, Llber (N/A). Método básico para implementar un control digital PID en un
microcontrolador PIC para desarrollo de aplicaciones a bajo costo.
Recuperado el 4 de Mayo de 2017 de
http://www.edutecne.utn.edu.ar/microcontrol_congr/industria/mtodob~1.pdf

También podría gustarte