TODOPIC

Otros Microcontroladores / Dispositivos programables => ** PROYECTOS ** => Mensaje iniciado por: pic16f88A en 23 de Febrero de 2013, 19:10:22

Título: PID_PARA_HORNO
Publicado por: pic16f88A en 23 de Febrero de 2013, 19:10:22
Hola a todos!!
En primer lugar felicitar a todos los integrantes y gente que dirige el foro.
Bueno, pues vi el PID que hizo Suky y estoy bastante interesado en hacer algo muy parecido, para controlar el
modelo que viene en ISIS 7_Proteus (Oven). Para ello he abierto este nuevo tema, ya que no me queda muy claro la obtención del modelo de
la planta de dicho horno, es decir la función matemática que describe dicho proceso. He visto que hay varios métodos;
Como ziegler nichols, aplicando escalon de "X" voltios y viendo como responde el sistema.
Mediante matlab a través de la herramienta IDENT,  ya que se pueden extraer los tiempos y temperatura del gráfico interactive.
Pero lo que realmente me interesa es saber como lo hizo Suky.
Una vez que lo consiga, lo iré compartiendo con vosotros de una forma clara y bastante extendida que no de lugar a dudas.
Muchas gracias
El objetivo final es llegar a lo que hizo suky en su dia, pero explicado detalladamente!!
Título: Re: PID_RTOS
Publicado por: Picuino en 23 de Febrero de 2013, 19:52:15
Puedes sintonizar el PID con Ziegler-Nichols.

http://www.atp.ruhr-uni-bochum.de/rt1/syscontrol/node64.html

Saludos.

Edito:
https://controls.engin.umich.edu/wiki/index.php/PIDTuningClassical
Título: Re: PID_RTOS
Publicado por: Picuino en 23 de Febrero de 2013, 19:58:14
Otra forma es sintonizar el PID "a mano".

1º.- Aumentas el control Proporcional poco a poco. Verás como el error disminuye y la velocidad de respuesta aumenta.
     Si el resultado es aceptable aquí terminas.

2º.- Si el sistema comienza a ser inestable, añades control Derivativo para estabilizarlo y que no oscile. Así puedes seguir aumentando el control proporcional.
     Si el resultado es aceptable aquí terminas.

3º.- Si la velocidad es correcta, pero tienes todavía error (la temperatura finalmente obtenida no es la deseada) puedes aumentar el control Integral para que el error sea cero.
     Si el sistema se hace algo inestable, pasas al punto 2º y aumentas el control derivativo un poco.


Siempre tienes que tener en cuenta las no linealidades de un horno:

1-  Por mucho que quieras el horno no va a calentar más que una potencia máxima. Aunque el error aumente, el horno no va a dar más potencia.

2- El horno puede calentar, pero no puede enfriar. Si te pasas de temperatura, el enfriamiento será mucho más lento que el calentamiento.


Saludos.
Título: Re: PID_RTOS
Publicado por: pic16f88A en 24 de Febrero de 2013, 11:03:47
Muchas Gracias por este primer aporte!!
El método que seguiré para obtener el modelo de la planta será el de Ziegler-Nichols.
El cual esta explicado en esta pagina:
http://www.atp.ruhr-uni-bochum.de/rt1/syscontrol/node64.html
Esta en ingles pero el navegador google chrome te la traduce al castelllano que da gusto verlo
Título: Re: PID_RTOS
Publicado por: pic16f88A en 24 de Febrero de 2013, 11:08:43
El primer paso será montar el circuito con el ISIS_7_PROTEUS.
https://www.dropbox.com/sh/psew1lyxtiqejd4/gO9AY5GLOD/oven.DSN
Aqui dejo un enlace del programa, con el montaje del horno configurado, para aplicarle un salto en la referencia (set point).
A partir del gráfico interactivo podremos aplicar el método de Ziegler-Nichols.
Título: Re: PID_RTOS
Publicado por: Picuino en 24 de Febrero de 2013, 14:40:36
El método de Ziegler-Nichols sirve para calcular cómo sintonizar el controlador PID, pero no sirve para obtener el modelo de la planta.


