Autor Tema: Como oriento la programacion para este proyecto con PIC?  (Leído 1439 veces)

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

Desconectado jalei

  • PIC10
  • *
  • Mensajes: 4
Como oriento la programacion para este proyecto con PIC?
« en: 14 de Enero de 2016, 12:34:04 »
Hola a tod@s,

Estoy haciendo por gusto un pequeño proyecto, en el que se controla la temperatura de un horno industrial para hacer cositas de ceramica, que es una de mis pasiones aparte de la electronica.

Como entradas al PIC, tendria un sensor de temperatura (un termopar para 1200 grados) que lleva una tarjeta intermedia que me saca un voltaje de 0 a 5 voltios proporcional a la temperatura.

Tambien tengo que poner un teclado, y un display LCD para intriducir los diferentes parametros de temperatura vs tiempo, entre otros parametros.

Y como salidas, aunque a priori lo mas facil es montar una salida PWM que varie el duty cycle de las resistencias electricas del horno, hay que tener en cuenta que estas van alimentadas en alterna, por lo que a un regulador de potencia hecho con un TRIAC le he adaptado un potenciometro digital para que modificando el valor del trimmer obtenga una mayor o menor potencia de calefaccion. De esta forma si pongo el potenciometro digital a 0, practicamente alimento las resistencias a 0 voltios, y si lo pongo a tope, las alimento a la tension de la red electrica. El potenciometro digital esta comunicado al PIC por SPI.

Ademas, varios parametros de configuracion del horno (por ejemplo la calibracion del termopar, o las rampas de temperatura vs tiempo) quiero guardarlas en la EEPROM para que al quitar la alimentacion se queden guardadas y no tener que introducirlas por el teclado cada vez que quiero hacer una hornada nueva.

El control de la temperatura ha de ser muy preciso, por lo que he pensado en controlarlo mediante metodo PID. Por eso, X veces por segundo he de medir la temperatura, hacer una serie de calculos, y modificar el valor del potenciometro digital a traves del protocolo SPI.

Hasta aqui todo muy facil, porque se puede hacer mediante un programa sencillo que al arrancar lea los valores de la EEPROM, permita modificarlos mediante el teclado y el LCD si se desea, y que posteriormente al apretar un boton ponga a funcionar el ciclo temperatura-tiempo seleccionado hasta que se acabe. Es decir, que hacerlo de forma secuencial es algo muy facil.

Pero el problema es que muchas veces, a mitad de una hornada aparece la necesidad de modificar parametros. Por ejemplo, es facil que con determinado tipo de arcillas estes subiendo o bajando la temperatura muy rapidamente y que acabes con todas las piezas rotas por contracciones o expansiones bruscas. Por eso, quiero hacer el programa para que en tiempo real puedas modificar todos los parametros.

Es decir, que digamos que hay que realizar en paralelo varias tareas a la vez. Por un lado permitir el manejo del teclado y la pantalla LCD (para modificar datos o grabarlos en la EEPROM), y por otro lado hacer X veces por segundo el ciclo de control PID (lo ya comentado de leer la temperatura, hacer una serie de calculos, y finalmente modificar la salida del potenciometro digital).

Mis conocimientos de programacion son bastante justos, y a primera vista parece que lo mas facil es simplemente hacer el programa para manejar el teclado y el LCD (usaria la tecnica polling, osea leer el estado del puerto B en el que conectaria el teclado con las resistencias pull-up conectadas, en un bucle cerrado, y cuando detecte la pulsacion de una tecla, hacer lo que tenga que hacer, que puede ser mostrar otra cosa en el LCD, o grabar un dato modificado en la EEPROM, por ejemplo). Entonces ajustando la interrupcion por desbordamiento del TIMER0, hago que cada cierto tiempo el programa deje de hacer lo que estaba haciendo, y pase a ejecutar la funcion de control PID.

Mi pregunta es la siguiente: Si uso esta tecnica que comento (que es a primera vista lo que parece mas logico y facil de hacer), ¿no existe el problema de que por ejemplo al producirse la interrupcion y el programa pase a ejecutar la funcion de control PID, se quede a medias lo que estaba haciendo y haya problemas? Por ejemplo, imaginaros que estoy justo en un momento determinado mandandole al display informacion, y a mitad se produzca la interrupcion. En ese caso supongo que saldrian cosas raras por el display, o directamente no haria nada al haberse interrumpido la transmision. ¿No?

Una opcion seria anular las interrupciones mientras estoy mandando informacion al display, y una vez acabado de mandarla volver a activarlas. Pero entonces tendria el problema de que el tiempo que pasa entre cada vez que se efecuta la funcion de control PID ya no tiene porque ser constante, por lo que el calculo de la parte integral y derivativa del control PID es mucho mas dificil de hacer.

