TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: J.C en 29 de Junio de 2007, 09:15:05

Título: Control PID para controlar la temperatura
Publicado por: J.C en 29 de Junio de 2007, 09:15:05
Hola a todos quisiera saber si alguien a trabajado con sensores de temperatura... a ver para que tengan una idea, necesito controlar la temperatura en 37.5*C, solo se puede ir por arriba 1*C y por abajo 1*C... el problema es que la temp es muy inercial y por lo que estuve viendo sobre controles lo mejor es implementar un PID o un P... ahi viene el lio como implemento el control PID con el software del PIC16F73, ya que poner una pastilla externa que haga eso aumentaria el costo... si alguien me pudiera ayudar con el tema se lo agradeceria mucho o por lo menos que me diga donde hay informacion o ejemplos sobre eso... saludos a todos J.C
Título: Re: Control PID para controlar la temperatura
Publicado por: jfh900 en 29 de Junio de 2007, 14:14:13
En San Google (patrón de los algoritmos perdidos) puedes encontrar bastantes cosas:

http://www.secyt.frba.utn.edu.ar/gia/SDC12.pdf

http://ww1.microchip.com/downloads/en/AppNotes/00532c.pdf

http://ww1.microchip.com/downloads/en/AppNotes/00964A.pdf (AN964 Implementing a PID Controller on PIC16F684)

http://ww1.microchip.com/downloads/e.../CE019_PID.zip

http://www.electro-tech-online.com/micro-controllers/21513-pid-temperature-controller-pic16f876.html

http://www.convertronic.net/index.php?option=com_content&task=view&id=1001&Itemid=22

http://iaci.unq.edu.ar/Materias/Cont.Digital/Apuntes/ApuntePagina/15-PID.pdf

Etc, etc, etc


Un saludo
Título: Re: Control PID para controlar la temperatura
Publicado por: Chaly29 en 30 de Junio de 2007, 11:55:30
Hola J.C, una preguntita!! es para una incubadora de bebes?, porque tuve un caso muy similar a lo que vos estás solicitando (eran incubadoras) y lo solucione sin el uso de PID, consiguiendo que la temperatura se mantuviera dentro de los parámetros que solicitas.

Aparte an pedido un monton de requisitos más, doble sensor de temperatura, alarmas de todos los tipos, bakup con baterías, control por PWM (largo) en cruce por cero, e incluso una protección por hardware de exceso de temperatura.

Un saludo.

Atte. CARLOS.

Título: Re: Control PID para controlar la temperatura
Publicado por: J.C en 03 de Julio de 2007, 09:46:20
Efectivamente Chaly29 se trata de una incubadora pero no es para bebes, sino para pollitos... y me imagino que apesar de la diferenciael trabajoconlatemperatura sea muy parecido es por eso que quisierasi esta entus manos que meorientes sobre como dar solucion al preblema...
Título: Re: Control PID para controlar la temperatura
Publicado por: Chaly29 en 03 de Julio de 2007, 10:18:10
Hola J.C, ya me parecía que no era para bebes, la temperatura que comentas era un poco elevada  :mrgreen:

No hay problema con gusto te orientaré.

Tal como te comenté los programas que yo e realizado trabajan por medio de una rampa, son bastante sencillos de entender y relativamente fáciles de programar (mucho más que un PID), bueno pasemos a lo que nos interesa:

La rampa o curva de potencia aplicada a la resistencia eléctrica está dividida en 4 secciones bien definidas:

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=17869.0;attach=4789)

Entre 0°C y el punto A: En la primera sección la potencia se mantiene al máximo (100%) ya que la temperatura es muy baja (la incubadora recién se enciende), hasta que alcanza el punto A, el cual se determina mediante la práctica (más fácil que por cálculos) según la inercia que posea el sistema al incremento de temperatura del mismo. El punto sabe estar 2 o 3 grados antes de la temperatura deseada.

Entre A y temperatura deseada: Alcanzado el punto A la potencia aplicada a la resistencia se decrementa de manera lineal hasta conseguida la temperatura deseada, la potencia que el sistema entrega a la resistencia en el punto de la temperatura deseada (37.5°C) es levemente superior a la que necesitaría la resistencia para mantener una temperatura constante dentro de la incubadora.