(http://upload.wikimedia.org/wikipedia/commons/thumb/2/2d/PID.svg/500px-PID.svg.png)

Saludos.
Título: Re: PID_RTOS
Publicado por: pic16f88A en 24 de Febrero de 2013, 15:10:30
Alguien me puede explicar como obtener el modelo de la planta, de la forma que lo hizo suky?¿?¿
Por mucho que lo miro, no logro entender de donde salen los valores de la planta.

Aquí esta el post :http://www.todopic.com.ar/foros/index.php?topic=26780.0
Título: Re: PID_RTOS
Publicado por: Picuino en 24 de Febrero de 2013, 15:28:56
Lo que hace Suky es obtener una aproximación al modelo del horno mediante el comando IDENT de Matlab.

Un horno real tiene una función de transferencia no lineal con saturaciones, ganancia no lineal que depende de la temperatura, retardos, etc.

¿Qué es exactamente lo que quieres obtener una aproximación o el modelo real?

Para sintonizar un PID no es necesario conocer el modelo de planta sólo una aproximación. Y si utilizas el método manual, ni siquiera eso.

Saludos.
Título: Re: PID_RTOS
Publicado por: pic16f88A en 24 de Febrero de 2013, 15:45:36
Si me puedes explicar ambas aproximaciones te lo agradecería...
Asi  la gente puede emplear dos metodos.
Una vez que lo  haga lo subiré con explicaciones detallas de como obtener el modelo de la planta.
Que se anime la gente a colaborar!!! que muchos visitan, pero solo Picuino aporta cosas, muchas gracias !!!
Título: Re: PID_RTOS
Publicado por: Picuino en 24 de Febrero de 2013, 15:54:17
Una de las aproximaciones de Ziegler-Nichols se basa en la respuesta escalón:

(http://www.atp.ruhr-uni-bochum.de/rt1/syscontrol/img1242.gif)

No intenta obtener el modelo de planta, sino sintonizar el PID.

El comando IDENT no lo conozco bien, pero creo que te devuelve una aproximación lineal al sistema a partir de la respuesta escalón. No la conozco bien, pero en este caso creo que la aproximación que haga será un poco pobre. Sólo servirá como aproximación para sintonizar el PID. Para eso ya tienes el método de Ziegler-Nichols.

¿Por que quieres obtener el modelo de la planta?

No te preocupes por los aportes que si alguien tiene algo más que aportar lo hará.

Saludos.
Título: Re: PID_RTOS
Publicado por: Picuino en 24 de Febrero de 2013, 16:13:56
El comando IDENT no lo conozco bien, pero creo que te devuelve una aproximación lineal al sistema a partir de la respuesta escalón. No la conozco bien, pero en este caso creo que la aproximación que haga será un poco pobre.

Rectifico. Parece que Suky consiguió una aproximación muy buena con un sistema de dos polos:

En ident, seleccione oe221 logrando una identificación del 99.65%. El modelo del sistema resultante para Ts=0.1s:
GZ= (0.6566z+0.6145) / (z^2-1.809z+0.8178)
Aplicando D2C determinamos el modelo de sistema continuo:
GS= (-0.0027s+140.4) / (s^2+2.011s+0.9723)

Por lo menos a la subida de temperatura. La bajada de temperatura tendrá otro modelo distinto.

Saludos.
Título: Re: PID_RTOS
Publicado por: pic16f88A en 25 de Febrero de 2013, 09:16:38
Bueno aquí muestro como se ha realizado la sintonización del PID.
Espero vuestra respuesta! ;)
Título: Re: PID_RTOS
Publicado por: Picuino en 25 de Febrero de 2013, 11:29:05
No estoy seguro de que Kp esté bien calculado.

La constante del sistema Ko se puede calcular de la siguiente manera:

   Ko = (Vref / Vsense) · (Tr / Td)

donde
  
   Tr = tiempo de subida (raise) = 13.5 segundos
   Td = tiempo muerto (dead)  = 1 segundos

   Vref = tensión escalón aplicada a la planta = 2 voltios
   Vsense = tensión escalón generada por el sensor de temperatura  = ???


Saludos.
Título: Re: PID_RTOS
Publicado por: pic16f88A en 25 de Febrero de 2013, 11:51:23
LA TENSIÓN GENERADA POR EL SENSOR DE TEMPERATURA EN CADA MOMENTO SE CORRESPONDE CON LA TEMPERATURA DE SALIDA, YA QUE LA SENSIBILIDAD ES DE 1 V/ºc, DE TODAS FORMAS SI NO ES ESO LO QUE ME PREGUNTABAS, ARRIBA TIENES DISPONIBLE EL CIRCUITO EN PROTEUS PARA SIMULARLO.
Título: Re: PID_RTOS
Publicado por: Picuino en 25 de Febrero de 2013, 13:31:52
En ese caso a mi me sale:

   Ko = (Vref / Vsense) · (Tr / Td)

   Ko = (2 / 251) · (12.5 / 1) = 0,0996


Ahora calculamos las ganancias:

   Kp = 1.2 · Ko = 0,1195      (Proporcional)

   Ki = 2 · Td = 2                   (Integral)

   Kd = 0.5 · Td = 0.5            (Derivativo)


Igual que tus cálculos.

Edito:
Modifico un error: 13.5 por 12.5

Saludos.
Título: Re: PID_RTOS
Publicado por: Picuino en 25 de Febrero de 2013, 13:43:50
Ahora hay que tener en cuenta que un horno es un sistema no lineal.

A bajas temperaturas, la velocidad de subida de la temperatura es muy alta y la velocidad de bajada de la temperatura es muy baja.
Por el contrario a altas temperaturas, la velocidad de subida de la temperatura es baja y la velocidad de bajada de la temperatura es alta.

Este trabalenguas significa que la ganancia Kp debe ser baja a bajas temperaturas para evitar el sobrepulso (Ziegler-Nichols sintoniza el PID para obtener un pequeño sobrepulso)
Por el contrario a altas temperaturas Kp debe ser más alta.

Para solucionar esto te recomiendo utilizar tres técnicas:

1.- Limitar la ganancia Integral a un pequeño rango de error. Cuando el error es grande (por ejemplo mayor de 50ºC) la ganancia integral se hace cero y el valor integral también se hace cero.

2.- Utilizar alimentación Feed-Forward. Esto significa colocar en la entrada del horno la tensión que consigue la temperatura deseada (se puede hacer con una pequeña tabla) y luego añadir el control PID.

3.- Utilizar ganancia Kp variable con la temperatura de referencia, aumentando Kp a medida que aumenta la temperatura. Si sintonizas Kp para 30ºC y sintonizas Kp para 330ºC puedes hacer una simple recta para que Kp pase por los dos valores.


Creo que deberías cambiar el nombre del hilo a "PID para horno". Un RTOS es un Real Time Operating System y en este hilo no se trata.

Saludos.
Título: Re: PID_PARA_HORNO
Publicado por: Picuino en 25 de Febrero de 2013, 16:24:47
Para sintonizar Kp y Kd de forma fina a diferentes temperaturas te recomiendo comenzar con las ganancias que te indica Ziegler-Nichols y a partir de ahí
seguir las indicaciones de ajuste del PID a mano que te puse en otro post:

Otra forma es sintonizar el PID "a mano".

1º.- Aumentas el control Proporcional poco a poco. Verás como el error disminuye y la velocidad de respuesta aumenta.
     Si el resultado es aceptable aquí terminas.

2º.- Si el sistema comienza a ser inestable, añades control Derivativo para estabilizarlo y que no oscile. Así puedes seguir aumentando el control proporcional.
     Si el resultado es aceptable aquí terminas.

3º.- Si la velocidad es correcta, pero tienes todavía error (la temperatura finalmente obtenida no es la deseada) puedes aumentar el control Integral para que el error sea cero.
     Si el sistema se hace algo inestable, pasas al punto 2º y aumentas el control derivativo un poco.



Saludos.
Título: Re: PID_RTOS
Publicado por: Picuino en 25 de Febrero de 2013, 18:01:45
LA TENSIÓN GENERADA POR EL SENSOR DE TEMPERATURA EN CADA MOMENTO SE CORRESPONDE CON LA TEMPERATURA DE SALIDA, YA QUE LA SENSIBILIDAD ES DE 1 V/ºc, DE TODAS FORMAS SI NO ES ESO LO QUE ME PREGUNTABAS, ARRIBA TIENES DISPONIBLE EL CIRCUITO EN PROTEUS PARA SIMULARLO.

Hay que añadir un sensor de temperatura que transforme la temperatura en tensión, mejor en el rango de 0 a 5 voltios para que el PIC pueda leerlo.

Saludos.
Título: Re: PID_PARA_HORNO
Publicado por: pic16f88A en 25 de Febrero de 2013, 18:10:39
No creo que haga falta, basta con colocar un divisor de voltaje de factor 100, de esa manera ya lo va poder leer el conversor analógico digital, directamente, no va superar los 5 voltios.
Título: Re: PID_PARA_HORNO
Publicado por: Picuino en 25 de Febrero de 2013, 18:31:11
He revisado el archivo para Proteus.
El modelo de horno no utiliza entrada analógica, sino digital. El calentador sólo puede encenderse o apagarse a tope (todo/nada).
Con ese funcionamiento no se puede estimar el PID con Ziegler-Nichols.

El modelo del sistema tendría que hacerse por el método de la función descriptiva:
   http://www.esi2.us.es/~fsalas/asignaturas/TS3IT07_08/apuntes.pdf
   Función descriptiva (http://www.google.es/url?sa=t&rct=j&q=funcion+descriptiva&source=web&cd=8&cad=rja&ved=0CFEQFjAH&url=ftp%3A%2F%2Fftp.unicauca.edu.co%2FFacultades%2FFIET%2FDEIC%2FMaterias%2FNolineales%2520Master%2FClase%25204%2Fclase4.pdf&ei=leErUYHAFsiEhQflpoGgDQ&usg=AFQjCNG1GaTDPupMl2edIHBCilB3gSNJZg&bvm=bv.42768644,d.ZG4)

Es un método un poco avanzado.


Yo ajustaría el PID a mano. Este horno parece tener muy poca "inercia térmica", de forma que no vas a tener sobrepulsos grandes.

Saludos.
Título: Re: PID_PARA_HORNO
Publicado por: Picuino en 25 de Febrero de 2013, 18:42:07
Otro sistema que se puede utilizar es encender la resistencia con PWM. De esta forma hay una entrada analógica (por ejemplo un valor de PWM entre 0 y 100) y entonces sí que se puede aplicar Ziegler-Nichols.

En cualquier caso el sistema es No-lineal y va a dar diferentes resultados a diferentes temperaturas.

Saludos.