uControl
Mayo 17, 2012, 03:42:31 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1] 2   Ir Abajo
  Imprimir  
Autor Tema: Proyecto - Control digital para horno de soldadura SMD  (Leído 19382 veces)
0 Usuarios y 1 Visitante están viendo este tema.
slick
PIC10F
*
Desconectado Desconectado

Mensajes: 20


« : Mayo 20, 2009, 05:22:15 »

EDITO: Enlaces Relacionados

http://www.ucontrol.com.ar/forosmf/montaje-superficial/componentes-y-herramientas-para-comenzar/
http://www.ucontrol.com.ar/forosmf/montaje-superficial/creacion-de-pcbs-metodo-de-un-novato/
http://www.ucontrol.com.ar/forosmf/programacion-en-c/pic24-y-c30-un-mundo-de-diversiones!-d/

Muy buen día tengan todos ustedes. Quiero plantearles aquí el proyecto en el que estoy trabajando, habiendo gente conocedora por aquí seguramente alguien podrá darme un par de ideas frescas. Aquí tienen un avance de lo que quiero lograr.

Introducción.

Existen muchas formas de soldar componentes SMD, que van desde usar un cautín de lápiz común, pasando por las pistolas y estaciones de aire caliente, hasta hornos y maquinas profesionales muy costosas y totalmente fuera del alcance de la gente común. El enfoque de este proyecto es apto para la mayoría de los hobbistas, ya que los materiales para la construcción de un horno para soldar se consiguen fácilmente.
En este proyecto trataremos la modificación de un horno tostador/gratinador, para convertirlo en un aparato apto para realizar el proceso de soldadura. La ventaja de este tipo de aparatos es que se encuentra disponible fácilmente en cualquier supermercado o tienda de electrodomésticos. Las modificaciones necesarias son básicamente agregar aislante térmico en el exterior del compartimiento del horno y por otra parte un circuito electrónico que permita un control relativamente preciso de la temperatura.

El proyecto se inicia a partir de que recibí estas placas, que mande a hacer:



Objetivos y metas a cumplir.
  • Diseñar un circuito que permita controlar la temperatura dentro del horno para seguir los perfiles de temperatura proporcionados por el fabricante de la soldadura.
  • En un principio pienso desarrollar el algoritmo del control PID mediante software, para controlar la temperatura.
  • Integrar una pantalla LCD en el circuito para visualizar datos relevantes.
  • Capacidad de almacenar datos del perfil térmico en una memoria EEPROM externa al microcontrolador.
  • Realizar un control de potencia usando dispositivos de estado sólido (Triacs y optotriacs).
  • Conexión serial con una computadora para monitorear o producir gráficas del proceso.
  • Diseño de un circuito impreso para el armado de un prototipo.
  • Integración de un RTOS (sistema operativo en tiempo real) para propiciar la modularidad en el software del controlador.

Descripción General del proyecto.
Este proyecto es realizado con una finalidad meramente didáctica, ya que existen dispositivos profesionales y especializados para realizar el proceso de soldadura. Sin embargo esta aplicación resulta interesante parra experimentar y llevar a la practica algunos temas. Mencionaré algunos de los que se tratarán para la realización del proyecto.
  • Control Proporcional Integral Derivativo (PID).
  • Análisis del control PID y análisis de la respuesta de la planta (en nuestro caso el horno).
  • Microcontroladores de la familia de 16 bits de microchip technology.
  • Interfaz I2C y SPI de los microcontroladores PIC24FJ64GA002
  • Control de periféricos como LCDs, teclas y  leds
  • Comunicación RS-232
  • Utilización de un RTOS, multitasking y comunicación entre tareas.

El corazón del proyecto será un control Proporcional Integral derivativo (PID) discreto, implementado como un software que se ejecuta en un micrcontrolador de la familia PIC24FJ de la empresa Microchip Technology. Adicionalmente, se dispondrá de un display LCD, interfaz serie, botones y leds. La retroalimentación de la temperatura se hará por medio de un termopar (thermocouple),  para realizar la interfaz de este elemento con el microcontrolador utilizaremos el circuito integrado MAX6675 el cual integra en un solo chip el convertidor A/D de 10 bits y los circuitos necesarios para realizar la medición de temperatura. Por otra parte los datos del perfil térmico se almacenarán en una memoria EEPROM serial.


Bueno, por ahora se me agota el tiempo, en cuanto tenga un rato sigo escribiendo un poco más. Agradecere cualquier comentario que puedan hacer Wink

« Última modificación: Enero 11, 2010, 10:41:12 por slick » En línea
ZeK005
Administrator
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 2475


http://www.GliderByte.com.ar


WWW
« Respuesta #1 : Mayo 20, 2009, 06:02:22 »

El otro dia estaba hablando precisamente de este tema con ATS&S por chat. Le comente que con un amigo queremos armar un horno por que comprar uno esta un poco fuera del alcance dado los elevados costos.
Ya esta todo casi listo, lo unico que nos hace falta es la parte de control... asi que este post viene al pelo. Cuando tengamos listos los otros detalles lo comparto con ustedes asi tenemos un Horno completito Wink
En línea

http://www.GliderByte.com.ar - Security Information and Development Team
Felixls
Moderador
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 2944



WWW
« Respuesta #2 : Mayo 21, 2009, 10:23:29 »

Me uno a la causa, desde hoy este va a ser mi próximo proyecto  rolleyes
En línea
slick
PIC10F
*
Desconectado Desconectado

Mensajes: 20


« Respuesta #3 : Mayo 22, 2009, 06:33:36 »

Hola muchachos, que bueno que hay otros interesados o con un proyecto similar, a ver si podemos compartir ideas.

Por si no lo viste y para ir anotando http://courses.cit.cornell.edu/ee476/FinalProjects/s2006/ki38/Webpage/index.html es con Atmel pero el principo es el mismo.

