TODOPIC
Otros Microcontroladores / Dispositivos programables => Lógica Programable => Mensaje iniciado por: Bavaria en 26 de Diciembre de 2006, 09:15:00
-
hola,querria saber como hacer un calentador electrico en vhdl que se activa a una hora determinada y una vez encendido calienta si baja de una temperatura establecida y deja de calentar al pasar de una temperatura maxima tambien establecida.Yo por ahora he hecho el timer y ahora estoy un poco perdido para seguir.No se si debo centrarme en el diagrama de estados o directamente programar en vhdl.Puiede alguien echarme una mano?,Gracias.
byez
:mrgreen:
-
Si ya has implementado un reloj de tiempo real (te refieres a eso cuando dices timer,imagino) no entiendo cómo se te hace difícil encarar la parte que te queda de tu proyecto,pero bueno,te arrojo un par de ideas que te pueden ayudar.
Yo implementaría el sistema con 4 subsistemas modelados en vhdl de forma independiente y después interconectados desde esquemático:
----------------------------------------------
MODULO RELOJ:
Implementa un reloj a tiempo real con las entradas y salidas que tú veas necesarias,por si quieres agregarle la posibilidad de representar la hora en displays,programar la hora con pulsadores,programar la hora de activación de la carga,etc...
No mencionas si tras la activación del calentador a la hora concreta quieres que esté funcionando durante un tiempo limitado y vuelva a desactivarse,aunque imagino que debe ser así,así que para poder detectar cuando se alcanza la hora de encendido y cuando la de apagado,este módulo deberá tener una salida de 1 bit que se activará cuando llegue la hora de encendido y permanecerá activa hasta que se alcance la hora de apagado,momento en el que se desactivará.Llamemos a esta señal de salida,por ejemplo, "Hora_disparo".
MODULO SENSOR:
Este módulo se encargaria de comunicarse con un sensor de temperatura con interfaz digital...la forma en que lo haga,las entradas y salidas que necesite para ello y su correspondiente descripción vhdl dependerá del sensor que escojas.
Deberá contar también con una señal de salida de 1 bit que estará activa cuando se esté por debajo del umbral mínimo de temperatura que se establezca y se volverá a desactivar cunado se alcance la temperatura máxima.Llamemos a esta señal de salida "Temperatura_disparo".
MODULO DE DISPARO:
Este módulo se encargará de controlar el circuito de potencia de la carga.La cantidad de salidas que precise para ello dependerá de cual sea ese circuito de potencia,aunque lo normal es que baste con una única salida de 1 bit (pongámosla activa a nivel alto) que podría atacar la base de un transistor para activar-desactivar un relé.Llamemos a esa salida "Activacion_carga".
Deberá tener como entradas las dos señales procedentes de los otros dós módulos,o sea,"Hora_disparo" y "Temperatura_disparo".
Su descripción podría ser algo tan sencillo como esto:
entity MODULO_DISPARO is
port(Hora_disparo , Temperatura_disparo , Enable : in std_logic,
Activacion_carga : out std_logic);
end MODULO_DISPARO;
architecture COMBINACIONAL of MODULO_DISPARO is
begin
Activacion_carga <= '1' when hora = '1' and temperatura = '1' and Enable = '1' else '0';
end COMBINACIONAL;
MODULO DE CONTROL:
Debería poder inhibir la activación de la carga (señal "Enable" cuando fuera necesario (apagado o encendido manual del calentador,mientras se programa el reloj,etc...)
Podría ser necesario que se encargara de la inicialización del sistema(inicialización del reloj y de las comunicaciones sensor - MODULO_SENSOR),aunque esto es algo que se puede hacer en cada módulo individualmente.
----------------------------------------------------------
El MODULO RELOJ es un circuito síncrono,por lo que debe llevar señal de reset.
El MODULO SENSOR posiblemente necesites que también sea síncrono,por lo que también debe llevar una entrada de reset y una de clock.
Aprovecha el reset para inicializar ambos módulos.
El módulo de disparo es puramente combinacional,por lo que no precisa ni de señal de clock ni de reset.
-
Para el sensor puedes utilizar uno de estos:
http://catalog.national.com/Cat/jsp/national.jsp?i=72
Suerte,
JJ (Geo).
-
Gracias Modulay tu idea me ayuda bastante.Si te sorprende que no supiese como continuar con el proyecto te dire que soy un novato en vhdl y en xilinx y estoy empezando a utilizarlo.
De todas formas el profesor que me mando el proyecto me dijo que en un principio necesitaria un reloj(timer)en tiempo real y a partir de ahi crear un diagrama de estados para intrerrelacionar todo.Ya que cuando lo pruebe me dijo que puedo utilizar los pulsadores de la placa de pruebas para simular el sensor y decirle si ha sobrepasado la tª maxima o si esta por debajo de la minima.
De todas formas te dejo el enunciado de mi trabajo porque yo me explico mu mal,jeje:
6. CALENTADOR ELÉCTRICO DE AGUA PARA USO DOMÉSTICO.
Como propuesta de partida, el calentador permite programar la hora de activación y la temperatura máxima que debe
alcanzar el agua. Cuando el agua alcance dicha temperatura, el calentador se apagará. El calentador se volverá a
encender durante el día cuando se dé alguna de las circunstancias siguientes:
- La temperatura del agua almacenada en el calentador baja de una temperatura mínima preestablecida.
- El nivel de agua caliente almacenada en el calentador baja de un valor mínimo preestablecido.(esto no me lo pide) :mrgreen:
-
Ya que cuando lo pruebe me dijo que puedo utilizar los pulsadores de la placa de pruebas para simular el sensor y decirle si ha sobrepasado la tª maxima o si esta por debajo de la minima.
Je, entonces no es tan complicado ;). Sigue los consejos de Modulay, prueba empezando con el programa y si tienes dudas pregunta :P.
Saludos,
JJ (Geo).
-
Empieza por el reloj.
Te dejo un modelo para controlar los displays,al que le entran los valores de los 4 dígitos (uno por digito) y controla los cátodos y los segmentos para representar la hora.