Control Proporcional- Integral- Derivativo
PID es la sigla para Control Proporcional-Integral- Derivativo. En esta sección, exploraremos cada uno de los métodos y cómo trabajan juntos para controlar eficientemente un sistema.
Introducción al Control PIDUn objetivo del control de proceso es mantener constante un sistema. En el
ejercicio anterior, usamos varios medios cíclicos para mantener el incubador a la
temperatura deseada. Usando banda diferencial, creamos un rango en el que la
temperatura puede variar cíclicamente alrededor del valor deseado. En el
Experimento 4, vimos como usar modulación por ancho de pulso (PWM) para
agregar energía a nuestro sistema con ciclos de trabajo entre 0% (completamente
apagado) y 100% (completamente encendido). Mientras que estos tipos de control
tienen sus ventajas y desventajas, el control PID nos permite controlar
perfectamente un sistema, aunque puede resultar un poco más complejo de
implementar y ajustar para un óptimo rendimiento.
Mantener un proceso constante involucra agregar continuamente la misma
cantidad de energía que pierde el proceso. Si las pérdidas del sistema fueran
constantes, el control del proceso sería tan simple como aplicar un nivel continuo
de excitación. Sin embargo, los factores que afectan un proceso siempre cambian.
Cambian en cantidades y a velocidades impredecibles. Agregado a esto, deben
entenderse las demoras en la reacción del sistema. Un cambio instantáneo en las
pérdidas, debido a una perturbación, no se notará inmediatamente y tampoco lo
hará un cambio en la excitación. El control del proceso puede ser considerado
como un arte, además de una ciencia.
El primer paso para entender el control PID es que cada sistema tiene ganancias y
pérdidas de energía.
Esistema = Ein–Eout
Se dice que un sistema está en equilibrio cuando la energía ganada (in) equivale a la perdida (out).
Equilibrio: Ein = Eout
Las condiciones o las perturbaciones de nuestro sistema pueden cambiar muy rápidamente, como cuando una ráfaga de viento sopla repentinamente sobre la incubadora, o muy lentamente como cuando el calentador se deteriora por el paso del tiempo. El control PID puede medir y tomar acción observando:1) Qué tan lejos del punto de equilibro deseado está el sistema, o la magnitud del error.2) El tiempo transcurrido desde que se presentó el error.3) Qué tan rápido ocurre el error en el sistema, o la velocidad de cambio.
La suma de estas tres evaluaciones conforma la excitación de salida que intentará mantener el sistema en equilibrio. La Figura 6.1 ilustra la evaluación y control de un sistema con control PID.
La fórmula clásica de control PID para calcular la salida del controlador es esta:
En esta sección, la incubadora será controlada usando control PID, resolviendo la ecuación correspondiente.
Construcción del Circuito
Usaremos el mismo circuito del Ejercicio 5 (Figura 5.2), pero conectará manualmente el ventilador a la fuente de alimentación sin regular o a los 5V cuando sea requerido para generar las perturbaciones.A continuación se transcribe el programa completo para esta sección. Cambiaremos los valores de Ajuste del Control PID para verificar las distintas áreas de control.
DIAGRAMA DE FLUJO DEL PROCESO PRINCIPAL
En este caso como usaremos el compilador bascom omitiremos la sección del diagrama de flujo que dice “CONFIGURA SPL”.
**************************DECLARA VARIABLES******************
Dim Datain As Byte, Dim Temp As Word, Dim Signo As Word,
Dim Exitacion As Word
Dim Err As Word, Dim P As Word, Dim I As Word, Dim D As Word
Dim Contadorpwm As Byte, Dim Ultimoerr As Word,
Dim Contadorint As Byte
Dim Ei As Word, Dim B As Word, Dim Kp As Word
Dim Ki As Word, Dim Kd As Word, Dim Sp As Word, Dim Rango As Word
Dim Mina As Word, Dim Maxa As Word, Dim Maxt As Word
****************CONFIGURACION DEL CONTROL PID*******
Sp = 990
Rango = 20
B = 50
Kp = 0
Ki = 0
Kd = 0
Ti = 24
Mina = 75
Maxa = 120
Maxt = 600
****************************bucle principal**********
Inicio:
Gosub Obtenerdato
gosub Calc_temp
Gosub Cal_excitacion
Gosub Excitacion_calentador
Goto Inicio
*****************leer adc***********************
Obtenerdato:
P1.0 = 0ShiftinP1.2 , P1.1 , I , 0P1.0 = 1I = I / 128Return
Calc_temp: ' Convierte el valor digital en Temp.
Temp =Temprango/255 * Datain / 10 + Offset
Return
************calcula la excitación****************
Calc_Excitacion:
Gosub Errorcalc ' Cálculos de Error
Gosub Propcalc ' Calcula error proporcional
Gosub Intcalc ' Calcula error Integral
Gosub Derivcalc ' Calcula error Derivativo
Excitacion =(b + P + I + D) ' Calcula excitación total
Signo = Excitacion ' Ajuste de signo para max 100 min 0
GOSUB PoneSigno
Excitacion = ABS Excitacion MAX 100
IF Signo = 1 THEN ExcitListo
Excitacion = 0
ExcitListo:
Return
********* Excitacion del calentador
Excitacion_Calentador:
For Contadorpwm = 1 To Tiempo Pwm ' Aplica PWM durante 220 mSec por cada repetición
PWM Calentador, excitacion * 255/100,220
NEXT
RETURN
'********** Calcula %Error - Signo ajustado
ErrorCalc:
Err =(sp - Temp) ' Calcula error de la temperatura
Signo = Err
GOSUB PoneSigno
Err = Abs Err * 100 / Rango ' Calcula % error
Err = Err * Signo
RETURN
'*********** Excitación Proporcional - Signo ajustado
PropCalc:
Signo = Err
Gosub Ponesigno
P = Abs Err * Kp + 5 / 10 ' Err prop= %Err * Kp /10 por escala
P = P * Signo ' +5 por redondeo
Return
'********** Excitación Integral - Signo ajustado
IntCalc:
Ei = Ei + Err ' Acumula %err
Contadorint = Contadorint + 1 ' Incrementa contador
IF ContadorInt < Ti Then IntListo
Signo = Ei
Gosub PoneSigno
Ei = Abs Ei / Ti ' Encuentra error promedio
Ei = Ei * Ki + 5 / 10 ' Int err = Int err * Ki
Ei = Ei * Signo
I = I + Ei ' Suma error a Int err total
Signo = I
GOSUB PoneSigno
I = Abs I Max 100 ' limita a 100
I = I * Signo
Contadorint = 0 ' Reinicia contador y acumulador
Ei = 0
IntListo:
Return
'*********** Excitación Derivativa
DerivCalc:
D=(err-ultimoerr)*Kd 'Calcula excitación derivativa ' basándose en la diferencia del último error
Derivlisto
Ultimoerr = E ' Almacena error actual para el próximo cálculo
RETURN
'********** Determina el signo de un valor
PoneSigno:
If Signo.bit15 = 0 Then Signopos
' Si signobit es 1, entonces es negativo
Signo = -1
Return
SignoPos:
Signo = 1
SignoListo:
Return
La Figura 6.2 es un diagrama de flujo del bucle principal del programa PID. Cada proceso se
discutirá en forma individual a medida que se toque cada tema.
Todos los microcontroladores tienen sus limitaciones, así como otros sistemas tales como los
Controladores Lógicos Programables (PLCs). Al programar operaciones complejas como en
control PID, es importante comprender estas limitaciones y usar sistemas alternativos.
Ya hemos superado la restricción de tener que trabajar con números enteros, como en el caso
de la temperatura, trabajando en décimas de grado. Otra limitación que necesitaremos
sobrellevar es el uso de números negativos. Si bien el BASIC Stamp puede usar valores
negativos, no los puede dividir o usar en instrucciones MIN y MAX para limitar su tamaño.
En esta sección ambos problemas serán importantes. Los valores de excitación PID serán
negativos o positivos dependiendo de si es necesario agregar o quitar excitación del sistema.
También necesitaremos limitar los valores máximos de forma que no excedan el 100% bajo
ciertas circunstancias, como con excitación total.
Para realizar estas tareas, es usada una subrutina llamada PoneSigno. Varias rutinas la llaman
usando GOSUB. El número a ser manipulado, que puede ser negativo, se almacena en una
variable tipo word rotulada Signo. Cuando PoneSigno es llamada, el bit de signo (bit15) es
verificado. Si el bit de signo es 1, es un valor negativo y la variable Signo se pone en -1. Si el
bit de signo es 0, es positivo y Signo se pone en 1. De regreso en la rutina que hizo la
llamada, se manipula el valor absoluto del número original. El resultado luego se multiplica
por Signo para que recupere su signo original. Los valores consigno pueden ser de–32.768 a
+32767.
PropCalc:
Signo = ErrGOSUB PoneSignoP = ABS Err * KP + 5/10 ' Prop err = %Err * Kp /10 por escala,P = P * Signo ' +5 por redondeoRETURN...PoneSigno:IF Signo.bit15 = 0 THEN SignoPos ' Si el bit es 1,
entonces es negativoSigno = -1ReturnSignoPos:Signo = 1SignoListo:RETURN
La primer parte del programa a considerar son los cálculos de excitación total. La
Figura 6.3 es un diagrama de flujo para estas rutinas. Como se mencionó
anteriormente, la excitación total es la suma de tres evaluaciones diferentes
basadas en el error. El porcentaje de excitación total se aplicará entonces al
calentador usando PWM durante 5 segundos. Esto permite que el tiempo con el
calentador encendido sea mucho mayor que el relativamente corto en el que está
apagado, para realizar otras operaciones.