Control de potencia modular para PC
Hola a todos y gracias por colaborar conmigo en este nuevo proyecto. La idea es controlar varias salidas de potencia (ya sean reles o triacs) desde una computadora con el programa apropiado y por medio del puerto serie RS232.
La idea de utilizar el puerto serie responde a varios factores claves:
- Siempre hay al menos uno libre en la PC
- Con solo dos cables alcanza para la interconexión
- Permite mayores distancias
- Es mucho mas simple la electrónica y mas reducidos los circuitos impresos
- Requiere muchas menos líneas de E/S en el µC
Estas son las que se me ocurren en este momento, pero cuando me decidí por serie tenia muchas mas en mente. La edad…….
Bueno, siguiendo con el proyecto la idea es encadenar varios módulos de manera tal de lograr la cantidad de salidas deseadas y permitir en un futuro expandir el sistema sin apagarlo y sin modificar la estructura inicial del mismo. Algo como lo que se ve en el diagrama de abajo:
Aquí, hay una PC que maneja todo por medio de su salida serie la cual entra al primer módulo. Este amplifica la señal de entrada RS232 permitiéndole alcanzar mayores distancias y la envía tal como entra por un lado al microcontrolador del módulo y por otro lado a la entrada del siguiente módulo, que hace exactamente lo mismo que éste.
Por lo que tengo entendido entre módulo y módulo puede haber hasta 25 metros de distancia, aunque esta se puede ampliar utilizando repetidoras RS232 que son muy fáciles de conseguir en el mercado o, de última, se pueden hacer con integrados MAX232.
Cada módulo tiene una dirección de 8 bits que lo identifica del resto. Esta dirección está guardada en la memoria EEPROM del µC y es posible cambiarla desde el programa que corre en la computadora. Para ello se pensó en una llave de seguridad que habilite la escritura de la clave. Algo que le da mas seguridad al sistema y evita programaciones inapropiadas. En el diagrama de abajo se aprecia una idea del esquema al cual he llegado hasta el momento:
El RS232 convertido en TTL entra al micro por uno de los pines del puerto A. Dos pines de este mismo puerto se emplean para censar los interruptores. Uno de ellos es el que se comento arriba, para permitir al programa de la PC modificar el código del módulo. El otro interruptor se pensó para colocarle una llave tipo cerradura la cual, al activarse abre todos los reles o triacs de la salida sin importar el estado en que se encuentren las salidas. Esto es por si un técnico necesita cambiar algo en la instalación que parte de esas salidas y desea cortar el suministro. Por mas que el programa le indique al módulo encender las salidas éstas permanecerán en estado apagado hasta que se retire la llave de seguridad. EL tanto el LED y el zumbador son para señalización.
El puerto B completo del micro sale hacia un buffer de corriente ULN2803A que permite manejar directamente las bobinas de los reles o los optoacopladores que seguidamente controlaran los triacs. Esto es a elección del armador.
Hay solo cuatro operaciones que se pueden realizar:
1. Inicializar el sistema completo. Esto es poner todas las salidas de todos los módulos en apagado. Y se logra enviando por el puerto serie la siguiente secuencia: 0Fh FFh F0h.
2. Controlar las salidas de determinado módulo. Esto se logra enviando por el puerto serie tres palabras. La primera de ellas (F1h) indica que se quiere setear las salidas del módulo que se indica en la siguiente palabra. Por último, la tercer palabra indica el estado que deben adquirir las ocho salidas del módulo. Y no es mas que una carga directa sobre el puerto B del dato recibido en la tercer palabra, siempre que la segunda palabra sea la misma que la contenida en la EEPROM del módulo. Esto es para que solo accione el módulo correspondiente. Abajo se ve bien como es el envío de una secuencia para esta función:
3. Establecer dirección del módulo. Esta función requiere que el interruptor de programación en el módulo este cerrado. Ni bien el interruptor es accionado el LED se ilumina y el buzzer produce un breve pitido indicando que ha entrado en modo programación. El sistema queda a la espera de dos palabras, la primera de ellas indica la función específica de programación (F2h) y la que le sigue indica la dirección que el módulo debe adoptar. Cuando ambas palabras son recibidas el módulo guarda en la EEPROM el nuevo código de dirección y también hace sonar un pitido largo en el buzzer, indicando que la operación terminó con éxito. Luego, el usuario debe abrir nuevamente la llave de programación lo cual es indicado con el apagado del LED. Abajo se observa como es la trama de datos para esta función:
Los demás módulos, cuando ven en el bus la función F2h deben hacer caso omiso a la siguiente palabra para seguir sincronizados.
4. Testear determinado módulo. Esto es algo así como hacerle un PING al módulo tras lo cual el buzzer producirá tres breves pitidos al tiempo que destella el LED. No afecta el estado de las salidas ni tampoco la dirección del módulo. Para que esto suceda habrá que enviar dos palabras por el bus. La primera conteniendo el código de la función (F4h) y la segunda conteniendo la dirección del módulo, tal como se observa debajo:
Actualización: 21 Enero de 2002
A continuación se observa el diagrama electrónico del circuito completo.
El mismo esta compuesto por la fuente de alimentación que provee los 12V para los relés y los 5V regulados para la electrónica de control. También se aprecia la interface RS232 la cual al mismo tiempo que convierte el dato serie entrante al equipo en TTL lo vuelve a convertir en RS232 a fin de permitir continuar otro trecho hacia los siguientes módulos. El interruptor indicado como Vel. (ubicado en el panel posterior) permite seleccionar si el sistema funcionará a baja velocidad (2400 bps) o a alta velocidad (9600 bps). Otro interruptor (que también debería estar en el panel posterior) permite colocar el módulo en posición de programación. En este estado, el micro espera una palabra por el puerto serie la cual será adoptada como dirección del módulo en el bus. Luego de una programación de dirección la misma queda retenida en la memoria Flash del micro a fin de no perderla ante una desconexión y también se emite un sonido de confirmación. El zumbador posee un interruptor para evitar que el mismo emita sonidos. Esto es útil si el sistema funcionará en un sitio de ambiente controlado (donde se requiera silencio). El interruptor indicado como Seg. permite desconectar eléctricamente los relés. De esta forma, si se necesita efectuar una modificación en las salidas y no se quieren correr riesgos se podrá hacer independientemente del estado que el equipo presente en el bus. El diodo LED marcado como Act. se ilumina cuando el módulo es seleccionado y se apaga cuando se completa la operación efectuada sobre el, por lo que en la práctica solo destellará un instante cuando el módulo sea accesado.
En la foto se observa el módulo armado, con sus ocho relés activados.
La fuente del equipo debe poder proveer corriente suficiente para encender los ocho relés simultáneamente así como alimentar el circuito lógico. Esto resulta en un consumo aproximado de 1A a plena carga.
Por el momento tenemos el firmware funcional pero solo como receptor serie. El mismo recibe un dato por el puerto y lo coloca en los pines del puerto B (actúa tal como un receptor serie). Pero en breve vamos a elaborar un firmware totalmente funcional.
Firm (programa en ensamblador asm)
;envio de datos del PC al PIC ;2400 - 8N1 status equ 3h ;registro de estados del micro ptoa equ 5h ;puerto a ptob equ 6h ;puerto b cfga equ 85h ;registro de config. puerto a cfgb equ 86h ;registro de config. puerto b r0d equ 0dh ;registros de proposito general r0e equ 0eh conta equ 10h recep equ 11h ;buffer de entrada z equ 2h ;bandera de zero c equ 0h ;bandera de carry p equ 5h ;bit de seleccion de pagina w equ 0h ;para almacenar en w r equ 1h ;para almacenar en el mismo registro rx equ 2h ;bit de recepcion de datos en serie org 00h ;vector de reset goto inicio ;salta al comienzo del programa org 05h ;saltea el vector de interrupcion start movlw .124 ;retardo para generar bit de arranque goto startup delay movlw .83 ;retardo para generar bit de datos startup movwF r0e redo nop ;pierde 12 microsegundos nop decfsz r0e ;resta 1 al retardo goto redo ;si falta tiempo itera retlw 0 ;si termino retorna limpiando w recibir nop ;recibe un byte por RS232 clrf recep ;limpia el buffer de recepcion btfss ptoa,rx ;mira el estado de la linea serie goto recibir ;si esta inactiva queda a la espera call start ;retardo para bit de arranque rec movlw 8 ;carga cantidad de bits a recibir movwf conta rnext bcf status,c ;limpia el carry btfss ptoa,rx ;mira la linea de recepcion bsf status,c ;si esta en alto sube el carry rrf recep ;rota el buffer de recepcion call delay ;retardo entre bits decfsz conta ;resta uno a la cant. de bits a recibir goto rnext ;si faltan bits por recibir itera retlw 0 ;si termino sale y limpia w inicio bsf status,p ;selecciona la pagina 1 de memoria movlw 0ffh ;programa el puerto a como entradas movwf cfga movlw 00h ;programa el puerto b como salidas movwf cfgb bcf status,p ;selecciona la pagina 0 de memoria clrf recep ;limpia el buffer de recepcion clrf ptob ;apaga todas las salidas ciclo call recibir ;queda a la espera de recibir datos movf recep,w ;carga en w el dato recibido movwf ptob ;manda el dato a las salidas goto ciclo ;itera indefinidamente end
En tanto el circuito impreso, por el momento tiene muchos errores que hemos corregido de forma precaria (como se ve en la foto de abajo) pero en cuanto tengamos la versión definitiva la vamos a publicar.
Fuente: http://www.pablin.com.ar/electron/proyecto/plink/index.htm
Tuitear 4.383 Veces leído 0 comentarios |
13 junio 2010 en Electronica | tags: Electronica |