Si ATS&S, lo había revisado y me pareció excelente, pero la cosa es que quiero hacer mi propia controladora, tal vez sea reinventar la rueda, pero tengo el deseo de hacer algo por mi cuenta y en el proceso aprender lo que se pueda.  rolleyes

En mi caso pensaba, usar una LCD sencilla de 16 por 2 y reservar la tarea de graficar a una PC que este  conectada al controlador del horno, sobre todo por que acá donde vivo las pantallas gráficas son algo caras.

¿que piensan ustedes, puedes comentar algo mas sobre lo que estan desarrollando?

Me uno a la causa, desde hoy este va a ser mi próximo proyecto  rolleyes
El otro dia estaba hablando precisamente de este tema con ATS&S por chat. Le comente que con un amigo queremos armar un horno por que comprar uno esta un poco fuera del alcance dado los elevados costos.
Ya esta todo casi listo, lo unico que nos hace falta es la parte de control... asi que este post viene al pelo. Cuando tengamos listos los otros detalles lo comparto con ustedes asi tenemos un Horno completito Wink

Esto se pone bueno!!!  bang

Continuamos con la descripición del hardware (al menos este será el mío).

Características del microcontrolador PIC24FJ64GA002
  • Microcontrolador con RISC con 64 KB de memoria FLASH de programa y 8 KB de RAM.
  • Hasta 16 MIPS de velocidad, Oscilador interno con velocidades de 31 kHz a 8 MHz, y hasta 32 MHz con PLL de 4X.
  • Multiplicador por hardware de 16 x 16 ejecutandose cada ciclo de instrucción. Divisor por hardware  de 32-bit x 16-bit.
  • Juego de instrucciones optimizado para compilador.
  • Watchdog Timer con oscilador RC independiente.
  • Manejo de energia con varios modos: Run, Idle and Sleep modes. Cuenta con fuentes de reloj multiples e intercambiables, para un desempeño optimo  y bajo consumo de energia
  • Convertidor A/D de 10 bits con 10 canales y 500k SPS (500,000 muestras por segundo) y dos comparadores analógicos.
  • Disponibilidad de multiples interfases serie: Dos módulos UART con soporte para LIN bus y IrDA, con buffer FIFO de 4 niveles. Dos modulos SPI  y dos módulos I2C con soporte para modo maestro y esclavo.
  • Cinco timmers de 16 bits, hasta 5 modulos de Entrada/captura y 5 de Salida/comparación (PWM)
  • Reloj en tiempo real en hardware con calendario y alarmas, Parallel Master Port y generador de CRC programable.

He elegido el PIC24FJ64GA002 principalmente por las capacidades mejoradas que presenta sobre otros micros de la familia PIC18F. Por ejemplo, un  PIC18F4550 de 40 pines tiene una memoria RAM de  2,048 bytes, mientras que el PIC24FJ64GA002 en un práctico y compacto encapsulado DIP 28 tiene 8,192 bytes de RAM. Esto lo hace más apto para ejecutar un RTOS. Además cuenta con cosas que pueden ser muy útiles e interesantes para cualquier desarrollo como la tecnología PPS (peripheral pin select), resistencias PULL-UP o PULL-DOWN configurables, un generador de CRC y reloj-calendario en tiempo real.
Además de todas estas ventajas, si se necesita más poder de procesamiento están los dispositivos de la familia PIC24H que tienen mejoras en cuanto a velocidad, o los dsPIC33F. Todos estos dispositivos tienen arquitecturas y periféricos muy similares, lo cual facilita la migración del código.

Características del convertidor para termopar MAX6675.
  • Conversión a digital directa sobre  la salida de termopares de tipo K
  • Compensación de unión Fria
  • Interfaz simple compatible con SPI
  • Resolución de 12 bits   0.25°C
  • Detección de sonda abierta.

Herramientas de desarrollo.
Las herramientas necesarias para desarrollar este proyecto son:
  • Una PC (obvio  Grin).
  • Entorno MPLAB IDE de microchip.
  • Compilador C30 para PIC24 y dsPIC.
  • Osciloscopio y/o analizador lógico.
  • In-Circuit Debugger (ICD2), PICKIT2 o en su defecto un buen programador.
  • Los componentes, un protoboard y adaptadores SOIC 8 a DIP (para el MAX6675, solo hay en encapsulado SOIC)

Yo tengo una placa a medio rutear con el PIC24FJ64GA002, pantalla LCD HD44780 de 16x2, 2 memorias EEPROM que solicite como Samples de Microchip, adaptador de niveles con MAX3232 y fuente de alimentación de 3 y 5 volts. Si gustan la puedo subir para que la veamos.

También tengo algunas partes del software ya escrito, pero ahora no estoy en casa, por lo que no puedo subir nada de lo que comento. Ya veremos si tengo un tiempo mañana.
En línea
slick
PIC10F
*
Desconectado Desconectado

Mensajes: 20


« Respuesta #4 : Mayo 24, 2009, 01:09:21 »

Hola, aqui tienen el PCB sobre el que estoy trabajando, disculparán que no haya renderizado todos los componentes, pero acabo de formatear (más bien cambiar) mi disco duro y no he terminado de poner todo como lo tenía. La imagen muestra una versión en borrador de la placa principal del control del horno. Tiene unas dimensiones aproximadas de 10 x 10 cm.

.

Carácterísticas del Hardware.
  • Conectores de alimentación - Entrada de corriente directa, recomendado para 9 volts, con diodo de protección y con opción de de conexión por cable desnudo (terminales con tornillos) o con plug estándar.
  • Fuente de alimentación - Con salidas de 5 y 3.3 volts.
  • Conector ICSP (RJ-12) - Permite la conexión de la placa con el depurador ICD2, o un programador por medio de un conector modular.
  • Microcontrolador PIC - El PIC24FJ64GA002 será el encargado de supervisar y controlar el proceso mediante el software que ejecuta.
  • Pantalla LCD - Muestra información sobre el proceso temperatura, perfiles, etc.
  • Botones y Buzzer - Interfaz básica, que junto con el LCD, permite controlar la tarjeta cuando opera en modo autonomo (sin conexión al PC).
  • EEPROMs seriales (I2C) - Proveen espacio de almacenamiento para guardar algunos perfiles de soldadura y la configuración de la tarjeta de control.
  • Conexión del termopar - Utilizar un termopar tipo K.
  • Conexión para puerto serie - Por defecto la comunicación se realizará a 9600/8N1.
  • Conector de Expansión - Dispone de las señales de los buses I2C, SPI, UART, además de las señales para controlar los triacs. En este conector se debe conectar la  PCB  de control de potencia o cualquier periférico que se pueda diseñar a futuro.

