Autor Tema: Ayuda PID controlador de temperatura  (Leído 1673 veces)

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

Desconectado kHeMaX

  • PIC10
  • *
  • Mensajes: 2
Ayuda PID controlador de temperatura
« en: 10 de Enero de 2018, 17:30:46 »
Buenas a todos, necesito que me ayuden a aclarar unas dudas para poder determinar si podre implementar un control PID de temperatura a mi proyecto.

Empiezo, mi proyecto usa el PIC18F4620 x2 con un crystal de 20 Mhz, uso el CCS 5.015. Como periféricos de salida tiene una patalla glcd 128x64, un buzzer y 2 triacs.
De entrada estoy usando el sensor DHT22, 3 pulsadores, 2 finales de carrera.
Es una incubadora de huevos y actualmente funciona bien con el control on/off. Un triac para un motor AC y otro para una lampara incandescente.

Ahora el problema que tengo es al incorporar el pid. Realice por separado en control de angulo de fase, hice los cálculos del pid y demas.
Este es el código del control de angulo de fase con el triac que funciona bien.

Código: [Seleccionar]
#include <18F4620.h>
 
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,PUT
#use delay(clock=20M)

int T;
int angle;

#INT_EXT2

 void intrb2(){
 if(angle <= 0){
   output_high(PIN_A2);
 } else if(angle >= 180){
   output_low(PIN_A2);
 }
 
   else if(angle<180 && angle > 0){
       output_low(PIN_A2);
       T= ((angle*10.0)/180);   
       delay_ms(T);
       output_high(PIN_A2);
   }   
 }   

void main()

      enable_interrupts(int_ext2);   
      ext_int_edge(2,L_TO_H);
      enable_interrupts(GLOBAL);

   while(TRUE)
   {
      //TODO: User Code
      angle=35;     
   }
}

Ahora soy consiente que el uso de delays en interrupciones no es lo adecuado y ahi es donde se genera mi problema. Al añadirlo a mi código principal:
1. Para que lo compile tengo que crear otra instancia de #use delay(clock = 20000000) pero congela todo mi proceso. Varia la intensidad de la lampara pero estropea todo los demás. (asumo que es pq realiza la interrupción cada 10mS).
2. He intentado usar una bandera en la interrupción para no crear la segunda instancia del delay y redireccionar sus operaciones a una función. El control de fase ya no funciona correctamente, pienso que es debido a que el código principal es un poco largo y interfiere con el disparo del Triac y obviamente no lo hace instantáneamente como es en el caso de que lo haga dentro de la interrupcion.

Alguien puede sugerirme alguna otra alternativa para su implementacion? Es una placa ya armada y no puedo añadirle ningún otro componente.

Quizás no fui muy claro con la explicación, espero que me puedan dar una mano, saludos!!

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re:Ayuda PID controlador de temperatura
« Respuesta #1 en: 11 de Enero de 2018, 12:52:06 »
Es una incubadora de huevos y actualmente funciona bien con el control on/off. Un triac para un motor AC y otro para una lampara incandescente.

Si funciona bien en modo On/Off y puedes detectar el paso por cero de la onda de alterna, entonces podrás poner un PID en marcha.

¿Puedes copiar el esquema eléctrico?

Un saludo.

Desconectado kHeMaX

  • PIC10
  • *
  • Mensajes: 2
Re:Ayuda PID controlador de temperatura
« Respuesta #2 en: 11 de Enero de 2018, 13:32:20 »
Gracias por responder!!

Si funciona bien en modo On/Off y puedes detectar el paso por cero de la onda de alterna, entonces podrás poner un PID en marcha.

Yo creía lo mismo, pero al añadir la interrupción ext2 del cruce por cero, el sistema deja de funcionar. Hasta el punto que no lee temperatura ni humedad. Y creo q es pq la interrupción ocurre cada 10mS.

Este es el esquema completo de mi circuito: https://ibb.co/fPqOj6


El Pic B, es para enviar datos a una pagina web. No realiza control solo recibe datos.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re:Ayuda PID controlador de temperatura
« Respuesta #3 en: 12 de Enero de 2018, 06:15:38 »
Hola kHeMaX,
Ese detector de paso por cero es un poco raro. El colector debería estar conectado a Vcc.

Además solo vas a detectar el semiciclo positivo, no el negativo. Con un H11AA1 o similar (que tiene 2 diodos en antiparalelo) podrías detectar los dos flancos.
Otra solución es estimar por tiempo el comienzo del flanco negativo. Si lo ajustas bién no tendrás problemas, pero te va a dar trabajo programarlo y ajustarlo.

Otra cosa importante es que en una interrupción no debes poner nunca un delay_ms(). Tienes que buscar otra forma de temporizar sin delay. Por ejemplo con otra interrupción temporizada.

Yo lo haría con interrupciones temporizadas cada 1ms sincronizadas con el cruce por cero. Así podrás conseguir hasta 10 niveles diferentes de potencia de salida. Son pocos niveles, pero suficientes para que funcione el PID.
Vas contando interrupciones con un contador descendente de 10 a 1. La activación del triac la tendrás que hacer en un valor del contador o en otro dependiendo de la potencia de salida. Cuando el contador llegue a cero, vuelves a subirle a 10.


Un saludo.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re:Ayuda PID controlador de temperatura
« Respuesta #4 en: 12 de Enero de 2018, 13:47:17 »
Hola Picuino, el detector de paso por cero es correcto, por supuesto falta conectar el colector a Vcc, pero por otro lado, mira que antes del optoacoplador existe un rectificador de onda completa, por lo que es capas de detectar ambos flancos.

Por otro lado, el usar un control de cruce por cero, con una lámpara incandescente, pues no es de mi agrado, ya que dichas lámparas tienden a durar mucho menos con este tipo de control, y esto se debe a los picos de corriente que debe de soportar el filamento al iniciarse su conducción con una tensión distinta de cero. De mi parte, lo que haría sería un control de ciclo completo, por ejemplo si deseo la mitad de potencia, me saltearía un ciclo completo de la onda, o sea activaría la lámpara ciclo por medio, o cada 2 ciclos me saltearía uno para una potencia del 33%, etc.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re:Ayuda PID controlador de temperatura
« Respuesta #5 en: 13 de Enero de 2018, 19:19:05 »
Agregaria sin meterme mucho   :D que el pic tiene interrupciones con entradas tipo schmitt trigger con lo que podrias ahorrarte el inversor schmitt (40106).

Saludos


 

anything