Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
#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
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
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
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