El hardwaré es algo sencillo, solamente los componentes mínimos para hacer que el microcontrolador pueda comenzar a funcionar, comunicarse con la PC. Adicionalmente estan incluidos el MAX6675 (en este momento esta contemplado para colocarse por la cara bottom), las memorias I2C (las que usaré serán 24FC1025), la pantalla LCD y los botones. El arreglo de resistencias que se observa justo arriba de la pantalla permite asegurarnos de que los niveles lógicos que se entregan a la pantalla se interpreten correctamente, dado que la pantalla funciona con 5 volts y el microcontrolador con 3 volts. Se trata de 6 resistencias Pull-Up, conectadas a la fuente de alimentación de 5  volts. Estas funcionan de manera conjunta con las salidas Open-Drain del PIC24, como un convertidor de niveles de 3.3 a 5 volts. Hay que destacar que las salidas open drain son configurables mediante un registro especial por el software y si observan con detenimiento verán que los botones no tienen resistencias Pull-Up/Pull-Down, debido a que el PIC24 tiene resistencias Pull-Up/Pull-Down también configurables por software. bang

La pantalla LCD se montará sobre soportes metálicos (separadores) y la conexión con la PCB de control se realizará mediante tiras de pines hembra/macho. Debajo de la pantalla se observa un transistor que permite controlar el backlight de la pantalla mediante software, ya sea solo encendido/apagado o mediante PWM para cambiar su intensidad. También colocado bajo la pantalla esta un preset para controlar contraste.

Pendientes del diseño de hardware.

Falta crear dos componentes críticos para la tarjeta, uno de ellos es el MAX6675 y el otro es el conector modular RJ-12 de 6 pines.  He buscado en las librerías del eagle y hay conectores RJ-12, pero ninguno que corresponda con el "layout" que tienen los mios (son más compactos, lo cual me parece bien). Tengo también un jack similar de 8 pines  (RJ-45) el cual coincide con la libreria stuart.lbr encontrada en la página de descargas de Cadsoft. Voy a utilizar las distancias entre pines del conector como base para crear este componente, por que no tengo las especificaciones exactas. Aunque podría usar este conector de 8 pines para ahorrarme el trabajo de crear la pieza, ocupa mucho espacio, por lo que descarto la idea.

Hay que mandar las interfaces SPI, UART e I2C a los pines apropiados (mediante el peripheral pin select), porque las he movido al diseñar el PCB. Estoy tratando de armarme de paciencia para rutear la placa por una sola cara con el mínimo de puentes. Cuando tenga creados los nuevos componentes veremos si se puede.

EDIT: Por último al escribir esto veo que me olvidé de varias cosas, como poner las resistencias Pull-Up para el bus I2C y conectar los pines de dirección de los chips de memoria EEPROM, además los pines de I2C NO SON REMAPEABLES, por lo que los pines del módulo I2C1 estan en los pines 17 y 18 SOLAMENTE Y NO SE PUEDEN MOVER.
  Idiota

Adjuntos al mensaje: Esquemas en eagle y png. Así como el PCB en eagle. A ver si alguien me ayuda a rutear cuando tenga todos los componentes, por que raras son las veces en las que puedo evitar poner puentes.  Cry

* control_horno.zip (138.51 KB - descargado 356 veces.)
« Última modificación: Mayo 24, 2009, 01:44:14 por slick » En línea
BrunoF
Moderador
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 696



« Respuesta #5 : Junio 27, 2009, 04:29:23 »

Hola. Estoy a punto de encarar un proyecto idéntico, y leí minuciosamente tus post. Espectaculares, aunque me urge una pregunta que no he leído y es qué material o contenedor pensás usar para el horno? alguna carcasa de horno eléctrico en deshuso por ejemplo? algo hecho a medidia desde cero?

Gracias...
En línea
slick
PIC10F
*
Desconectado Desconectado

Mensajes: 20


« Respuesta #6 : Junio 29, 2009, 02:31:09 »

Hola Bruno, me gustaría saber que piensas del enfoque que tengo. A mi me parece que el PIC24FJ64GA002 y FreeRTOS están algo sobrados para este proyecto y que se podría hacer con mucho menos. Pero siempre es bueno explorar otras áreas.

El horno que pienso usar es uno que compre especificamente para este fin (te quedo a deber la foto). Se trata de un horno (hecho en China) de la marca Taurus de 600W con dos elementos calefactores uno en la parte de arriba y otro abajo. Aunque las pruebas que he realizado me indican que tal vez ande un poco corto en potencia este horno, por que el perfil estándar normalmente pide una pendiente maxima de temperatura de hasta 3 o 4 grados/segundo. Estaba pensando en modificar el compartimiento del horno y forrarlo de aislante termico para permitir que el calentamiento sea más uniforme.

Avances en Hardware.

Al momento de escribir esto ya tengo la PCB diseñada y transferida al cobre mediante el metodo del transferencia de toner, falta atacar,perforar y armar, a ver cuando me doy un tiempo.

Carácterísticas y avances en el software.

