paso 4 control digital

Trabajo Colaborativo Fase 4. Curso Control Digital – “203041” Presentado Por: Frank Johan Ramírez García. Presentado A

Views 52 Downloads 0 File size 758KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Trabajo Colaborativo Fase 4. Curso Control Digital – “203041”

Presentado Por: Frank Johan Ramírez García.

Presentado A: Tutor e Ingeniero - Juan Carlos Bustos.

Universidad Nacional Abierta y a Distancia UNAD. Escuela de Ciencias Básicas, Tecnologías e Ingenierías – ECBTI. Programa de Ingeniería en Telecomunicaciones. Cead – Florencia.

Actividades a desarrollar

Implementar un controlador PID en un microcontrolador PIC 16f877A para un sistema de calefacción. La simulación se debe desarrollar en Proteus utilizando el Heated Oven (LumpedModel) y se establecerán los siguientes valores: Temperature Ambient (°C) = 30 Thermal Resistence to Ambient (°C/W) = 0.7 Oven Time Constant (sec)= 10 Heater Time Constant (sec)= 1 Temperature coefficient (V/°C) = 1 Heating Power (W)= 120 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 el comportamiento del sistema ante perturbaciones de tipo escalón teniendo en cuenta que la temperatura límite o set point es de 90°C. Para ingresar las perturbaciones al sistema se debe hacer lo siguiente: Para 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.

Ecuación del Controlador PID

Donde 𝑒(𝑡) es el error de la señal y 𝑢(𝑡) es la entrada de control del proceso. 𝑘𝑝 es la ganancia proporcional, 𝑡𝑖 es la constante de tiempo integral y 𝑇𝑑 es la constante de tiempo derivativa.

Método Ziegler-Nichols El método de Ziegler-Nichols permite ajustar o "sintonizar" un regulador PID de forma empírica, sin necesidad de conocer las ecuaciones de la planta o sistema controlado. Estas reglas de ajuste propuestas por Ziegler y Nichols fueron publicadas en 1942 y desde entonces es uno de los métodos de sintonización más ampliamente difundido y utilizado. Los valores propuestos por este método intentan conseguir en el sistema realimentado una respuesta al escalón con un sobrepulso máximo del 25%, que es un valor robusto con buenas características de rapidez y estabilidad para la mayoría de los sistemas. El método de sintonización de reguladores PID de Ziegler-Nichols permite definir las ganancias proporcional, integral y derivativa a partir de la respuesta del sistema en lazo abierto o a partir de la respuesta del sistema en lazo cerrado. Cada uno de los dos ensayos se ajusta mejor a un tipo de sistema Función de transferencia lazo abierto 𝐺(𝑠) = Respuesta de salida a una entrada escalon

𝐾𝑜 ∗ 𝑒 −𝑠𝑡𝑜 (1 + 𝑠𝑦𝑜

Configuramos el Heater Oven.

Para determinar la respuesta al escalón de la planta se debe retirar el controlador PID y sustituirlo por una señal escalón.

Con los datos que arroja la grafica se hallan los parametros 𝐾𝑜 𝑌𝑜 𝑇𝑜 𝑡𝑜 = 𝑡𝑖 − 𝑡𝑜 = 4 − 2 = 2 𝑦𝑜 = 𝑡2 − 𝑡𝑖 = 18 − 4 = 14 𝑘𝑜 =

𝑌1 − 𝑌𝑂 9000 − 30 = = 897 𝑈1 − 𝑈𝑂 10 − 0

Con los datos que arroja la grafica se hallan los parametros 𝐾𝑝 𝑇𝑖 𝑇𝑑 𝑘𝑝 =

1.2 ∗ 𝑌𝑂 1 ∗ 2 ∗ 14 = = 0.0156 𝐾𝑂 ∗ 𝑇𝑂 897 ∗ 2

𝑡𝑖 = 2 ∗ 𝑇𝑂 = 2 ∗ 2 = 4 𝑡𝑑 = 0.5 ∗ 𝑇𝑂 =0.5 * 2 = 1

Parametros del controlador 𝑎 = 𝑘𝑝 = 0.0156 𝑏=

𝑘𝑝 ∗ 𝑡 0.0156 ∗ 0.1 = = 0.0039 𝑡𝑖 4

𝑐=

𝑘𝑝 ∗ 𝑡𝑑 0.0156 ∗ 1 = = 0.156 𝑡 0.1

Codigo de programacion pic compiler #INCLUDE #device adc= 10 #use delay(clock=4000000) #fuses XT, NOWDT #BYTE TRISC = 0X87

void main(){ int16 valor; int16 control; float a,b,c; float temp_limit; float rT,eT,iT,dT,yT,uT,iTO,eTO,iT_1,eT_1; float max,min; min = 0.0; max =1000.0; iT_1=0.0; eT_1=0.0; a= 0.0156; b= 0.0039; c= 0.156; temp_limit=500.0; TRISC=0; setup_timer_2(t2_div_by_4,249,1); setup_ccp1(ccp_pwm); setup_adc_ports(all_analog); setup_adc(ADC_CLOCK_INTERNAL); set_adc_channel(0); while(1) {

valor=read_adc(); yT=valor*500.0/1024.0; rT=temp_limit; eT=rT-yT; iT=b*eT+iTO; dT=c*(eT-eTO); uT=iT+a*eT+dT; if (uT>max) { uT=max;} else { if (uT