control pid y control de fase

hola a todos, tengo un proyecto en la universidad el cual consiste en la implementacion de un controlador PID, para el control de la temperatura, la idea es utilizar una resistencia para el calor y un ventilador para el enfriamiento mientras que para la señal de re-alimentacion utilizo un sensor de temperatura LM35.

los puntos que hay que lograr son los siguientes:

1.- tomar lectura de la temperatura.(listo)
2.- controlar la fase para la resistencia de corriente alterna.(liso)
3.- controlar la velocidad del motor de corriente directa(aun no pero es sencillo con el PWM)
4.- implementar el PID y calcular Kp,Ki y Kd.(aun no por eso lo he publicado)

la resistencia trabaja con 120v 60Hz, por lo tanto para controlar la cantidad de calor que produce es necesario el control de fase, para esto he investigado sobre el uso de los timer y las interrupciones del arduino uno, aqui dejo el enlace para los timer

http://www.avrfreaks.net/forum/tut-c-newbies-guide-avr-timers?name=PNphpBB2&file=viewtopic&t=50106

en mi parte yo no he utilizado la libreria TimerOne para el uso de los timer del arduino, si no que he usado las intrucciones que vienen en el datasheet del atmega328 como tambien he leeido el articulo de NickGammon sobre las interrupciones.

dejare aqui algunas de las intrucciones que utilice en el codigo para los timer:

OCR1A = valos con el que se compara constantemente el valor del timer.
TCNT1 = enterga el valor del timer
TCCR1B =registro en el cual se puede configurar la pre-escala, poner en stop etc.
TIMSK1 = habilita las interrupciones de comparacion, es decir, si TCNT1 = OCR1A se activa una interrupcion, tambien habilita la interrupcion de desborde del Timer.

por lo tanto yo he utilizado una pre-escala de 256, de manera que un semiciclo se ejecuta en 520(valor que se le asigna a OCR1) unidades del timer(convirtiendolo a tiempo esto es igual a 8.33 milisegundos).

entonces podemos decir que 0=100% de la energia que se entrega a la carga y 520 = 0% ,
ya que entre mas se tarde el timer (TCNT1) en alcanzar el valor de OCR1A,el angulo de disparo sera mayor y por consecuencia el angulo de conduccion sera menor.

entonces me gustaria saber si alguien me pudiera guiar para implementar o adaptar el controlador pid y tambien como ajustar los valores de Kp,Ki y Kd, por lo que he investigado seria un controlador PID discreto, lo cual lo hace un poco mas sencillo el calculo de la salida de control.

dejare mi codigo, imagenes de los circuitos de disparo y deteccion de cruce por cero,un archivo pdf donde se va construyendo un el codigo para un PID se lo agradeceria mucho :slight_smile:

Guía-de-uso-PID-para-Arduino.pdf (512 KB)

control_PID_control_de_Fase.ino (2.76 KB)

la resistencia trabaja con 120v 60Hz, por lo tanto para controlar la cantidad de calor que produce es necesario el control de fase, para esto he investigado sobre el uso de los timer y las interrupciones del arduino uno, aqui dejo el enlace para los timer

Es una extraña forma de controlar una resistencia. Cuando se hace PID para controlar temperaturas se utiliza una simple onda cuadrada generada por un rele y el parámetro a regular es la frecuencia de la onda cuadrada. Los transitorios de transferencia térmica no demandan nada mas complicado, a menos que se trate de placas de muy poca masa.
Una de las primeras cosas que deberías hacer es gráficos de calentamiento y enfriamiento. Cuando se hace con una onda cuadrada se trazan estas curvas características a diferentes frecuencias.

Saludos

gracias por contestar! al decir que se utiliza una onda cuadrada que controla un relevador, supongo que enciende la resistencia y la apaga cierto tiempo, mientras que el control que tengo,por medio de un triac ajusto el angulo de disparo, y asi controlo la energia que le llega a la resistencia de la fuente CA. yo con esto controlo que tanto calienta la resistencia

saludos

LO que te pide Peter es que evalúes la respuesta al escalón de tu sistema.
Ejemplo si calientas obtendras algo asi

oh!, ya entiendo lo que se me ocurre para hacer eso es lo siguiente:

comienzo registrando la temperatura, tomando muestras cada 100ms con la resistencia a 0%, despues pongo la resistencia al 50% y me espero a que se estabilice o que se mantenga a una temperatura estable y despues grafico la respuesta del sistema

estoy en lo correcto?