Entre temperatura deseada y B: Superada la temperatura deseada a la resistencia se la mantiene con una potencia tal que solo le permite poseer una temperatura propia no mayor a 5°C a la temperatura deseada, de esta manera se consigue que la inercia ofrecida por la resistencia se vea considerablemente reducida, una ves que llegamos al punto B se le quita toda potencia a la resistencia (exceso de temperatura que rara ves se consigue), el punto B solo está 1°C por encima de la temperatura deseada

Sobre el punto B: Sobre este punto se corta toda entrega de potencia hacia la resistencia.

El formato de las curvas se consigue muy facilmente en la practica lográndose realizar sistemas muy estables (e logrado sistemas con errores de solo +/-0.6°C) no importando cual sea la temperatura ambiente.

Cualquier duda o consulta no tendré problemas en responderlas.

Espero te sea de ayuda.

Atte. CARLOS.

Título: Re: Control PID para controlar la temperatura
Publicado por: J.C en 03 de Julio de 2007, 10:31:02
Bien pero hay un problema la temperatura es muy inercial como logro que se mantenga en su sitio o lo mas proximo posible a el... 
Título: Re: Control PID para controlar la temperatura
Publicado por: Chaly29 en 03 de Julio de 2007, 10:49:12
Hola J.C, con este sistema la temperatura varía indefectiblemente, pero se mantiene dentro de los parámetros deseados, ese también era mi gran miedo (en una incubadora de bebes solo se permite +/-0.5°C) y de esta manera siempre lo mantengo dentro de los limites aunque muy rara ves se escapa asta 0.6°C de la temperatura deseada.

Yo te recomendaría que lo prueves antes de hacer el PID, no pierdes nada ya que el circuito electrónico es el mismo para ambos casos, pero la programación te aseguro es mucho más sencilla de esta manera.

Fíjate que pasada la temperatura deseada yo le dejo una pequeña potencia (potencia residual) a la resistencia, de esta manera la inercia se reduce enormemente, ya que la mayor causante de esta inercia es la propia resistencia.

Un saludo.

Atte. CARLOS.
Título: Re: Control PID para controlar la temperatura
Publicado por: J.C en 04 de Julio de 2007, 08:52:42
Hola chaly29
Ayer no pude terminar de ver la informacion porque se me cayo el enlace, pero me dio un error cuando estaba accediendo a tu pagina en geosite... es por eso que te pido si no es mucha molestia que me publiques algo de codigo en el foro o si puedes enviarmelo al correo jcvf82@gmail.com me seria de gran ayuda saludos y muchas gracias J.C
Título: Re: Control PID para controlar la temperatura
Publicado por: Chaly29 en 04 de Julio de 2007, 11:29:05
Hola J.C, pues no creo que logres entenderlo mucho, ya que yo programo en asembler, por eso mismo trato de explicarte como es el principio de funcionamiento y que tú logres realizarlo en C.

Así mismo si deseas puedo subirte una parte del código, no todo ya que por cuestiones comerciales no tengo esa libertad.

Un saludo.

Atte. CARLOS.

