PID | Top

Control Proporcional Integral

`PID SP, BP, #Mx, TI, Vi, Ri`

SP Variable con el valor deseado (16 bit)

BP Banda proporcional (relativa a SP) (16 bit)

#Mx Valor para salida al 100% (16 bit)

TI Variable con el valor del tiempo integral (16 bit)
Vi Variable para uso interno del control (32 bit)
Ri Variable para uso interno del control (32 bit)

Es un control Proporcional Integral para controlar valores entre -32768 y 32767. El control diferencial no es accesible para el usuario. Esta instrucción está disponible a partir de CP121 ROM 2.56, CP122 ROM 2.04 y CP124 ROM 1.03.
Ejemplo:
`LD temperatura`
`PID SP, BP, Mx, TI, Vi, Ri`
`ST salida`
El acumulador lleva el dato de entrada para el control al momento de ejecutar la instrucción. El rango de valores va desde -32768 a 32767. Una vez ejecutada el acumulador tiene el resultado. Todas las variables son enteros de 16 bit con signo menos Vi (32 bit) y Ri (32 bit), por lo que se recomienda trabajar con rangos de 1/1000 para tener buena discriminación y evitar desbordamientos.
SP es la variable (16 bit) que tiene el valor deseado. Puede ser temperatura, peso, velocidad, etc. No existe un tipo definido para este dato o el control. El rango de valores va desde -32768 a 32767.
Vi y Ri son variables (32 bit) que el control usará para retener datos de su operación. Poniendo a cero estas variables el control es reseteado.

Mx es el valor (16 bit) máximo que debe adoptar cuando la salida está al 100%. Supongamos que la salida se usará en una salida analógica de 12 bit, solo hasta la mitad. Entonces Mx debe tener el valor de 2047 (Si se empezara a contar desde 1 sería 2048, pero se empieza de 0). Solamente ésta puede ser una constante (valor) o variable (que contenga el valor).
BP es una variable (16 bit) que debe tener el valor de la banda proporcional. Esta es relativa al SP (y usa misma unidad y escala que SP). Con valor 0 el control se comporta como un On/Off, y TI se puede usar como histéresis. Debe tener el mismo signo que SP.
TI es una variable (16 bit) que indica en cuantas ejecuciones de la instrucción es realizada la integración, es decir el tiempo integral. El rango de valores va desde 1 a 32767. Con valor 0 el control solo queda en modo proporcional y las variables Vi y Ri son puestas en cero.
Uso

Como ejemplo se tomará un control de temperatura. El sensor toma la lectura de temperatura (valor de entrada) y actúa sobre el calefactor.

Aquí la solución se ve "lineal", pero en un control digital se necesita hacerlo de a intervalos regulares. Para esto en necesario experimentar con el medio para conocer los valores para el control. Estos son propios y exclusivos de cada medio, pues son sus propios parámetros físicos.

Para medir sus características se pone el control en modo On/Off. Se mide la distancia ente picos (Pr) y el tiempo de un ciclo (ti):

Al realizar la prueba (con SP de 2 valores distintos) se obtuvo este resultado:

Prueba a 80°

.

Prueba a 160°

Kp se calcula (aproximadamente) usando los datos de la prueba con la siguiente formula:

Entonces:

22,2 / 80 = 0,278

0,278 - 1 = -0,722

|-0,722| = 0,722

0,72 * 100 = 72,2

BP = 722 (SP está en décimas por lo que BP también debe pasarse a décimas)

y

18,1 / 160 = 0,113
0,1131 -1 = -0,887
|-0,887| = 0,887
0,887 * 100 = 88,7
BP = 887 (SP está en décimas por lo que BP también debe pasarse a décimas)

Ti debe ser un tiempo lo mas cercano posible a 330 segundos (según mediciones en la prueba). Como éste depende del período con que se ejecuta la instrucción, es necesario ver el ejemplo del programa para comprender.