¿Como orientariais la programacion del PIC en este proyecto? ¿Recomendais alguna forma de actuar? ¿Quiza hay informacion sobre programacion de este tipo en algun libro o documento que se pueda conseguir facilmente?

Desde ya muchas gracias por todas las respuestas.

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re:Como oriento la programacion para este proyecto con PIC?
« Respuesta #1 en: 14 de Enero de 2016, 12:49:46 »
Hola, con una explicación tan clara y detallada de lo que quieres vas a encontrar ayuda seguro en este foro, de solo leerlo una vez ya quiero ayudarte.

El primer tema es que cuando envías datos al LCD y aparece una interrupcion, no pasa nada, o, mejor dicho, generalmente no pasa nada, cuando vuelves de la interrupcion, se continúa enviando los datos al LCD. El LCD tiene un buffer y hasta que no se activa cierta señal, los datos no se graban en él. Yo me despreocuparía por esa parte.

Otro tema es el PID. El PID discreto o digital depende para su buen funcionamiento de que el tiempo de muestreo sea constante, entonces esa interrupcion debe tener la mayor prioridad. Tampoco hay que desesperarse ya que el tiempo que toma el cálculo del PID es muy bajo, por lo que no deberías notar retrasos en otras tareas.

espero sirva el comentario y, por favor, publica los avances.

Saludos
-
Leonardo Garberoglio

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Como oriento la programacion para este proyecto con PIC?
« Respuesta #2 en: 14 de Enero de 2016, 12:58:44 »
Por otro lado... No se si seria necesario usar un circuito externo para manejar el TRIAC.

Simlpemente podes hacer tu PWM junto con la interrupcion de tu PID. Ademas necesitarias una entrada de linea al PIC.

Como te dijeron el calculo del PID es corto, y si ademas agregamos que la temperatura tiene una gran inercia, es decir no varia excesivamente rapido para el micro entonces lo hace aun mas pasable.

Lo que si se complica un poco es el tema de las temperaturas y rampas. no por crear estas, ya que simplemente seria una funcion lineal. El problema esta en lo que quieres implementar sobre "acomodar" la temperatura a mano en medio del proceso, ya que todavia no se definio por donde va a seguir. es decir, suponete que la rampa iba de 100 a 200 grados y vos en la mitad de la rampa lo pusiste a 250.. que hace a partir de aca ? Se cumple un tiempo y vuelve a la rampa con los valores guardados?, o sigue fijo en 250 ya descartando los valores de las rampas. Es necesario guardar estos valores? (los ingresados manualmente de esa forma), hay muchas cosas que se me ocurren.

Creo que dentro de todo lo mas complicado para hacer seria el PID.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re:Como oriento la programacion para este proyecto con PIC?
« Respuesta #3 en: 14 de Enero de 2016, 13:00:34 »
Necesitas multitarea.

La forma más sencilla es:
1.- Una interrupción por timer0 activa cada cierto tiempo unos bits de 'step' a 1
2.- Un bucle infinito va pasando por todas las tareas que hay que hacer.
3.- Cada tarea comprueba si su bit de 'step' está a 1.
     En caso afirmativo, se ejecuta la tarea y cambia el bit de 'step' a 0

Para lo que quieres hacer es suficiente.
El bit de 'step' debe activarse 100 veces por segundo para el teclado.
Para el PID, es mejor activarlo justo cada inicio del periodo de PWM.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re:Como oriento la programacion para este proyecto con PIC?
« Respuesta #4 en: 14 de Enero de 2016, 13:02:15 »
Como dice Killer, si defines bien lo que quieres, el resto es más sencillo.

Saludos.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Como oriento la programacion para este proyecto con PIC?
« Respuesta #5 en: 15 de Enero de 2016, 14:49:25 »
Si vas a programar tu microcontrolador en ensamblador, recuerdo que ante una interrupción tienes que guardar varios registros como acumuladores y otros.

Al final de la interrupción debes recuperar dichos valores.

Las variables globales se mantienen sin alterarse. Una manera de programar es por estados de máquinas. Es decir aplicaciones que se ejecutan digamos por decirlo así en paralelo. (En realidad para realizar procesamiento en paralelo debes tener por lo menos 2 procesadores, lo que se hace con microcontrolador simple es ejecutar una parte pequeña de cada tarea sin interferir la una con la otra y en el menor tiempo posible)

Te recomiendo que veas el siguientes videos:


« Última modificación: 15 de Enero de 2016, 14:52:28 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32


 

anything