Título: Re: Control PID para controlar la temperatura
Publicado por: J.C en 04 de Julio de 2007, 16:29:20
Ante nada muchas gracias chaly29 por el interes y la ayuda... empezare a tirar codigo en C y a ver que me sale... de todas formas si por casualidad habeis hecho un algoritmo y me lo pudieras pasar me serviria igual... de todas formas muchas gracias por la ayuda...  ah y en cuanto termine te paso el codigo fuente para que lo pruebes a ver que te parece... Saludos J.C
Título: Re: Control PID para controlar la temperatura
Publicado por: Marttyn en 20 de Octubre de 2007, 17:08:44
hola! estaba buscando informacion de un control pid para mantener una temperatura de unos 70ºC en un sistema y me encontre con esto... la idea de chaly29 me pare mucho mas sencilla que hace un control pid, ya uqe yo tengo la libertad de que mi temperatura puede variar hasta 5ºC sin problemas. chaly, entendi el funcionamiento de tu manera de llegar hasta la temperatura deseada, pero no comprendo como logro mantener esa temperatura... es decir, como encuentro el duty del PWM para mantener esa temperatura?
salu2
Título: Re: Control PID para controlar la temperatura
Publicado por: HH_HOZ en 21 de Octubre de 2007, 00:34:58
J.C. yo he implementado varios controlodores PID para motores de temperatura. El algoritmo en si no es dificil lo que es importante y debes considerar en sintonizar tu controlador para que sea lo mas efectivo posible es decir encontrar los valores de Pi Pd P. tengo por ahi unos documentos de como hacer la sintonizacion de los controladores pID pero no los encuentro..... espero poder encontrarlos y te los paso. pero basicamente consiste en encontrar la respuesta atu sistema es decir tiempos de calentamiento a diferentes niveles de potencia...... tambien para encontrar la frecuencia de muestreo..... por lo general 1/10 e tu tiempo max de respuesta mecanica.
Título: Re: Control PID para controlar la temperatura
Publicado por: Marttyn en 21 de Octubre de 2007, 02:06:06
Hola HH_HOZ!
te agradeceria un monton que me echaras un cable con esto del PID... si te digo la verdad casi no recuerdo como se deriva, y definitivamente no recuerdo como se integra  :oops: por lo que implementarlo en C y entender lo que estoy haciendo me resulta complicado... entiendo que el control pid consta de 3 componentes, entiendo que la suma de esos componentes me deberia dar un valor que puedo traducir a un duty de PWM, incluso entiendo que estos 3 componentes dependen cada uno de una constante que es la que habria que determinar en la practica... pero no se como programar el pic para que a travez de un valor del ADC haga "calculos" y me devuelva un duty  :8}
no existe alguna libreria que determinando las constantes y dandole el valor del adc te devuelva el valor del duty? encontre ESTO (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1999&ty=&dty=&section=&NextRow=&ssUserText=pid) ( CE019 - Proportional Integral Derivative (PID) controllers & closed-loop control) en microchip... pero el codigo C que incuye es tan enrevesado que me marea, tiene un monton de constantes, que a su vez hace referencia a otras constantes y estas son el producto de la resta de la raiz cubica de todas a la vez....  :D :D :D
ademas esta TAN comentado el codigo, que en vez de esclarecer confunde...

por cierto! puedo implementar un control pid en un pic de la familia 12F? estos son capaces de derivar e integrar?
Título: Re: Control PID para controlar la temperatura
Publicado por: QIQE en 21 de Octubre de 2007, 17:41:47
hola he estado unos dias desconectado ya habeis hablado un poco de los pid aqui os pego una rutina de cálculo de un PID que la verdad es que funciona bastante bien, aunque mi experiencia no  a sido por duty cycle de continua sino de alterna +- como mi sistema tenia que alimentado en alterna, disparaba un triac antes o despues no me enrollo mucho mas esta es la formulilla del pid.
Código: [Seleccionar]
     Error_actual=(ref-temp2);
     uT=uT+(Cte_Propor*Error_Actual)+(Cte_Int*(Error_actual-(Cte_Der*(Error_actual-Ultimo_Error))));
     Ultimo_Error=Error_actual;

todas las variables las usé float pero tb se pueden usar double... todo depende de las precisiones o necesidades de tu sistema..., ante todo no uses int por que puedes tener valores negativos en Error_actual uT... y demas variables.

si tienes alguna duda pregunta hasta luegooo
Título: Re: Control PID para controlar la temperatura
Publicado por: Marttyn en 21 de Octubre de 2007, 21:25:38
si, qiqe... una duda...
que seria uT? por que sumas todo el calculo a uT ("uT = uT + ....")?
con uT que hago? es decir, entre que valores varia? o es un porcentaje de error? como lo aplico vamos...  :mrgreen:
gracias! salu2

EDITO:
por cierto... si un control Proporcional Integral Derivativo es la suma de estos controles...
Código: C
  1. Cte_Propor*Error_Actual
seria el control proporcional...

pero en
Código: C
  1. Cte_Int*(Error_actual-(Cte_Der*(Error_actual-Ultimo_Error)))
el control derivarivo e integral estan calculados al mismo tiempo? o como es el tema?
segun jfh900:

En un sistema discreto la integral se calcula como la suma de los productos de la función por el incremento de la variable independiente. Para la derivada en un sistema discreto es la diferencia en la función dividido por el incremento de la variable independiente.

en tu formula no logro discernir que es cada cosa  :z)