Vous êtes sur la page 1sur 21

UNIVERSIDAD NACIONAL DE PIURA

“AÑO DEL BUEN SERVICIO AL CIUDADANO”

PROYECTO:

DISEÑO CONTROL PID DIGITAL TEMPERATURA

DOCENTE:

ING. JONATAN SAAVEDRA AGUIRRE

AUTOR:

Juan Alexander Ticona Aquino

Piura Septiembre 2017


CONTROL DE TEMPERATURA
Un controlador de temperatura es un instrumento que se usa para controlar la temperatura. El
controlador de temperatura recibe datos de un sensor de temperatura y emite datos
conectados a un elemento de control, como un calefactor o ventilador.

CONTROLADOR PID

Un controlador PID es un mecanismo de control por realimentación ampliamente usado en


sistemas de control industrial. Este calcula la desviación o error entre un valor medido y un
valor deseado.
El algoritmo del control PID consiste de tres parámetros distintos: el proporcional, el integral, y
el derivativo. El valor Proporcional depende del error actual. El Integral depende de los errores
pasados y el Derivativo es una predicción de los errores futuros. La suma de estas tres acciones
es usada para ajustar al proceso por medio de un elemento de control como la posición de una
válvula de control o la potencia suministrada a un calentador.
OBTENCIÓN DE DATOS DE NUESTRA PLANTA
Mi planta a controlar es una olla arrocera usada como un calefactor de agua, hemos llenado la
cantidad de 1500ml de agua y hemos procedido a calentar. Para dicho procedimiento hemos
tomado los siguientes datos:

Hora de inicio 09.07 am del 08/08/17 temperatura inicial = 26.88°C

Hora final 4.49pm temperatura final = 90.91°C

Para la obtención de los datos hemos procedido a usar un sensor LM35, el cual va conectado a
al puerto A0 del PIC16F877a, y trasmitimos mediante rs232 a la PC

Código para leer datos de temperatura del PIC16F877A en CSS


Aquí mostramos el código ingresado desde Matlab para obtención de datos cada segundo y
que nos grafique la salida con respecto al tiempo.
Figura1

Imagen de obtención de datos.


Figura 2

Como vemos en la imagen, hemos conectado un multímetro, donde visualizamos el voltaje de


nuestra salida del sensor.

Conversión a temperatura

LM35

Cuando el LM35 se aplica con una resistencia de carga de 200 W como se muestra en la Figura
5, Figura 6 o Figura 8, es relativamente inmune a la capacitancia de cableado porque la
capacitancia forma un bypass desde tierra a entrada, no a la salida. Sin embargo, como con
cualquier circuito lineal conectado a cables en un entorno hostil, su funcionamiento puede
verse afectado negativamente por fuentes electromagnéticas intensas tales como relés,
transmisores de radio, Motores con escobillas de arco, transitorios SCR, etc., ya que su
cableado puede actuar como antena receptora y sus uniones internas pueden actuar como
rectificadores. Para obtener mejores resultados en estos casos,

Un condensador de derivación de VIN a tierra y un amortiguador de serie R-C tal como 75 Ohm
en serie con 0,2 o 1 μF de salida a tierra son a menudo útiles. Estos se muestran en la Figura
13, Figura 14, y Figura 16.
Entradas y salidas analógicas

Una señal eléctrica analógica es aquella en la que los valores de la tensión o voltaje varían
constantemente y pueden tomar cualquier valor. En el caso de la corriente alterna, la señal
analógica incrementa su valor con signo eléctrico positivo (+) durante medio ciclo y
disminuye a continuación con signo eléctrico negativo (–) en el medio ciclo siguiente.

Un sistema de control (como un microcontrolador) no tiene capacidad alguna para trabajar


con señales analógicas, de modo que necesita convertirlas en señales digitales para poder
trabajar con ellas.

El valor de 0 voltios analógico es expresado en digital como B0000000000 (0) y el valor de


5V analógico es expresado en digital como B1111111111 (1023).

Por lo tanto todo valor analógico intermedio es expresado con un valor entre 0 y 1023, es
decir, sumo 1 en binario cada 4,883 mV.

El pic 16F877A tiene una resolución de 10 bits, es decir, unos valores entre 0 y 1023.

Figura3

Bueno mediante la explicación de la resolución podemos llevar nuestra conversión digital el


cual entra al Matlab y hacemos una ecuación para levar el valor del ADC al valor de la
temperatura que tiene nuestra planta.

Calculo de lectura del ADC

284.7 ∗ 10−3 ∗ 1023 𝑉


