Sunteți pe pagina 1din 5

CONTROL DIGITAL

FASE 3: IMPLEMENTACION CONTROLADOR

Presentado a:

JOAN SEBASTIAN BUSTOS

Tutor

Entregado por:

JUAN VILLANUEVA

Grupo: 203041_2

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


FACULTAD DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
INGENIERIA ELECTRONICA
COLOMBIA
NOVIEMBRE DEL 2019
DESARROLLO DE LA GUIA

IMPLEMENTAR EL CONTROLADOR EN UN MICROCONTROLADOR

PROBLEMA
Simular un controlador PID en un microcontrolador PIC 16f877A para un sistema de
calefacción ante diferentes perturbaciones.
La simulación se debe desarrollar en Proteus utilizando el modelo Heated Oven
(LumpedModel) con la siguiente configuración en parámetros:
• Temperature Ambient (°C) = 27
• Thermal Resistence to Ambient (°C/W) = 0.5
• Oven Time Constant (sec)= 10
• Heater Time Constant (sec)= 1
• Temperature coefficient (V/°C) = 1
• Heating Power (W)= 150

Para el análisis de la curva de reacción, se analizará la respuesta del sistema en lazo abierto
ante una entrada escalón, dicha entrada escalón es de 0v a 20v.
Se debe definir el modelo del sistema y analizar su comportamiento ante perturbaciones de
tipo escalón, teniendo en cuenta que la temperatura límite o set point es de 100°C.
Para ingresar las perturbaciones al sistema se debe hacer lo siguiente:
En el instante de tiempo t=0s se utiliza una de alimentación BAT1 de 20V, para el instante
de tiempo t=50s se conmuta otra fuente de alimentación BAT 2 de 30V y para el instante de
tiempo t=120s se conmuta nuevamente a la fuente de alimentación BAT1 de 20V.
Para la implementación del controlador se sugiere tomar como base el siguiente código
fuente en lenguaje C para un controlador PID discreto. Y recordando los valores del
controlador diseñado
𝐾𝑝 = 3.75

𝑇𝑖 = 8
𝑇𝑑 = 2

#INCLUDE <16F877A.H>
#DEVICE ADC=10
#USE DELAY(CLOCK=4000000)
#FUSES XT,NOWDT
VOID MAIN(){
INT16 valor, control; //Variables para lectura de ADC y señal de Control a 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 de controlador PID
FLOAT max,min; //Variables para anti-windup
min=0.0;
max=1000.0;
iT0=0.0;
eT0=0.0;
a=3.75;
b=8;
c=2;
TEMPERATURA_LIMITE=1300.0; //Set Point r(kT)= 120°C
setup_timer_2(t2_div_by_4,249,1); //Configuracion de Timer 2 para establecer frec. PWM
a 1kHz
setup_ccp1(ccp_pwm); //Configurar módulo CCP1 en modo PWM
setup_adc_ports(all_analog); //Configurar ADC
setup_adc(adc_clock_internal);
set_adc_channel(0); //Seleccionar Canal 0 para sensor de Temperatura
while(true){
valor=read_adc(); //Leer ADC
yT=5000.0*valor/1024.0; //Escalizar señal de salida y(kT)
rT=TEMPERATURA_LIMITE;
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){ //Anti-windup
uT=max;
}
else {
if (uT<min){
uT=min;
}
}
control=uT;
set_pwm1_duty(control); //Transferencia de señal de control al actuador
iT0=iT;
eT0=eT;
delay_ms(100); //Periodo de muestreo T=0.1s
}
}
La imagen que muestro a continuación del controlador PID se muestra que esta inestable

Estoy solo sería que le controlador no es el apropiado para el sistema.


Por tal motivo, es necesario modificar las constantes del controlador con la finalidad de
encontrar la respuesta del sistema que se adapta al comportamiento deseado.
Hacemos un ajuste en los valores de las constantes halladas en el paso anterior se estable
los siguientes valores para:
𝑎 = 0.3 𝑏 = 0.1 𝑐 = 0.6
Obtenemos la siguiente gráfica.

Luego se procede a introducir las perturbaciones en el sistema como se indica en la guía,


obteniendo la siguiente salida del sistema:

S-ar putea să vă placă și