; Temporizador para ejecutar la instrucción PID periódicamente
LD puls_c1seg ;En 1 solo una vuelta de programa cada segundo
LD 0
CTU cntPID, 10 ;Cada 10" ejecuta el control
CMOV 0, cntPID ;Reset tiempo invocación periódica PID
CALC CtrlPID ;LLama al control (cada 10") --->
; Conversión de la salida del PID a modulación de ancho de pulso
LD 1 ;Activa OSCV
OSCV tpSalPID, SalPID, 10.0 ;Convierte a tiempo
ST PID_Out ;Relé de salida

END
CtrlPID LD Temperatura ;Control <---
PID SP, BP, 100, TI, Vi, Ri ;100 corresponde a un timer de 10" de tiempo
ST SalPID ;SalPID es la salida del PID, que se convertirá a tiempo
RET ;Retorno --->

; Inicial se ejecuta solo una vez porque depende
; de la variable de estados 'Init'
Inicial MOVE 800, SP ;Temperatura deseada en décimas de grado
MOVE 722, BP ;Valor calculado según mediciones
MOVE 33, TI ;Valor calculado según mediciones
END

Descargar ejemplo

La subrutina que tiene la instrucción PID se ejecuta una vez cada 10 segundos. Entonces para que Ti tenga los 330 segundos correspondientes a las mediciones en la prueba, se le asigna 33 (33 * 10 = 330). El valor de salida del PID es convertido a modulación de ancho de pulso usando un oscilador variable (OSCV).

Para saber si los valores son correctos o requieren ajustes, se procede a hacer la prueba:

El control se inició con los valores calculados. Como se ve, aun la BP no es la adecuada (debe agrandarse)

El control se inició con los valores calculados. Como se ve, aun la BP no es la adecuada (debe achicarse)

Nótese que el mismo dispositivo en dos valores distintos, calculados de la misma forma, responde de manera distinta; mientras que en el primer caso es necesario agrandar la BP, para el segundo debe ser achicada para mejorar la respuesta. De esta forma queda demostrado que es necesario corregir según la potencia del sistema.

Parámetros incorrectos

Cuando los parámetros no son adecuados el control responderá "sin control". En la figura se ven las respuestas a distintos (cinco) parámetros extremos:

Condiciones

- Si TI = 0 el control solo es proporcional (no hay integral)
- Si BP = 0 el control es On/Off. TI se usa como histéresis

En el área SM está PID_int_sat (sm1.12) que indica cuando el integral ha llegado al máximo (saturado). Si se ejecutan varios controles PID no se indica a cual corresponde. Requiere del análisis para determinar a cual corresponde. Este bit se debe poner en cero manualmente una vez atendido el asunto. La saturación ocurre cuando el valor integrado ha alcanzado el 50% del valor de SP. Esto es indicativo de que BP es grande o que al dispositivo que se controla "le falta fuerza".

Ejemplos varios

Calentamiento y enfriamiento

Para calentamiento es como se ha indicado hasta ahora. Pero supongamos que además se necesita enfriar por arriba de los 0. Las rutinas para cada uno de los controles sería:

Calentamiento:

exepidc ld PID_in ;Valor de entrada
PID SPc, BPc, Mxc, TIc, Vic, Ric ;Control con parámetros de calentamiento
st PID_out ;Resultado
ret

Comportamiento

Enfriamiento:

exepide ld PID_in ;Valor de entrada
PID SPe, BPe, Mxe, TIe, Vie, Rie ;Control con parámetros de enfriamiento
st PID_out ;Resultado parcial
ld Mxe ;Máximo para la salida
sub PID_out ;Invierte comportamiento
st PID_out ;Resultado
ret

Comportamiento

En ambos casos SP y BP son positivos, y el control se efectúa entre SP y BP. Por arriba o debajo adopta los valores indicados en las figuras de comportamiento de cada uno. Si fuese necesario que BP quede por arriba de SP para enfriamiento se deberá "engañar" al control:

exepide ld SPe ;SP real
add BPe ;BP real
st SP2 ;Nuevo SP
ld PID_in ;Valor de entrada
PID SP2, BPe, Mxe, TIe, Vie, Rie ;Control con parámetros de enfriamiento
st PID_out ;Resultado parcial
ld Mxe ;Máximo para la salida
sub PID_out ;Invierte comportamiento
st PID_out ;Resultado
ret

Comportamiento

Para comparar este último caso con el anterior (ambos enfriamiento por arriba de 0) supondremos que SP = 100, BP = 50 y MX = 100. Entonces en el primer enfriamiento los valores absolutos serían 100 para SP y 50 para BP, y en el segundo 100 para SP y 150 para BP.

Enfriamiento

Para enfriar por debajo de 0. los valores de SPe y BPe deben ser negativos.

exepide ld PID_in ;Valor de entrada
PID SPe, BPe, Mxe, TIe, Vie, Rie ;Control con parámetros de enfriamiento
st PID_out ;Resultado
ret

Comportamiento

Por arriba de BP el control está al 100%, entre BP y SP actúa el control, y por debajo de SP está al 0%.

Calentamiento

Para calentar por debajo de 0 y mantener el valor también por debajo de 0 se usa la misma rutina que para enfriar con BP por arriba de SP, pero con valores negativos de SP y BP se obtiene el efecto buscado (calentamiento):

exepidc ld SPc ;SP real
add BPc ;BP real
st SP2 ;Nuevo SP
ld PID_in ;Valor de entrada
PID SP2, BPc, Mxc, TIc, Vic, Ric ;Control con parámetros de calentamiento
st PID_out ;Resultado parcial
ld Mxc ;Máximo para la salida
sub PID_out ;Invierte comportamiento
st PID_out ;Resultado
ret

Comportamiento

Si SP = -100 y BP = -50, el resultado será -100 para SP2 y -150 para BP.

Mínimo de salida

La instrucción no permite fijar un mínimo, pero se puede hacer modificando algunos valores:

exep ld Mx ;Valor máximo para la salida
sub Min ;Valor mínimo para la salida
st Mx2 ;Nuevo máximo de salida
ld PID_in ;Valor de entrada
PID SP, BP, Mx2, TI, Vi, Ri ;Control con parámetros de enfriamiento
add Min ;Salida = Salida + mínimo
st PID_out ;Resultado
ret

Comportamiento

En la siguiente tabla se muestran los resultados de las pruebas:

Valores seteados | Entrada | Salida
SP | 100 | 0 | 100
BP | 10 | 90 | 100
Mx | 100 | 91 | 95
Min | 50 | 95 | 75
|  | 99 | 55
|  | 100 | 50
|  | 101 | 50

OSCV
LIN
Lista de instrucciones
Indice