𝐴𝐷𝐶 =
5𝑉
𝐴𝐷𝐶 = 58.25
Calculo de la conversión a Voltaje
𝐴𝐷𝐶 ∗ 5𝑉
𝑉𝑜𝑙𝑡𝑎𝑗𝑒 𝐴𝑁0 = = 284.7𝑚𝑉
1023
Llevando a temperatura

Por información del Datasheet nos dice que hace la conversión 10mV/°C
284.7𝑚𝑉 ∗ 1°𝐶
𝑇= = 28.47°𝐶
10𝑚𝑉
Entonces resumiendo Código en Matlab tenemos
𝐴𝐷𝐶∗5𝑉 1°𝐶 𝐴𝐷𝐶∗500
𝑇= ∗ = [°𝐶 ]
1023 10𝑚𝑉 1023

Figura 4
1
Vemos en la gráfica la respuesta nuestro sistema al Escalón 𝑅(𝑠) = 𝑠 llega a alcanzar
una temperatura máxima cerca a los 90°C después de casi más de una hora.
𝐾
𝐺(𝑆) =
𝜏𝑆 + 1
El modelo que describe la respuesta es

R(s) Y(s)

G(s)

1 𝐾𝑠
𝑌(𝑠) = 𝑅 (𝑠) ∗ 𝐺 (𝑠) =
𝑠 (1 + 𝜏𝑠)
Figura 5

Ahora hallando la función de transferencia de nuestra planta

Como visualizamos la gráfica de los datos obtenidos haciendo uso del comando plot. Y
llevando los datos a Excel tenemos:

Temperatura inicial Ti= 26.88°C

Temperatura final Tf = 90.91°C

Vemos que nuestra grafica tenemos un sistema de primer orden

Estimando el comportamiento de nuestra planta, tenemos


𝐾
𝐺(𝑆) =
𝜏𝑆 + 1
Donde K: Ganancia del sistema

τ : Constante de tiempo

Teniendo en cuenta la figura 7-3 del libro de Dinámica de sistemas de Ogata

Tenemos que la pendiente es igual 1/τ

El valor de τ se obtiene al 63.2% de ∆T

∆𝑇 = 𝑇𝑓 − 𝑇𝑖 = 90.91 − 26.88 = 64.03°𝐶


63.2%∆𝑇 = 40.47°𝐶
Tabulamos el valor de la temperatura al 63.2%

𝑇 = 𝑇𝑖 + 63.2%∆𝑇 = 26.88 + 40.47 = 67.35°𝐶


Mediante un trazado imaginario en la figura 4 estimamos que el valor de τ es
aproximadamente 1014seg.
1 1
Hallando nuestra pendiente tenemos que 𝑎 = 𝜏 = 1014