Uno de los objetivos de este proyecto es crear librerías de software que puedan reutilizarse fácilmente en otros proyectos, ya sea que estemos usando un PIC24 con 64 KB de RAM o un dsPIC30F con solo 1024 bytes de RAM. Estos son algunos avances que tengo en el software del controlador:

  • Driver para LCD HD44780 (listo) - Depende del RTOS, ya que llama a vTaskDelay() para generar los retardos
  • Sistema de menus (pendiente) - Se requiere de un sistema de menus que permita navegar facilmente por las configuraciones, asi mismo debe tener un API consistente
  • Librería de dispositivos I2C (80% listo) - Utiliza una FSM (máquina de estados finitos) y las interrupciones para generar los mensajes con el formato apropiado para el bus I2C. Se comunica con las otras tareas usando el API de FreeRTOS mediante colas (queues).
  • Intérprete de comandos (50% listo) - Permitirá la interacción del usuario con el controlador, permitira ajustar los parámetros de control o cualquier otra configuración mediante el uso de comandos de texto simples que se introducen con ayuda de un emulador de terminal compatible con VT100 (mediante hyperterminal por ejemplo).
  • Algoritmo de control PID genérico (listo) - Se trata de una adaptación de una Application Note de Atmel que se encuentra en http://www.atmel.com/dyn/resources/prod_documents/doc2558.pdf. Aproveche que quería entender el algoritmo para hacer un poco de limpieza en el codígo original y cambiar algunos nombres de variables.
  • Driver MAX6675 (50% listo) - Este módulo de software se utiliza para leer el termopar por medio del MAX6675. Aunque teoricamente el código ya esta completo no lo he probado, y por eso lo pongo en 50%.
  • Driver para salida serial (40% listo) - Se trata del puente (o capa) que se ubica entre el puerto serie y cualquier tarea que quiera enviar datos por la UART del PIC. Opera mediante interrupciones y usa el API de freeRTOS

También hay otras cosas que se tienen que hacer o que son opcionales pero que no estarían nada mal.

  • Definir el formato de datos del pérfil térmico de la soldadura y como debe almacenarse en la EEPROM.
  • Crear o adaptar un sistema de archivos para la memoria EEPROM. He estado contemplado como una opción el MPFS (Microchip file system) usado en la implementación del Stack TCP/IP que ofrece microchip. De esta forma, los perfiles podrían guardarse como archivos de texto y podrían coexistir varios perfiles junto con otro tipo de datos en la memoria EEPROM.
  • Implementar una función printf que cumpla con las condiciones para sistemas multitarea (Reentrant and Thread-Safe). Aclaro que no se como se traduzcan estos términos. Esto es MUY IMPORTANTE por que la actual función printf y sprintf tienen problemas cuando se ejecutan con FreeRTOS por que ocupan mucho Stack.

Creo que básicamente eso es todo, pienso que voy como a la mitad del software necesario para que esto despegue. Pero una vez que termine de escribir todo esto, los proyectos siguientes deben ser mucho más sencillos. Si alquien quiere ver el soft o colaborar por favor contacteme para enviarlo y ponernos de acuerdo.

Por cierto, queria mostrarles una captura que tenía del interprete de comandos (que esta en etapa de pruebas) con el cual se manejaría este juguetito, pero no la encuentro  Cry será para la proxima.

En línea
BrunoF
Moderador
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 696



« Respuesta #7 : Julio 01, 2009, 05:19:06 »

Hola!

Perdoná la demora.

Te digo mis apreciaciones y las diferencias con mi "modelo". Yo ya empecé la programación, ya tengo lista la mitad del soft(empecé anoche...)

El problema mío con el PIC24FJ64GA002 es que no tengo uno. El más parecido que tengo es un PIC24FJ256-706(creo). Sino tengo muchos dspic30F6012 y dspic30f6014, entre otros, que me gustaría probar. Especialmente el dspic30F6012 que es mi principal candidado por ahora.

Lo que me hace dudar ahora, es que no puedo simular ningún dspic30F con el Proteus, por lo que opté de momento hacerlo con un 18F4550 que me gusta porque tiene USB...cosa que realmente me hace dudar porque yo por serie no lo haría. Tengo todas notebooks, y no tengo puerto serie en ninguna de ellas.

Con respecto al horno...yo compré un ATMA de 2x litros de capacidad, y anda perfecto! Lo compré para esto, pero creo que no lo voy a usar porque me da lástima debido a que la modificación es demasiado grande. Espero conseguir un horno eléctrico usado de dimensiones similares a menor precio.

Con respecto a TU horno, no tengo idea de cuántos litros es, pero te digo desde ya que si. Que 600 Watts es poco si querés permitirle al control PID que responda rápido. Los hornos de soldadura SMD que vi parecidos al que queremos hacer llegan hasta 330 grados centígrados. Eso significa que deben tener un resto bastante interesante de potencia para poder variar la temperatura rápido.

Yo tengo pensado equipar a mi futuro horno con dos resistencias, una por debajo y otra por encima, cada una de 2500W. Eso no quiere decir que vaya a usar toda su capacidad. Obviamente que la idea es estar sobrado para poder lograr cambios de temperatura(positivos) en poco tiempo.

