Autor Tema: Controlador PID - Nivel Basico  (Leído 30714 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4583
Controlador PID - Nivel Basico
« en: 08 de Abril de 2010, 01:51:16 »
Hola.

En este hilo, se pretende dar a conocer los conceptos básicos acerca de los controladores, y hacer un énfasis sobre los controladores PID. No se enfocará puntualmente la parte de aplicación, pero si se realizará un ejemplillo simple para que las personas que recién comenzamos con esto del control, tengamos algo de teoría respecto al control y no solo a la aplicación. Sobra decir que cualquier aporte para enriquecer este hilo es bienvenido, se que hay muchos profes por ahí y sería muy bueno contar con esa colaboración.

Los comentarios sobre este hilo se harán en Controlador PID - Nivel Basico (Comentarios), para mantener la información mas organizada.

INTRODUCCIÓN

Al hombre lo mueve, casi siempre, el deseo de conocer mas a fondo las cosas para poder predecir el comportamiento de ellas (determinismo - física clásica); es inevitable pasar a querer manipular, de alguna manera, este conocimiento aplicado para obtener un resultado óptimo, o acorde a lo que queremos.

El control es algo innato en el ser humano y lo aplicamos en un sin-número de actividades cotidianas, por ejemplo: a la hora de bañarnos, y seleccionar la temperatura adecuada a la que sale el agua de la ducha, a la hora de cruzar una calle con tráfico (para aquellos temerarios) y definir la velocidad con la que cruzamos (o corremos), etc.; nos convertimos en un instrumento de control ya que juzgamos la marcha del proceso según las variables que rodean al mismo y decidimos la mejor opción para, de esta manera, obtener el mejor resultado para nosotros, ya sea, una temperatura agradable o pasar con éxito la calle.

El conocer y controlar un proceso, implica un largo recorrido, si se hace por ensayo y error para obtener el resultado que se quiere; se adquiere experiencia, la cual nutre al instrumento de control y hace que éste obtenga un resultado cada vez mejor, pero se convierte en un proceso intuitivo y no aplicable a unas nuevas condiciones. Al crecer la demanda de productos, cualesquiera que sean, se corre el riesgo de afectar la calidad por aumentar la productividad; para mantener la calidad constante (buena calidad) se hace necesario desarrollar teorías para explicar el funcionamiento del proceso, para que así, se puedan vislumbrar las variables de interés y de esta manera, se pueda controlar el proceso para nuestro beneficio.

Características del proceso
Proceso es un sistema que ha sido desarrollado para llevar a cabo una tarea determinada. Los procesos siempre estarán sujetos a variables, que, como cuyo nombre indica, cambian su valor en el tiempo. Es fundamental entonces, el medir estas variables para cuantificar el valor de esa variable y de esa manera saber en cuanto afecta a nuestro proceso en cuestión.

Un bucle de control típico, está conformado por el proceso, el transmisor, el controlador y el elemento de control.

El controlador, permite al proceso cumplir su objetivo y realiza dos funciones esenciales:

  • Compara la variable medida con una variable de referencia (o valor deseado - Set Point) para determinar el error (lazo cerrado).
  • Estabiliza el funcionamiento dinámico del bucle reduciendo el error

Como ejemplo, supongamos a un operario controlando la salida de agua caliente. El operario sensa la salida del agua con la mano y acciona una válvula de vapor para mantener el agua caliente. Ante un cambio en el flujo de agua de entrada, como la apertura de la válvula es la misma, el operario notará que el agua que sale esta mas fría que antes, por lo que, luego de la comparación mental entre la temperatura sensada y la que quiere, decide abrir mas la válvula de vapor para lograr nuevamente la temperatura que desea o que se necesita. El cambio de la temperatura no es inmediato, si no que toma un tiempo.

El conjunto de elementos en circuito cerrado que hacen posible este control reciben el nombre de bucle de control.

Los procesos presentan dos características importantes que deben considerarse:

1. Cambios en la variable controlada, a lo que se conoce como cambios de carga.
2. Tiempo necesario para que la variable del proceso alcance un nuevo valor. Este tiempo es función de propiedades como: capacitancia, resistencia y tiempo de transporte.

Las operaciones básicas que se realizan en el sistema de control son, entonces:

  • Medición: Se hace generalmente mediante la combinación de sensor y transmisor.
  • Decisión: El controlador decide que hacer con base a la medición.
  • Acción: Resultado de la decisión del controlador, generalmente realizada por el elemento final de control.


Es evidente que si quisiéramos quitar al operario humano y colocar en su lugar un controlador automático, éste último, debería poseer toda la información correspondiente para que tome la decisión correcta en cuanto al número de vueltas que debe dar a la válvula de vapor para lograr el valor seleccionado, es decir, debe conocer la dinámica del sistema, como se comporta éste respecto al tiempo ante cambios en la variable de control.

Cont...
« Última modificación: 08 de Abril de 2010, 18:47:01 por MLO__ »
El papel lo aguanta todo

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4583
Re: Controlador PID - Nivel Basico
« Respuesta #1 en: 09 de Abril de 2010, 01:38:10 »
Sistemas Térmicos

Para comenzar, vamos a tomar como ejemplo un sistema térmico. Tal como se dijo en la introducción al tema, nos interesa el comportamiento de la variable, en este caso la temperatura, con respecto al tiempo. Como base, tenemos que la transferencia de calor se realiza, generalmente, por tres métodos:

  • Conducción: El intercambio de energía se realiza por el movimiento cinético o el impacto directo de las moléculas.
  • Convección: El intercambio de energía se relaciona con el movimiento relativo de un fluido respecto a otro.
  • Radiación: El intercambio de energía se realiza por emisión

Así, que en un proceso térmico, estarán presentes, en mayor o menor magnitud, estas tres formas de transferencia de calor.

Como ejemplo práctico, supongamos que tenemos inmerso en un fluido un elemento (sensorial), el cual posee ciertas características como lo son: Un área superficial A, un calor específico c y una masa m. Al estar inmerso en el fluido, el sistema está en equilibrio térmico, es decir, ha alcanzado una temperatura uniforme y no hay transferencia de calor en ningún sentido. En este caso:

$ t=0^-\qquad T=T_{F}

Supongamos ahora que la temperatura del fluido TF aumenta (función paso):

$ t=0\qquad T_{F}>T

Esta variación, hace que el equilibrio anterior se rompa y por ende nos hace pensar en que pasa dentro del sistema. Para simplificar las cosas, pensamos en lo mas básico que tiene un sistema térmico: el calor. De ahí podemos deducir que una ecuación que puede describir el equilibrio en el sistema es:

Calor de Entrada - Calor de Salida = Grado de cambio calórico en el sensor

Suponemos que el calor de salida del sistema es nulo, ya que es el sensor el que esta inmerso en el fluido, así que nos interesa conocer el intercambio calórico entre el sensor y el fluido.

El calor de entrada, está definido como:

$ Q=hA(T_{F}-T)

En donde h es el coeficiente de transferencia de calor entre el fluido y el sensor.

El aumento calórico del sensor está determinado por:

$ mc[T-T(0^{-})]

Nos interesa es el cambio en el tiempo del aumento calórico del sensor, es decir la tasa de aumento del contenido calórico del sensor, ésto estará dado por:

$ mc\frac{d}{dt}[T-T(0^{-})]

Definiendo:

$ \Delta T=T-T(0^{-})
y
$ \Delta T_{F}=T_{F}-T_{F}(0^{-})

Tenemos, reemplazando en la ecuación de equilibrio:

$ hA(\Delta T_{F}-\Delta T) = mc\frac{d}{dt}\Delta T

o, lo que es mas ordenado:

$ \frac{mc}{hA}\frac{d}{dt}\Delta T+\Delta T = \Delta T_{F}


Que es una ecuación diferencial de primer orden, de esas que son muy fáciles de resolver  :mrgreen:

Recordemos que
$ \Delta T
es la variable que nos indica el cambio de temperatura del nuestro sensor inmerso en un fluido. Si resolvemos la ecuación diferencial, obtendremos una función, a la cual se le da el nombre de función de transferencia y es con esta función con la que se puede predecir el comportamiento de nuestra variable en función del tiempo y en relación a un cambio de temperatura, en este caso
$ \Delta T_{F}
.

Para resolver la ecuación diferencial, usamos la Transformada de Laplace, con la cual, se vuelve tan simple como lo es multiplicar y dividir. Tenemos entonces:

$ \tau[s\Delta T(s)-\Delta T(0^{-})]+\Delta T(s)=\Delta T_{F}(s)

En donde:

$ \tau=\frac{mc}{hA}

Recordemos, que en t=0-, teniamos que la temperatura del elemento sensorial es igual a la temperatura del fluido, por lo tanto:

$ \Delta T(0^{-})=0

Reemplazando, hallamos la función de transferencia, la cual relaciona la salida con la entrada de un sistema, en este caso nuestro elemento sensorial.

$ \frac{\Delta T(s)}{\Delta T_{F}(s)}=G(s)=\frac{1}{\tau s+1}

Si graficamos la función de solución de nuestra ecuación:



Vemos que ese numero
$ \tau
es muy importante, ya que justo cuando
$ t = \tau
, el valor de la función es el 63.2% del valor final. También nos da información acerca de lo confiable que es la medida respecto al tiempo, ya que, idealmente el sistema se estabilizará en un tiempo infinito, pero, como no podemos pasarnos toda una vida midiendo, basta con
$ t = 5\tau
para estar en un 90% del valor de estado estable.

Lo ideal, sería que todos los sistemas térmicos se comportaran de igual manera, pero siempre hay otras variables que afecten al sistema. Sin embargo éste modelo es aplicable a sistemas como los hornos, ya que describe muy bien el comportamiento dinámico de estos.

Cont...
« Última modificación: 09 de Abril de 2010, 10:35:04 por MLO__ »
El papel lo aguanta todo

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4583
Re: Controlador PID - Nivel Basico
« Respuesta #2 en: 13 de Abril de 2010, 03:10:11 »
Tiempo Muerto

En los sistemas reales, se tiene que los cambios dentro del mismo sistema, no son inmediatos, si no que toman cierto tiempo, debido a la inercia del mismo proceso. En el momento de efectuarse el aumento de temperatura
$ T_{F}>T
, hay un tiempo de espera hasta que el sistema comienza a reaccionar, es como una clase de juego en la reacción.

El tiempo muerto es parte integral del proceso y se debe tomar en cuenta en la función de transferencia de los procesos.

Matemáticamente modifica nuestra función de transferencia:

$ \frac{\Delta T(s)}{\Delta T_{F}(s)} = \frac{K_{1}e^{-t_{0}s}}{\tau s + 1}



Componentes de los sistemas de control

Como se mencionó en la Introducción, las operaciones básicas de un sistema de control son:
  • Medición
  • Decisión
  • Acción

Con los sensores y transmisores, se realizan las operaciones de medición en el sistema de control. En la actualidad hay muchos tipos de sensores que nos permiten tomar medidas muy confiables en precisión y exactitud, con muy buena resolución y algunos hasta ya vienen calibrados desde fábrica. La etapa de medición es muy importante, ya que la acción del controlador se calcula en función del error entre el valor de consigna (Set Point) y el valor medido en el proceso.

La etapa de acción la realizan los actuadores, que pueden ser válvulas, interruptores, TRIAC´s, etc. La señal de salida del controlador debe estar relacionada de alguna manera con el actuador en la variable de control. Por ejemplo: para un horno, la temperatura que genera la resistencia eléctrica, está relacionada con la cantidad de corriente que fluye por ella, gracias a esta relación se puede cuantificar que cantidad de calor se introduce al sistema en función de la cantidad de corriente que se permite circular por la resistencia.

En la etapa de la decisión, está involucrado el concepto propio del control, puede ser por el simple paso del valor de consigna o por un valor de razón proporcional, etc.

Tipos de controladores por retroalimentación

Como se ha venido mencionando, los controladores por retroalimentación, toman la decisión para mantener el punto de control o Set Point, según el cálculo de la salida con base en la diferencia que hay entre la variable de salida que se está controlando y el punto de consigna, diferencia a la que se denomina error.

Control Proporcional: Es el tipo mas simple de controlador y la decisión de control hace gala a su nombre, es decir: produce una acción de control proporcional al error. A mayor valor de error, mayor sera la señal de corrección, si el valor del error disminuye, la señal de corrección disminuirá también:

$ %OUT_{ctrl} = K_{p} \times error

Si aplicamos Laplace -para simplificar las cosas- :
$ %OUT_{ctrl}(s) = K_{p}E(s)

La función de transferencia del controlador proporcional corresponde a una constante:
$ K_{p}
.

Si aplicáramos esta señal a nuestra planta, nos quedaría un diagrama de bloques como el siguiente:



En donde:
  • X(s) : Set Point
  • Y(s) : Valor de Salida, con el cual calculo el error en función de X(s)
  • E(s) : Valor del error, resultado de la diferencia entre X(s) y Y(s)
  • G(s) : Función de la planta o del proceso

En este tipo de control, siempre va a haber error en estado estable, es decir, cuando el tiempo tiende a infinito y se supone que el proceso se estabiliza para el valor de Set Point fijado por nosotros. Esto es debido a la naturaleza del controlador, ya que es prácticamente imposible que el elemento de acción regrese al estado inicial, que fue justamente cuando se inició el error.

Matemáticamente, el error en estado estable se calcula con :

$ Error_{ss} = \lim_{s\rightarrow0}sE(s)

Este valor interesa mucho, ya que se supone que debería tender a cero (de hecho, eso es lo que se busca al implementar un controlador) cuando ha pasado el tiempo suficiente (unos
$ 5 \tau
).

En casos reales, la linealidad entre el error y la salida del controlador, solo existe en un rango determinado, al cual se le denomina banda proporcional.



Para los valores por fuera de ese rango, el valor de salida se saturará y no habrá señal de control mayor, por ejemplo: en el caso de la apertura de una válvula, si el valor ya está en el máximo, no hay forma de seguir abriendo mas la válvula, o si un actuador necesita mas voltaje del que suministra la fuente.

Cont...
« Última modificación: 13 de Abril de 2010, 03:13:46 por MLO__ »
El papel lo aguanta todo

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4583
Re: Controlador PID - Nivel Basico
« Respuesta #3 en: 15 de Abril de 2010, 03:10:56 »
Control Derivativo: En este tipo de control, el cambio de la salida del controlador respecto al Set Point es proporcional a la rapidez de cambio de la señal de error en el tiempo.

$ I_{sal} - I_{0} = K_{d} \frac{dE}{dt}

En donde:

  • I0 : Valor de salida del controlador para el valor de referencia, es decir, cuando el error es cero.
  • Isal : Valor de salida cuando el error E cambia a una tasa
    $ \frac{dE}{dt}
    .

Siguiendo el mismo método anterior, aplicamos transformada de Laplace para hallar la función de transferencia de un controlador derivativo:

$ I_{sal} - I_{0} = K_{d}sE(s)

La función de transferencia del controlador es derivativo, entonces:
$ sK_{d}
.

En esta parte, se puede apreciar la gran ventaja de trabajar con la transformada de Laplace, ya que la derivada de la función error en el tiempo, pasa a ser un producto aplicando la transformada.

Resulta lógico que este controlador no tiene efecto si el error permanece constante, por lo que no es muy utilizado solo, si no en combinación con el proporcional y el integral.

Control Integral: En este tipo de control, la tasa de cambio en la señal de salida del controlador respecto al tiempo es proporcional al error:

$ \frac{dI}{dt} = K_{i} E

Para hallar nuestra función de respuesta del controlador, integramos:

$ I_{sal} - I_{0} = \int^{t}_{0}\, K_{i} e\,dt

a la cual, le aplicamos Laplace -para variar-:

$ I_{sal} - I_{0} = \frac{1}{s}\, K_{i}\, E(s)

La función de transferencia del control Integral es, entonces:
$ \frac{1}{s} K_{i}

Este tipo de control es muy útil para atacar el error de estado estable u OffSet, ya que para valores constantes de error, la acción del controlador aumentará en el tiempo.



Este tipo de controlador no se utiliza solo, si no en combinación con los otros anteriores.

Controlador P+I+D : Es la combinación de la acción de los tres controladores anteriores en una sola función de transferencia. De esta forma obtenemos un controlador que no tiene desviación en el error y que disminuye la probabilidad a producir oscilaciones.

Tenemos entonces:

$ I_{sal} - I_{0}(s) = ( K_{p} + \frac{1}{s}K_{i} + sK_{s})E(s)

Como bien se aprecia en las ecuaciones anteriores, hay ciertas constantes de proporción en las funciones de transferencia para los diferentes tipos de controladores; si hallamos los valores adecuados para esas constantes, garantizaremos que la señal de acción del controlador sea la adecuada, que se mantenga dentro de los límites y por ende, el buen funcionamiento del proceso.

Cont...
El papel lo aguanta todo

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4583
Re: Controlador PID - Nivel Basico
« Respuesta #4 en: 20 de Abril de 2010, 01:45:37 »
Ajuste de controladores por retroalimentación

El ajuste del controlador es el procedimiento mediante el cual se adecuan los parámetros del controlador para obtener una respuesta específica del circuito cerrado. En el caso de un controlador Proporcional-Integral (PI) habría que ajustar los dos modos de control para obtener una respuesta óptima en nuestra respuesta. En el caso de un controlador PID habría que ajustar los tres modos, el Proporcional (la ganancia), el Integral (tiempo de reajuste) y el Derivativo (tiempo de derivación), es algo así como hallar el valor RGB óptimo para un color específico.

Lógicamente, el sistema tendrá un tiempo de respuesta ante los efectos del controlador, no es el caso del color RGB, que se tendrá una respuesta inmediata. Aún con esa demora en la reacción (que puede ser de horas según el sistema) el ajuste por realimentación es muy utilizado.

Para hallar estos ajustes vamos a recurrir a un método llamado Método de la curva de reacción del proceso.

Para aplicar este método, lo que se hace es obtener la curva de reacción de nuestro sistema a una entrada escalón y verificamos que el sistema sea de orden 1. Como bien vimos anteriormente, el sistema térmico, va a presentar una respuesta típica de un sistema de orden 1 -no todos los sistemas presentan este tipo de respuesta- o al menos se va a acercar bastante.



Hay unas formulas que se aplican para calcular los valores de las constantes:


$ R= M/T

Estas fórmulas son empíricas y se las debemos a Ziegler y Nichols. Hay restricciones para el uso de estas ecuaciones en relación a la razón existente entre el tiempo muerto y la constante de tiempo del sistema. Si el valor de la razón entre estos dos valores está fuera de un rango de 0.10 y 1.0, no se debe usar éste método y es mejor pensar en otro  :mrgreen:

Para construir un controlador basta con un amplificador operacional configurado de la siguiente manera:



En donde tendríamos:

$ K_{P} = \frac{RI}{R+RD}

$ K_{D} = RD \times CD

$ K_{I} = \frac{1}{RI \times CI}

Si queremos digitalizar nuestro controlador, hay que tener en cuenta que ya no se estaría trabajando en tiempo continuo, si no que hay de por medio un tiempo entre la toma de una muestra y otra de nuestra variable, a este tiempo se le denomina Tiempo de Muestreo e influye en el comportamiento de nuestro controlador.

Su influencia radica en el concepto de frecuencia, ya que, si el tiempo con el que muestreo la señal es muy prolongado, la señal que obtendré no será la real, si no que estará modificada su frecuencia. Para saber a que tiempo se debe muestrear se usa un teorema denominado Teorema de Nyquist, que en sí nos determina cuanto debe ser la frecuencia mínima de muestreo en función de la frecuencia de nuestra señal a muestrear.

Matemáticamente se debe recurrir a una transformada para que nos facilite mas las cosas a la hora de diseñar. Esa transformada es la transformada Z. Esta transformada Z es en si, una transformada de Laplace de la señal muestreada mediante una función impulso.



Ya en la realidad, se tiene es una función escalonada, ya que el valor del último muestreo se mantiene hasta el siguiente.

Para trabajar en tiempo discreto, se debe entonces, discretizar la ecuación del controlador. Una forma sencilla y rápida es hacer una aproximación de las partes derivativa e integral. Para la parte derivativa, se aproxima a la diferencia de dos puntos y para la parte integral, se aproxima a la suma trapezoidal. Estas aproximaciones hacen que se sume un error a nuestro controlador.

Tenemos entonces:

$
m(kT) = K \left\{ e(kT) + \frac{T}{T_{i}} \sum_{h=1}^{k} \frac{e((h-1)T)+e(ht)}{2} + \frac{T_{d}}{T}[e(kT)-e((k-1)T)] \right\}

en donde:
  • T  : Tiempo de muestreo
  • Ti : Tiempo integral
  • Td : Tiempo derivativo
  • K  : Constante proporcional
  • k  :  0,1,2,....
  • e() : error
  • m() : salida del controlador

Para simplificar toda esa ensalada, se recurre a la transformada Z, al aplicarla y operar, se tiene:

$
M(z) = K_{p}\left[1 + \frac{T}{T_{i} (1-z^{-1})} + T_{d}\frac{(1-z^{-1})}{T} \right]E(z)

En esta ecuación se hace mas clara la influencia del tiempo de muestreo en la sintonización del controlador.

Cont...
El papel lo aguanta todo

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4583
Re: Controlador PID - Nivel Basico
« Respuesta #5 en: 28 de Abril de 2010, 02:22:49 »
Bueno ... ahora si pasamos a la parte de montaje ....

La idea es hacer el controlador para un horno, en mi caso, voy a usar un antiguo horno a gas, al cual le voy a adaptar unas resistencias eléctricas.

Para la caracterización del sistema, tenemos que generar una señal escalón de entrada de temperatura y tomar los datos durante un tiempo. Esto implica que debemos activar las resistencias eléctricas durante un tiempo y tomar los datos de temperatura respecto al tiempo. La curva de respuesta del sistema, debe acercarse mucho a la curva que vimos que corresponde a un sistema de primer orden.

Para el controlador, voy a definir algunos requisitos hardware, los cuales podrán modificarlos a gusto:

  • Pantalla LCD
  • Teclado
  • Reloj DS1307
  • Sistema de control de Fase (optoacoplador + TRIAC + Detector de cruce por cero)
  • Módulo de adquisición analógico (LM35 + Termocupla)

Para el actuador voy a utilizar control de fase, también se podría hacer por PWM, con lo cual habría que fijar un duty cycle mínino de unos 17mS.

El horno en cuestión, va a alcanzar como máximo unos 500°C, por lo que voy a usar una termocupla tipo J como sensor de temperatura, pero en el diseño también esta la parte para conectar un LM35, con el cual se podrá medir un máximo de 150°C (como para un sistema pequeño), para cambiar entre un sistema y otro, se usa un jumper de selección.

El esquemático:



La PCB:



Adjunto el .pdf con la PCB.

El teclado lo voy a construir solo con 5 teclas:



Las funciones del controlador (por ahora) son:

  • Ingreso del Set Point de temperatura: La temperatura a ingresar, no puede ser menor a la temperatura real del horno
  • Ingreso del tiempo de encendido: Luego de alcanzado el valor del SetPoint de temperatura.
  • Controlar: Inicia el control PID para la temperatura del horno.
  • Modo Termómetro: Permite medir la temperatura del horno y controlar en lazo abierto la potencia de las resistencias.

   

El modo TERMOMETRO es para la toma de datos cuando ingresemos el escalón de temperatura. Se puede controlar en porcentaje la potencia de las resistencias eléctricas. Normalmente el escalón corresponde a un 10% o 20% del valor total de la potencia. En este modo de trabajo también se visualiza el tiempo transcurrido. (Lastimosamente en la simulación los números grandes no salen como deben salir :( )

Unas fotillos del sistema:





Los transistores y algunas resistencias están en SMD. He reforzado con estaño las pistas correspondientes al control de potencia por si acaso, aún no he probado la carga -no he tenido mucho tiempo-.

Cont...
El papel lo aguanta todo

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4583
Re: Controlador PID - Nivel Basico
« Respuesta #6 en: 09 de Mayo de 2010, 13:11:01 »
Bien ..... para la parte de programación, debemos tener claro el proceso que se va a realizar.

Como se vio anteriormente, hay que calcular el error para poder aplicar el algoritmo PID; el error lo definimos como la diferencia que hay entre el valor de consigna (Set Point) y el valor que esta midiendo el sensor.

Para el caso nuestro, el valor "real" de la temperatura será el valor medido por el canal analógico. En el caso de los conversores AD de los microcontroladores, no son muy estables, por lo que hay que filtrar la señal para que la medida sea mas confiable. Para ello hacemos uso de un filtro muy sencillo de implementar: Moving Average o de media móvil.

A pesar de su simplicidad, el filtro de la media móvil es óptimo para una tarea común como puede ser la reducción de un ruido fortuito mientras retiene una respuesta de paso muy bien definida. Esto hace que este filtro predomine en el campo de las señales codificadas en el dominio del tiempo, con la posibilidad de separar una banda de frecuencias de otra. Relacionado con el este tipo de filtro se puede encontrar la media móvil Gaussiana, de Blackman y de múltiple-paso. Estos confieren una mejor ejecución en el dominio de la frecuencia, con un mayor gasto del tiempo de CPU. Como su propio nombre indica, el filtro de la media móvil opera mediante el promedio de un número de puntos de la señal de entrada para producir cada punto de la señal de salida. En una formula matemática queda como:

$ y[i] = \frac{1}{M} \sum_{j=0}^{M-1} x[i+j]

Como es lógico, a mayor numero de muestras, mas confiable será la medida.

En código, quedaría mas o menos así:
Código: C#
  1. const int8 NumeroMuestras = 100;
  2. int16 ADCBuffer[NumeroMuestras];//Usamos 10 bits de resolucion para la conversion
  3.  
  4. ...
  5.  
  6. int16 FiltroADC(void)//................................................................................................Filtro ADC
  7. {
  8.         int8 i=0;
  9.         int16 Sumatoria=0;
  10.         float Resultado;
  11.  
  12.         set_adc_channel(0);
  13.         memset(ADCBuffer,0,sizeof(ADCBuffer));
  14.         for(i=0;i<NumeroMuestras;i++)
  15.         {
  16.                 delay_us(50);
  17.                 ADCBuffer[i]=read_adc();
  18.         }
  19.  
  20.         for(i=0;i<NumeroMuestras;i++)
  21.                 Sumatoria += ADCBuffer[i];
  22.  
  23.         Resultado = Sumatoria/NumeroMuestras*0.0061428;
  24.         return((int16)(Resultado*100/0.41322));//Operaciones para pasar el valor digital a temperatura usando Termocupla J
  25. }

Para la parte del controlador, se tiene lo siguiente:

$ \frac{M(z)}{E(z)} = a + b (1-z^{-1})^{-1} + c (1-z^{-1})

con:
$ a = K_{p} \\ b = \frac{K_{p} \times T}{T_{i}} \\ c = \frac{K_{p}\times T_{d}}{T}

Recordemos que:
$ X(z) = Z[x(t)] = Z[x(kT)] = \sum_{k=0}^{\infty} x(kT)z^{-k}

Con: T = Tiempo de muestreo y k = 0,1,2 ....

Definimos en el código:
Código: C#
  1. //Los valores de a, b y c, se deben calcular segun el sistema
  2. const float a = 21.0494;
  3. const float b = 0.327;
  4. const float c = 338.69;
  5.  
  6. ......
  7.  
  8. struct BytesPID
  9. {
  10.         float rT;  //Valor del Set Point
  11.         float eT;  //Valor del Error
  12.         float iT;  //Valor del termino Integral
  13.         float dT;  //Valor del termino Derivativo
  14.         float yT;  //Valor real
  15.         float uT;  //Valor de salida del controlador
  16.         float iT0; //Valor del termino integral en t0
  17.         float eT0; //Valor del termino del error en t0 
  18. }PID={0,0,0,0,0,0,0,0};

Para implementar el código del controlador, la forma mas sencilla es en al configuración en paralelo, es decir, se calcula cada término por separado y luego se suman.



Código: C#
  1. //Valores para los limites de disparo para el control de fase
  2. const float MAX = 30.0;
  3. const float MIN = 115.0;
  4.  
  5. void ControlPID(int16 SetPointT)//...................................................................................Controlador PID
  6. {
  7.         PID.yT = FiltroADC();
  8.         PID.rT = SetPointT;
  9.         PID.eT = PID.rT - PID.yT;//Calculo el error
  10.  
  11.         PID.iT = b*PID.eT + PID.iT0;//Calculo el termino integral
  12.         PID.dT = c*(PID.eT - PID.eT0);//Calculo el termino derivativo
  13.         PID.uT = a*PID.eT + PID.iT + PID.dT;//Calculo de la señal de control
  14.  
  15.         if(MIN-PID.uT/10<MAX)//Ajuste de valores MAX y MIN para el control de fase
  16.                 CtrlFase.Setting = MAX;
  17.         else if(MIN-PID.uT/10>MIN)
  18.                 CtrlFase.Setting = MIN;
  19.         else
  20.                 CtrlFase.Setting = (int8)((MIN - PID.uT/10));
  21.  
  22.         PID.iT0 = PID.iT;
  23.         PID.eT0 = PID.eT;
  24. }

Como el actuador es un TRIAC, tenemos también un detector de cruce por cero.
Código: C#
  1. #define on                              output_high
  2. #define off                             output_low
  3. #define toggle                          output_toggle
  4. #define subida                          1
  5. #define bajada                          0
  6. #define AnchoPulso                      200
  7. #define gate_triac                      pin_c0
  8.  
  9. ...
  10.  
  11. struct BytesFase
  12. {
  13.         int8 Setting;
  14.         int1 Flanco;
  15.         int8 IntsTimer;
  16. } CtrlFase={0,0,0};
  17.  
  18. ....
  19.  
  20. #int_CCP2
  21. void ZeroCross_isr(void)
  22. {
  23.         if(CtrlFase.Flanco==subida)
  24.         {
  25.                 enable_interrupts(INT_TIMER0);
  26.                 setup_ccp2(CCP_CAPTURE_FE);
  27.                 CtrlFase.Flanco = bajada;
  28.         }
  29.         else
  30.         {
  31.                 enable_interrupts(INT_TIMER0);
  32.                 setup_ccp2(CCP_CAPTURE_RE);
  33.                 CtrlFase.Flanco = subida;
  34.         }
  35. }
  36.  
  37. #int_TIMER0
  38. void FaseCtrl_isr(void)
  39. {
  40.         CtrlFase.IntsTimer++;
  41.         if(CtrlFase.IntsTimer>CtrlFase.Setting)
  42.         {
  43.                 on(gate_triac);
  44.                 delay_us(AnchoPulso);
  45.                 off(gate_triac);
  46.                 CtrlFase.IntsTimer=0;
  47.                 disable_interrupts(INT_TIMER0);
  48.         }
  49.         set_timer0(0);
  50. }

Recordemos que con el control de fase, a mayor tiempo que nos demoremos en disparar el TRIAC, la potencia será menor y visceversa.

Normalmente, los TRIAC's se disparan de los 30° a los 180°.


El ángulo de disparo es, en sí, la espera que hay desde el cruce por cero y el momento en el que se dispara el TRIAC para que conduzca. Si la frecuencia de red es de 60Hz, tenemos:

$ t (\frac{\pi}{6}) = 1,4mS \\ \\ t(\pi) = 8,3mS

Con el timer 0 configurado a 8 bits, podemos obtener desbordes de 51,2uS, por lo que, podemos hacer el ajuste de escala de la siguiente manera:

$ MIN = \frac{8,3mS}{51,2\mu S} = 162 \\ MAX = \frac{1,4mS}{51,2\mu S}= 27

Ya en la realidad, se ajusta los valores para no trabajar tan cerca al límite del valor del cruce por cero, además que en la interrupción hay mas código y por ende el valor calculado no sera 51,2uS exactamente.

El controlador arrojará valores entre
$ -\infty
y
$ \infty
, por lo que hay que poner limites tanto a la parte superior como a la inferior del rango de trabajo, esto se hace con los if(). El dividir entre diez es solo el ajuste de resolución para el controlador (ese valor es de un control para otro horno), es decir, es un factor de relación entre el rango de salida del controlador con el rango de entrada del actuador.

Hay que seleccionar bien el TRIAC para que no se caliente mucho. En mi caso, las resistencias son de 1100W y van a 110V, por lo que la corriente que debe manejar el TRIAC será de 10A. He comprado un TRIAC trabaja con 50A, así que espero que no haya problema; la verdad me sorprende que venga en un TO220, por lo que es mejor colocar un disipador.

« Última modificación: 09 de Mayo de 2010, 20:55:16 por MLO__ »
El papel lo aguanta todo

Desconectado estudiante2011

  • PIC10
  • *
  • Mensajes: 2
saludos y espero ayuda
« Respuesta #7 en: 04 de Abril de 2011, 20:32:30 »
hola saludos espero alguien me de una pequeña o gran ayuda sobreo lo siguiente, te un regulador buck que su entrada varia entre 15.3 V y 18.7, la salida regulada es a 14 puesto que va directamente a carga baterias, estoy un poco enrredado puesto que necesito implemetarle un control PI, y la verdad no se por donde comenzar, el diseño del regulador ya lo tengo pero lo diseñe con solo con el voltaje de 18.7 y supongo que tiene que variar el ancho de pulso para el ciclo de servicio del switch, alguien que me pueda dar una gran arientadota al respecto se los agradeceria bastante

Desconectado elcontrolero

  • PIC10
  • *
  • Mensajes: 2
Re: Controlador PID - Nivel Basico
« Respuesta #8 en: 07 de Septiembre de 2011, 14:46:41 »
MLO el circuito CRUCE X CERO lo conectas al secundario del trafo???

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4583
Re: Controlador PID - Nivel Basico
« Respuesta #9 en: 07 de Septiembre de 2011, 16:12:25 »
Hola.

Si, los terminales TR1 y TR2, van conectados al secundario de un transformador.

Saludos
El papel lo aguanta todo