𝑎 =0.00098619
𝐾
𝐺(𝑆) =
𝑆+𝑎
Ahora para hallar K se aplica del Teorema del valor final
1 𝐾 𝐾
𝑉𝑓 = lim 𝑠 ∗ 𝑌(𝑠) = lim 𝑠 ∗ ∗ =
𝑠→0 𝑠→0 𝑠 𝑆 + 𝑎 0.00098619
𝐾
90.91 =
0.00098619
𝐾 = 90.91 ∗ 0.00098619
𝐾 = 0.08966
Entonces tenemos
0.08966
𝐺 (𝑆) =
𝑆 + 0.00098619
Diseño del controlador de nuestra planta
Nos vamos al Matlab y en el editor escribimos, y corremos.
%% Open loop response to step
%G(S) = K/((S+a)
clc;clear;clf;
%Definimos la planta mediante zeros,poles,gain
G = zpk([],[-0.00098619],0.08966)
clc;clf;
step(1,1);hold on
step(G);

Según nuestro G(s) tenemos un polo cerca al origen lo que significa que nuestro
sistema es lento.
0.08966
𝐺(𝑆) =
𝑆 + 0.00098619

Vemos que al agregar un integrador a nuestro sistema se hace lento por el polo de
nuestra planta que está muy cercano al origen
Lo que hacemos es colocar un Zero cerca de -0.00098619 para anular el efecto del polo
de la planta.
Respuesta del sistema cuando colocamos un Zero en -0.000986
Vemos que el tiempo de respuesta de nuestro sistema será a los 4.9s cuando nuestra
planta esté en 0°C.
En este caso queremos hacer un controlador PID que consta de 2 zeros, un polo real un
integrador y una ganancia.
Completamos nuestro controlador así:
(s + 1.8) (s + 0.000986)
𝐶(𝑠) = 4.9
s (s + 1.2)
Respuesta del sistema con respecto al controlador C(s)

Conversión discretizacion al plano Z


Seleccionamos un tiempo de muestreo Tm = 0.25s, para convertir nuestro
controlador del tiempo continuo(s) al plano discreto (z), utilizando el método de
Tustin.

Se cumple que nuestros polos estén dentro del circulo unitario exportamos nuestro
C(z)
Sample time: 0.25 seconds
Discrete-time zero/pole/gain model.
Respuesta de nuestro sistema en Z

Aplicando la transformada inversa de z para programar el microcontrolador

(z − 1) (z − 0.611)
𝐶(𝑧) = 4.9
(z − 1) (z − 0.741)

𝑈(𝑧) (z − 1) (z − 0.611) 𝑧 −2
= 4.9 ∗
𝐸(𝑧) (z − 1) (z − 0.741) 𝑧 −2

𝑈(𝑧) (𝑧 2 − 1.611z + 0.611) 𝑧 −2


= 4.9 2 ∗
𝐸(𝑧) (𝑧 − 1.741z + 0.741) 𝑧 −2

𝑈(𝑧) (1 − 1.611𝑧 −1 + 0.611𝑧 −2 )


= 4.9
𝐸(𝑧) (1 − 1.741𝑧 −1 + 0.741𝑧 −2 )

𝑈(𝑧) − 1.741𝑧 −1 𝑈(𝑧) + 0.741𝑧 −2 𝑈(𝑧)


= 4.9(E(z) − 1.611𝑧 −1 E(z) + 0.611𝑧 −2 E(z))
Por propiedad de atraso transformada inversa de Z

𝑢𝑘 − 1.741𝑢𝑘−1 + 0.741𝑢𝑘−2 = 4.9(𝑒𝑘 − 1.611𝑒𝑘−1 + 0.611𝑒𝑘−2 )

Tenemos nuestra ecuación diferencia

𝑢𝑘 = 1.741𝑢𝑘−1 − 0.741𝑢𝑘−2 + 4.9𝑒𝑘 − 7.8939𝑒𝑘−1 + 2.9939𝑒𝑘−2

Cálculo del Timer 1 para el microprocesador Ts=0.25s

T= 4 * Tosc *(65535 – TMR1)* Preescaler


1
0.25 =∗ 4 ∗ 4 ∗ 10−6 (65535 − 𝑇𝑀𝑅1) ∗ 8
31250 = 65535 − 𝑇𝑀𝑅1
𝑇𝑀𝑅 = 65535 − 31250
𝑇𝑀𝑅 = 34285

Comparando respuesta Proteus y Matlab

Comparando respuesta del controlador


DISEÑO Y EJECUCIÓN DE CIRCUITO DE NUESTRO SISTEMA USANDO
PROTEUS PARA LA SIMULACION Y EAGLE PARA DISEÑO DE LA PLACA.
Proteus es una aplicación para la ejecución de proyectos de construcción de equipos
electrónicos en todas sus etapas: diseño del esquema electrónico, programación del software,
construcción de la placa de circuito impreso, simulación de todo el conjunto, depuración de
errores, documentación y construcción.

Eagle Cadsoft PCB


EAGLE, (siglas de Easily Applicable Graphical Layout Editor) es un programa de diseño de
diagramas y PCBs con autoenrutador.Famoso alrededor del mundo de los proyectos
electrónicos DiY, debido a que muchas versiones de este programa tienen una licencia
Freeware y gran cantidad de bibliotecas de componentes alrededor de la red.

Implementación de nuestro sistema en proteus


Código en CSS

#include <16F877A.h>
#device ADC=10
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOWRT //Program memory not write protected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWDT
#FUSES HS
#use delay(Clock=4M)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,bits=8)
#use FIXED_IO( B_outputs=PIN_B0 )

#define LCD_ENABLE_PIN PIN_E2


#define LCD_RS_PIN PIN_E1
#define LCD_RW_PIN PIN_E0
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>

#define Tsample PIN_B0


#define FS_AD 0.004887 // AD CUANTIZACION

//Declaracion de variables
long adc_value,set_point , duty,duty2, tk;
float rk, yk, ek,ek_1,ek_2,uk,uk_1,uk_2;
float Temp, Sensor, Error;
// Interrupcion generada por el desbordamiento del timer1
#int_timer1
void timer1_isr(void)
{
set_timer1(34285); //recargamos el timer1
output_high(Tsample); /* inicio de medición de tiempo utilizado por el uC
//en lectura de ADC, conversión e impresión de valores */

set_adc_channel(1); //seleccionamos el canal 1 leer el set point


delay_us(100);
set_point = read_adc();
rk = set_point*FS_AD;
Temp = rk*20; //Multiplicamos para llevar de 0 a 100°C
set_adc_channel(0); //seleccionamos el canal 0 del adc
delay_us(100);
adc_value = read_adc();
yk = adc_value*FS_AD*5; // convert n to volts
Sensor = yk*20; //Multiplicamos para llevar de 0 a 100°C
Error = Temp - Sensor;
ek = rk - yk; // calcular error
uk = 1.741*uk_1 - 0.741*uk_2 + 4.9*ek - 7.8939*ek_1 + 2.9939*ek_2; // ecuación diferencia
del controlador

ek_2 = ek_1;
ek_1 = ek;
uk_2 = uk_1;
uk_1 = uk;

if (uk < 0.0) uk = 0.0;


if (uk > 5.0) uk = 5.0;
if (ek < -0.005) // cuando el error sea -0.10°C ek=0.10/20=0.005 active el ventilador
duty2 = 200;
else
duty2 = 0;
duty = (long)(uk * 40);
set_pwm1_duty(duty);
set_pwm2_duty(duty2);
tk = tk +1 ;
printf("tk = %4ld T = %2.2fC S = %2.2fC Er = %2.2f duty = %3ld
\r\n",tk,Temp,Sensor,Error,duty);

output_low(Tsample); /* fin de medición de tiempo utilizado por el uC


//en lectura de ADC, conversión e impresión de valores */
}

// Rutina de inicialización de módulos


void init_cpu()
{
// Configuración del módulo ADC con referencia de GND a 5v
setup_adc_ports(AN0); //Seleccionamos el CHN0 del ADC
setup_adc(ADC_CLOCK_INTERNAL); //utilizamos el clock interno para ADC

// Generamos el Periodo de muestreo de Tm:0.25s, Fosc: 8MHz


setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer1(34285); // Tm=(1/4)us*4*(65535-TMR1)*4 -> Tm=0.25s, TMR1=34285

// Generamos la señal PWM con Fs = 1250hz y resolución 200.


setup_timer_2(T2_DIV_BY_16,49,1); //setup_timer_2(mode,period,postscale)
setup_ccp1(CCP_PWM); //ccp como PWM
setup_ccp2(CCP_PWM);
set_pwm1_duty(0L); // pwm_duty= 200 -> %D = 100%
set_pwm2_duty(0L);
// Habilitamos las interrupciones
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
}

void main()
{
init_cpu();
ek=0.0;ek_1=0.0;ek_2=0.0;
uk=0.0;uk_1=0.0;uk_2=0.0;
tk=0;
lcd_init();
printf(lcd_putc,"\f DIGITAL CONTROL\n PID TEMPERATURA");
delay_ms(2000);
LCD_PUTC("\f"); //Limpio el LCD

while(TRUE)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"T=%2.2fC",Temp);
lcd_gotoxy(10,1);
printf(lcd_putc,"S=%2.2fC",Sensor);
lcd_gotoxy(1,2);
printf(lcd_putc,"Er=%2.2f",Error);
lcd_gotoxy(10,2);
printf(lcd_putc,"D=%4ld",duty);

}
}
Diagrama esquemático en Eagle, igual que el proteus a diferencia de la conexión de
alimentaciones y fuente
PCB o board, se muestra el Enrutamiento de las pistas y colocación de componentes
electrónicos.

CONCLUCIONES
Mediante el curso de Control Digital, quiero comentar que se logró el objetivo de diseñar e
implementar controlador Digital para controlar procesos en el ámbito de la vida cotidiana
como en el campo industrial.

La ventaja del controlador Digital con respecto al Analógico es que todo se reduce en un chip, y
podemos aplicar algoritmos infinitos a nuestro proceso, ejemplo como visualizar en tiempo
real el comportamiento de nuestro sistema más fácilmente.

BIBLIOGRAFIA
Dinámica de Sistemas - Katsuhiko Ogata - Capitulo 7 Análisis de sistemas lineales.

Digital Control of Dynamic-Systems Gene F. Franklin, J. David Powell, Michael L. Workman

REFERENCIAS
https://aprendiendoarduino.wordpress.com/tag/conversor-digital-analogico/

http://www.hubor-proteus.com/proteus-pcb/proteus-pcb/2-proteus.html

https://dominionindustrial.wordpress.com/2014/03/24/aplicaciones-industriales-control-de-
temperatura/

Vous aimerez peut-être aussi