Te comento lo que tengo pensado usar yo:

    Hardware:

    • Horno eléctrico con apertura frontal amplia: http://www.garbarino.com/productos/producto.php?codigo=48032 (acá lo compré yo...80 dólares nuevo);
    • 2 resistencias de material resistivo de 2500W c/u;
    • 2 relays de estado sólido para activar/desactivar las resistencias;
    • 2 termocuplas de tipo K;
    • 2 integrados MAX6675 para sensar las termocuplas;
    • 2 ventiladores metálicos para hacer descender la temperatura;
    • dspic30f6012 @30MIPS o PIC18F4550 @12MIPS para control, comando y comunicación;
    • LCD de 16x2 caracteres para mostrar datos relevantes;
    • Teclado para ingresar valores y perfiles de soldadura;

    Software:

    • (4)PWM para controlar tanto las resistencias como los ventiladores;
    • Ajuste de valor para el PWM de las resistencias, detectando cruce por cero y calculando la integral de al onda senoidal;
    • Control PID aplicados a las resistencias-termocuplas;
    • Control PID aplicados a los ventiladores-sensores de RPM;
    • Fuzzy logic aplicada a ambos items mencionados previamente;
    • Por ahora no RTOS(Real Time Operative System). Estuve sacando las cuentas y no creo que valga la pena implementarlo siendo que las resistencias funcionan con 220V AC @50Hz/60hz. Lo que hace que la velocidad de respuesta de las mísmas sea bastante pobre en efectividad real;
    • Posiblemente guardado de perfiles/historia en memoria EEPROM 24LC512;

    Diferencias con el tuyo que aprecio:

    Tengo pensado implementar los ventiladores para poder hacer descender la temperatura en menor tiempo;
    También implementaré un control Fuzzy Logic para que el sistema no quede oscilando cuando se encuentre en las cercanías del valor deseado.

    Un saludo.
    En línea
    darck_khronos
    PIC16F
    ***
    Desconectado Desconectado

    Sexo: Masculino
    Mensajes: 634

    Khronoscorp Systems


    « Respuesta #8 : Julio 02, 2009, 01:55:33 »

    Disculpen y por que no usar un pic de la Familia 18f y como medidor de temperatura un termopar ya que si usamos el lm35 se haria cliche jeje, y asi usar el adc y el pwm bueno esa es mi duda jeje
    En línea
    BrunoF
    Moderador
    PIC16F
    *****
    Desconectado Desconectado

    Sexo: Masculino
    Mensajes: 696



    « Respuesta #9 : Julio 02, 2009, 03:43:17 »

    No.Disculpame vos, pero se nota que no te tomaste siquiera el trabajo de ver cómo lo pensabamos hacer nosotros porque sino hubiese leído que...

    El corazón del proyecto será un control Proporcional Integral derivativo (PID) discreto, implementado como un software que se ejecuta en un micrcontrolador de la familia PIC24FJ de la empresa Microchip Technology. Adicionalmente, se dispondrá de un display LCD, interfaz serie, botones y leds. La retroalimentación de la temperatura se hará por medio de un termopar (thermocouple),  para realizar la interfaz de este elemento con el microcontrolador utilizaremos el circuito integrado MAX6675 el cual integra en un solo chip el convertidor A/D de 10 bits y los circuitos necesarios para realizar la medición de temperatura. Por otra parte los datos del perfil térmico se almacenarán en una memoria EEPROM serial.

    y más...

    • 2 termocuplas de tipo K;
    ...
    • dspic30f6012 @30MIPS o PIC18F4550 @12MIPS para control, comando y comunicación;
    En línea
    darck_khronos
    PIC16F
    ***
    Desconectado Desconectado

    Sexo: Masculino
    Mensajes: 634

    Khronoscorp Systems


    « Respuesta #10 : Julio 02, 2009, 12:49:02 »

    Sorry Me salte esa parte
    En línea
    BrunoF
    Moderador
    PIC16F
    *****
    Desconectado Desconectado

    Sexo: Masculino
    Mensajes: 696



    « Respuesta #11 : Julio 02, 2009, 04:19:24 »

    No hay daño darck_krhonos. Wink

    Hola ATS&S:

    Si, me hubiese gustado hacer el sensor por I2C, pero el MAX6675 solo viene por SPI, y en encapsulado SOP. Creeme que este integrado lo justifica. Yo implementé el SPI por soft. Es una pavada completa, ademas de que este integrado sólo puede enviar datos a petición, nunca recibir. Esto hace que ni siquiera tengas que estar pendiente de el.

    Me gusta el I2C, pero si tengo que elegir, creo que me quedo con la "vieja escuela" y elijo el SPI,porque el protocolo es mucho mas sencillo y las velocidades de transferencia son muy superiores.

    Un saludo.
    En línea
    slick
    PIC10F
    *
    Desconectado Desconectado

    Mensajes: 20


    « Respuesta #12 : Julio 03, 2009, 07:25:00 »

      Hola Bruno, que bueno contar con tu opinión  rolleyes2.

    cosa que realmente me hace dudar porque yo por serie no lo haría. Tengo todas notebooks, y no tengo puerto serie en ninguna de ellas.
    Yo tambíen tengo laptops solamente, pero tengo el cable para adaptar de RS232 a USB, por lo que no lo veo como un problema. En mi taller tengo unos PIC18F2550 y el 4550, de hecho estuve a punto de usarlos pero el PIC24FJ64GA002 tiene 4 veces mas RAM y mucho hardware que queria probar (PPS, CRC, Calendario, etc), con la ventaja de facilidad de migración a dispositivos más gordos: dsPIC33F, PIC24H y PIC32 (bastante sobrados para este proyecto en realidad).

    Con respecto al horno...yo compré un ATMA de 2x litros de capacidad, y anda perfecto! Lo compré para esto, pero creo que no lo voy a usar porque me da lástima debido a que la modificación es demasiado grande. Espero conseguir un horno eléctrico usado de dimensiones similares a menor precio.
    Con respecto a TU horno, no tengo idea de cuántos litros es, pero te digo desde ya que si. Que 600 Watts es poco si querés permitirle al control PID que responda rápido. Los hornos de soldadura SMD que vi parecidos al que queremos hacer llegan hasta 330 grados centígrados. Eso significa que deben tener un resto bastante interesante de potencia para poder variar la temperatura rápido.
    Yo tengo pensado equipar a mi futuro horno con dos resistencias, una por debajo y otra por encima, cada una de 2500W. Eso no quiere decir que vaya a usar toda su capacidad. Obviamente que la idea es estar sobrado para poder lograr cambios de temperatura(positivos) en poco tiempo.
    El horno que compré tiene un volumen muy pequeño, pero me parece excelente para no ocupar mucho espacio en mi taller. Aquí esta el modelo: http://www.dicom2000.com.mx/catalogo/taurus/coccion/13taurus_coccion_img05.html ¡es de solo 7 litros!
    Me gustaría saber más sobre esas resistencias que vas a usar. Una cosa que me paso por la cabeza fue ver si conseguia un par extra de elementos calefactores iguales a los de mi horno en una tienda de refacciones para electrodomésticos y adaptarlos para que tenga 4 en vez de los 2 que tiene actualmente.

    • 2 resistencias de material resistivo de 2500W c/u;
    • 2 relays de estado sólido para activar/desactivar las resistencias;
    • 2 termocuplas de tipo K;
    • 2 integrados MAX6675 para sensar las termocuplas;
    • 2 ventiladores metálicos para hacer descender la temperatura;
    Me parece que ví un proyecto donde también se tenía forma de enfriar el interior del horno, solo que ahora no recuerdo en que página. La cuestión a mi no se me ocurre una manera fácil (con fácil me refiero a la facilidad de encontrar el material) de instalar un ventilador que soporte la temperatura. Lo que si pensé (y espero no decir barbaridades) fue en un ventilador común, tal vez de una PC que introduzca aire a temperatura ambiente en el horno, mediante alguna especie de conducto colocado en la parte baja del horno (para evitar pérdidas por convección), cuando se requiera bajar la temperatura. Ahora te hago algunas preguntas preguntas Bruno, también sin animo de crítica:
    • La verdad nunca he usado relevadores de estado sólido, ¿Como funcionan? ¿Se comportan como un Triac, que deja de conducir hasta el próximo cruce por cero?
    • ¿Realmente crees o tienes alguna experiencia que te lleve a la conclusión de que sean necesarios dos termopares? lo digo por que he leido que estas cosas no son muy precisas, y si los colocas muy juntos (aclaro que desconozco donde los vas a colocar) tal vez midan la misma temperatura o la lectura varie solamente debido al error de los termopares. No sé  Huh? tal vez sea cuestión de experimentar un poco, ahora tampoco creo que afecte tener dos, pero si será mas caro.  Wink
    • Y por último ¿Cual será el periodo de ejecución de tu control PID?

    • Teclado para ingresar valores y perfiles de soldadura;
    • (4)PWM para controlar tanto las resistencias como los ventiladores;
    • Ajuste de valor para el PWM de las resistencias, detectando cruce por cero y calculando la integral de al onda senoidal;
    • Posiblemente guardado de perfiles/historia en memoria EEPROM 24LC512;

    El teclado también se me ocurrio, pero yo lo tenia pensado como un accesorio conectable mediante el bus I2C, de momento se me hace mucho mejor tener el circuito conectado a la PC para cambiar los datos de perfiles.
    La integral me parece interesante para obtener una variación lineal de la potencia aplicada a las resistencias.
    Me gustaría que la forma de almacenar los perfiles fuera compatible entre los hornos de todos, para no trabajar doble.

    Control PID aplicados a las resistencias-termocuplas;
    Control PID aplicados a los ventiladores-sensores de RPM;
    Fuzzy logic aplicada a ambos items mencionados previamente;
    Por ahora no RTOS(Real Time Operative System). Estuve sacando las cuentas y no creo que valga la pena implementarlo siendo que las resistencias funcionan con 220V AC @50Hz/60hz. Lo que hace que la velocidad de respuesta de las mísmas sea bastante pobre en efectividad real;
    De lógica difusa no tengo ni idea, de hecho voy empezando a comprender algo del control PID con la implementación que hice basada en la de ATMEL. Si me pudieras ayudar o pasarme el fragmento de código sería muy bueno. Del RTOS no entiendo a que te refieres, por lo que he visto la programación queda mucho más ordenada y modular cuando usas un RTOS. La única desventaja que veo es que usas más memoria tanto RAM como FLASH.\

    En fin, me gustan tus comentarios. Espero ver pronto tu trabajo, que yo con el mio voy algo lento.

    Saludos Coordiales.


    En línea
    slick
    PIC10F
    *
    Desconectado Desconectado

    Mensajes: 20


    « Respuesta #13 : Enero 11, 2010, 10:05:45 »

    Revivo el tema después de mucho tiempo. Disculparán que no haya podido seguir con el tema, pero por cuestiones personales y de trabajo había tenido muy poco tiempo para dedicárselo a mis proyectos de hobby. Seguramente sabrán que llevar a cabo un proyecto al mismo tiempo que se documenta todo demanda mucho tiempo. En fin... como les comento, no he tenido oportunidad de avanzar así que comenzaré donde se quedó este asunto.

    Interfaz Termopar/Microcontrolador.

    El circuito integrado MAX6675 de Maxim/Dallas Semiconductor es un convertidor analógico a digital para termopares tipo K. Bueno, la verdad es que este circuito tras su apariencia inocente con un encapsulado SOIC de 8 pines, esconde mucho más que un ADC y nos ahorrará bastante espacio al momento de diseñar un circuito impreso.

    Dentro de este pequeño circuito se encuentra la electrónica necesaria para amplificar, compensar y convertir a digital el voltaje generado por el termopar, lo que hace muy sencilla la tarea de conectar un termopar a un microcontrolador. El único “pero” es que este circuito solo se consigue en encapsulado SOIC, por lo que no es tan fácil usarlo en el protoboard y hará falta adquirir o fabricar un adaptador para poder experimentar.

    Existen muchos sensores de temperatura en el mercado, sin embargo las soluciones basadas en silicio, como el LM35 por citar un ejemplo que sea familiar, están normalmente limitados a un rango  de temperatura por debajo de los 150 grados centígrados. Lo que los deja fuera de consideración cuando debemos monitorear algún proceso con temperaturas superiores, afortunadamente los termopares vienen a salvar el día, permitiéndonos  mediciones en un rango más amplio, usualmente  de varias centenas de grados centígrados y sin un costo excesivo.

    Características del MAX6675

    Hay algunas características importantes que se deben tomar en cuenta antes de usar este circuito, a continuación las más importantes:

    • Interfaz compatible con SPI solo de lectura.
    • Resolución de 12 bits, 0.25 grados centígrados.
    • Medición hasta 1024 grados centígrados.
    • Alimentación de 3.3 a 5 volts.
    • Frecuencia de reloj SPI máxima Fscl 4.3 Mhz.
    • Tiempo de conversión 0.17 s máximo 0.22 segundos.
    • Consumo máximo de 1.5 mA.

    Existen más, pero creo que aquí esta lo más importante, para más detalles habrá que consultar la hoja de datos que proporciona el fabricante. A continuación tenemos el diagrama a bloques que encontramos en la hoja de datos para darnos una idea de como esta constituido este pequeño integrado.


    Formato de Salida.

    El MAX6675 se conecta con un microcontrolador mediante una interfaz de 3 lineas compatible con el estándar SPI. El formato en el que el MAX6675 envía datos al microcontrolador es el siguiente.

    Como se puede observar, además de la palabra digital correspondiente a la temperatura tenemos un bit que nos indica si el termopar esta abierto (desconectado o roto, por ejemplo) que podemos usar para tomar acciones correctivas o informativas en el software, como disparar una alarma o mostrar un aviso. También hay una buena cantidad de bits que no tienen significado.

    Sobre el software para el termopar

    Usaremos el módulo SPI con interrupciones del microcontrolador para comunicarnos con el MAX6675. El software que escribí, usa colas (queues) de FreeRTOS para gestionar la entrada de datos por el módulo SPI al que esta conectado el MAX6675 (I/O de datos por interrupcion), sin embargo las funciones de colas e incluso las funciones asociadas a la interrupción pueden descartarse y simplemente usar la técnica de bit polling para esperar hasta que el módulo SPI termine la transferencia, por lo tanto puede usarse este código como base para usar el MAX6675 con cualquier otro microcontrolador sin importar nuestras preferencias o requisitos de programación.

    * Inicializar módulo SPI: Afortunadamente el MAX6675 no requiere de ninguna inicialización, por lo tanto lo único que hace esta función es cargar los valores iniciales en los registros del módulo SPI del PIC. Existe otra función para inicializar la cola de FreeRTOS con la que se comunicará el MAX con la aplicación (ver archivos de código fuente), la cual recomiendo llamar mientras realicemos la inicialización de los recursos del RTOS.

    Código:
    void vThermocoupleSPISetUp() // Setup SPI module for MAX6675 operation
    {
    CONF_CS_MAX6675_PORT = 1; // Initialize MAX6675 pin select status
    CONF_CS_MAX6675_TRIS = 0; // Initialize MAX6675 pin TRIS register bit as output
     
    // SPI1 module configuration
    SPI1CON1 = 0x043A; // Primary prescaler 2:1, secondary 4:1 2 Mhz @ 16 MIPS
    SPI1CON2 = 0x0000; // No framed SPI support
     
    // Interrupt configuration
    IFS0bits.SPI1IF = 0; // Clear interrupt flag
    IEC0bits.SPI1IE = 1; // Enable SPI interrupt
     
    SPI1STAT=0; // Clear SPI status flags
    SPI1STATbits.SPIEN =1; // Enable SPI module
    }

    * Leyendo el resultado: Si observamos el formato de salida del MAX6675 veremos que los datos transmitidos tienen una buena cantidad de bits de relleno o sin significado, por lo que hay que eliminarlos antes de que el resultado pueda usarse para convertirse a grados centígrados. La función en C que escribí para leer el termopar retorna un unsigned int que corresponde al valor leído desde el MAX6675, NO a la temperatura en grados centígrados.

    Código:
    unsigned int iThermocoupleRead()
    {
    unsigned int iTempBuffer = 0;
     
    CONF_CS_MAX6675_PORT = 0; // Force Chip Select to low
    asm("nop");
    asm("nop"); // Wait for CS to stabilize, 100 nS min( view timing diagrams )
    SPI1BUF = 0xAAAA; // Transmit dummy byte to start reception
    xQueueReceive( xThrmcplQueue, &iTempBuffer, portMAX_DELAY ); // The caller task is blocked until the thermocouple reading is received
    iTempBuffer &= 0x7FF8; // Apply mask to leave valid data only
    iTempBuffer = iTempBuffer >> 3; // align data
    return iTempBuffer;
    }

    Rutina de interrupción: En la rutina de interrupción del modulo SPI se realiza la lectura del registro correspondiente al buffer de recepción y se envía la palabra leída a través de la cola para que sea procesada por el código de la aplicación.

    Código:
    void iThermocoupleISR( void )
    {
    portBASE_TYPE xTaskWoken; // indicates if a context switch should occur after this interrupt
    unsigned int iTempBuffer = 0;
     
    iTempBuffer = SPI1BUF;
    xQueueSendToBackFromISR( xThrmcplQueue, &iTempBuffer, &xTaskWoken ); // Send received word to the queue
    CONF_CS_MAX6675_PORT = 1; // return chip select to the idle state
    if( xTaskWoken )
    taskYIELD(); // context switch if a higher priority task is woken
    return;
    }
     
    void __attribute__((interrupt, auto_psv)) _SPI1Interrupt (void)
    {
    iThermocoupleISR();
    IFS0bits.SPI1IF = 0; // Clear interrupt flag
    }

    Como se puede ver realizar la medición de temperatura es bastante fácil, ni siquiera hay que preocuparse demasiado de los detalles de la conversión A/D. Lo único que se debe tomar en cuenta es que al MAX6675 le toma alrededor de 220 milisegundos como máximo completar una conversión, por lo que como máximo debemos leer el valor de la temperatura unas 4 o 5 veces por segundo. Esto será más que suficiente para la mayoría de las aplicaciones. Hay que recordar que al llamar a la función iThermocoupleIsOpen() equivale a leer la temperatura y por lo tanto además del bit de termopar abierto, vamos a leer la ultima conversión de temperatura que realizo el integrado con su reloj interno. Voy a citar la hoja de datos del integrado:

      
    Citar
     Force CS low and apply a clock signal at SCK to read the results at SO. Forcing CS low immediately stops any conversion process. Initiate a new conversion process by forcing CS high.

    Por lo tanto, si llamamos a la función iThermocoupleIsOpen() e inmediatamente después llamamos a iThermocoupleRead() cualquier proceso de conversión que el MAX pudiera estar realizando entre las llamadas a dichas funciones se detendrá y las dos funciones leerán el mismo valor de temperatura, que es el correspondiente a la última conversión que se pudo completar (aunque la función iThermocoupleIsOpen no toma en cuenta el valor de temperatura, aún así tiene que leerlo). En resumen… hay que respetar el ciclo de CS para el MAX6675 y permitirle 220 milisegundos entre lecturas, de lo contrario hay que estar consientes de lo que esperamos leer:
    Código:
    int iDiagnosticThermocouple( xHardwareResources xHardware, void * pvActionParams )
    {
    char cBuffer[17];// Holds the string to be printed to the LCD
     
    vLcdDriverCommand( lcdCLEAR, xHardware->xLcdDisplay ); // Clear LCD display
    do
    {
    vLcdDriverCommand( lcdHOME, xHardware->xLcdDisplay ); // move pointer/cursor to address 0
    if( !iThermocoupleIsOpen()) // check if thermocouple is open
    vHelpersAltSprintf( cBuffer, "Probe 1: %03u%cC", iThermocoupleRead()/4, 0xDF ); // If not, read and display the current temperature
    else
    vHelpersAltSprintf( cBuffer, "Probe 1: Open" ); // Display thermocouple open
    vLcdDriverPutStr( cBuffer, xHardware->xLcdDisplay ); // Print line to LCD
    vTaskDelay(500);
    }
    while( xKeypadGetEvent( xHardware->xKeypad, NULL, 0) == pdFALSE );
    return 0;
    }

    Como se puede ver en mi función de diagnostico, se llama a las dos funciones iThermocoupleIsOpen() y iThermocoupleRead() sin ningún retardo entre ellas, por lo tanto, el valor del campo temperature reading será el mismo en ambas lecturas, sin embargo, verán que respeto el tiempo mínimo de conversión cuando espero valores válidos, manteniendo la linea CS en alto por mas de 220 mS (de hecho son 500 mS). Podría hacerse en definitiva de muchas otras formas, pero esta es la que implemente yo. Ahora si no se respeta este limite, lo que pasará es que leeremos el mismo valor de temperatura SIEMPRE, ya que el MAX6675 nunca terminará la conversión.

    Consideraciones finales sobre el termopar y el MAX6675

    Hay que recordar que el termopar opera con voltajes muy bajos que son amplificados. He notado que las mediciones son bastante sensibles a la interferencia de otros aparatos, por ejemplo, sucede que al acercar el cable de una fuente de poder conmutada de una laptop (que es de dudosa calidad y al parecer mal filtrada) la medición que realiza el MAX6675 muestra valores irreales y me causo un poco de problemas al principio, antes de darme cuenta del problema. En la hoja de datos menciona algunos consejos para mejorar la estabilidad de las mediciones entre las que se encuentran colocar capacitores bypass cerca de los pines de alimentación del MAX6675 y proveer un plano de masa adecuado en el circuito impreso.

    Por otra parte quedan pendientes las consideraciones sobre la linealidad del termopar, que requiere más procesamiento de la lectura como la implementación de tablas de búsqueda o solucionar ecuaciones polinomiales de grado superior, consumiendo más recursos del microcontrolador. Afortunadamente el termopar tipo K tiene una respuesta que se aproxima a la lineal y permite una buena aproximación con el programa tal como esta, sin embargo para aplicaciones que requieren mayor precisión o un mayor rango de temperatura, no podemos saltarnos este paso.

    Modificaciones/ palabras finales

    Tomando en cuenta las sugerencias de Bruno, he decidido incorporar dos termopares (dos MAX6675) y 2 canales de PWM independientes, por lo cual hace falta agregar unos cuantos switch-case para que el software pueda leer dos termopares independientes. Cuando suba los archivos de código fuente tendrán esos cambios incluidos.

    Por otra parte quisiera comentar que he estado siguiendo el foro, a pesar de que no he participado mucho he visto varios temas relacionados que iré poniendo hasta arriba en mi mensaje original, para que queden como referencia.

    Por ahora ya sabemos por donde va la jugada con los termopares y el MAX6675 y ahora ya estamos en condición de poder usar la medición de nuestro termopar como feedback para el control PID.

    Continuará...
    « Última modificación: Enero 15, 2010, 03:24:56 por slick » En línea
    slick
    PIC10F
    *
    Desconectado Desconectado

    Mensajes: 20


    « Respuesta #14 : Enero 14, 2010, 09:27:23 »

    Acabo de recibir dos relevadores de estado sólido (SSR) que pedí para el proyecto. En un principio pensaba usar triacs y optotriacs para gobernar las resistencias del horno, pero finalmente preferí comprar los relevadores que tienen un aspecto mejor :D pero sobre todo ya no hay que diseñar una placa de control de potencia.  rolleyes2

    Aquí estan los relevadores que acaban de llegar, con voltaje de operación de máximo de 480 volts y carga máxima de 25 Amperes. Y 3 a 32 VDC para su control:



    Me gustaría saber si alguien tiene experiencia con estas cosas, ¿Se comportarán igual que un TRIAC? he visto el diagrama de estas cosas y veo que efectivamente en la salida tienen un triac que controla la carga, pero no se si incluyan algún detector de cruce por cero o alguna otra sorpresa dentro. ¿Se atrevería alguien a recomendarme una técnica (ON/OFF, control del angulo de disparo) de control con SSR?

    Por cierto, se me olvido poner el resultado del código en el post anterior :D



    Muchas gracias por los comentarios de todos Wink
    En línea
    Páginas: [1] 2   Ir Arriba
      Imprimir  
     
    Ir a:  

    Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines
    SMFAds for Free Forums
    XHTML 1.0 válido! CSS válido!
    Página creada en 0.181 segundos con 29 consultas. (Pretty URLs adds 0.025s, 3q)