Tabla de contenido:
- Paso 1: Diagrama de caja negra
- Paso 2: Máquinas de estado
- Paso 3: tablas de verdad de la máquina de estado, ecuaciones de excitación y ecuaciones de salida
- Paso 4: Contenedor, submódulos y restricción
- Paso 5: Puertos de E / S para LED
Video: L I G H T S: 5 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
El propósito de este proyecto final era crear algo que se enfocara en la sustentabilidad e implementara conceptos de diseño digital, y para hacer esto, decidí diseñar un sistema de ahorro de energía escalable usando vhdl y hecho para la placa Basys 3 (serie Artix-7 35T). Escalable porque se puede colocar cualquier cantidad de sensores en una habitación y cualquier cantidad de estos sistemas se puede colocar alrededor de un edificio o una casa. Lo que haría este sistema es, teóricamente, ahorrar miles de dólares en edificios comerciales y disminuir un gran porcentaje del consumo de energía en comunidades residenciales más pequeñas mediante la implementación de un sistema conectado de luces controladas activa y pasivamente, detectores de movimiento, temporizadores que se muestran en pantallas de siete segmentos y interruptores de control. Este ejemplo trata de un solo sistema con tres detectores de movimiento, un interruptor principal, un interruptor manual / normal, cuatro pantallas de siete segmentos y una única luz que controla el sistema.
Por ejemplo, en una habitación elegida, se colocarían varios detectores de movimiento (este diseño de ejemplo tiene tres), y cada uno enviaría una señal (1) si detecta movimiento y (0) si no lo hace. Si al menos uno de los detectores de movimiento detecta movimiento, las luces se encienden si aún no están encendidas y permanecen encendidas si ya están encendidas. En cualquier momento, todos los detectores de movimiento no detectan nada, un temporizador comienza a contar hacia atrás durante un período de tiempo determinado (ajustable en código), y las luces permanecen encendidas mientras el temporizador cuenta hacia atrás. Una vez que el temporizador termina la cuenta atrás, el temporizador se detiene y las luces se apagan. Si al menos un detector de movimiento detecta movimiento mientras el temporizador está en cuenta regresiva, el temporizador se detiene y se reinicia. Y si al menos un detector de movimiento detecta movimiento mientras las luces están apagadas, las luces se encienden inmediatamente.
Este sistema tiene dos modos, uno con el temporizador como se indicó anteriormente, y un segundo donde hay un interruptor que controla las luces manualmente (ignorando los sensores). Hay un interruptor maestro que le permite al usuario elegir qué modo desea usar en función del modo que crea que ahorrará más energía en general. Ex. Una habitación como un pasillo podría beneficiarse del modo de temporizador pasivo: los usuarios no están seguros de cuándo pasará la gente, pero encender y apagar las luces cada vez que entran y salen sería un inconveniente, mientras que una habitación como esta ya que un dormitorio con un solo usuario sería mejor operado manualmente. Y el interruptor principal sería útil en casos como si la persona que vive en el dormitorio se fuera por un período prolongado de tiempo, entonces el interruptor principal podría apagarse y el modo de temporizador funcionaría para ahorrar energía de manera más eficiente.
Entonces, en este sistema, hay dos máquinas de estado, una es la máquina de estado principal y otra para el temporizador de cuenta regresiva. La máquina de estado principal tiene cinco estados definidos como tales: 1. "luces encendidas, movimiento detectado" (id = 000), 2. "luces encendidas, sin movimiento detectado" (id = 001), 3. "luces apagadas, sin movimiento" detectado "(id = 010), 4." encendido manualmente "(id = 011) y 5." apagado manual "(id = 100). Esta máquina de estado principal tiene cuatro entradas: el interruptor principal (ms), el interruptor manual / normal (ns), una señal que es alta cuando al menos un interruptor detecta movimiento, y es baja en caso contrario (orx), y una señal que es alto una vez finalizado el temporizador, y bajo en caso contrario (td). La máquina de estado principal tiene dos salidas: luces (luces) y una señal que indica cuándo encender el temporizador de cuenta regresiva (temporizador) o (t) (ambos se usan indistintamente).
La segunda máquina de estado, el temporizador de cuenta regresiva, tiene 12 estados: 10 de ellos tienen identificadores asociados con el número que muestra el segmento de siete: "seg 10" (id = 1010), "seg 9" (id = 1001), […], “Seg 2” (id = 0010), “seg 1” (id = 0001), y los otros dos estados muestran cero, lo que representa que el temporizador está apagado, por lo que hay el primer "espacio en blanco 1" en blanco (id = 1111) y el segundo espacio en blanco "espacio en blanco 2" (id = 0000). El temporizador de cuenta regresiva tiene una entrada: temporizador (t) y tres salidas: el número mostrado en binario con cuatro bits (bin) y una señal que indica que el temporizador está terminado (td).
Paso 1: Diagrama de caja negra
Esta es una descripción general de cómo se supone que debe operar todo el sistema y se describe con un diagrama de caja negra.
- El reloj se utiliza para sincronizar la máquina de estado principal y el decodificador de siete segmentos; Se necesita un reloj más lento para el contador regresivo, por lo que hay un módulo divisor de reloj que toma la entrada del reloj y genera un reloj más lento para el contador regresivo.
- La variable intermedia (orx) en la envoltura está vinculada a los sensores de movimiento y será alta si al menos uno de los sensores detecta algo, y baja en caso contrario; la ecuación booleana para eso es simplemente orx = s (2) os (1) os (0).
-
El fsm principal controla en qué estado general se encuentra el sistema, dependiendo de las entradas (orx, ms, ns, td) y las salidas del estado actual en el que se encuentra (sm) se muestra simplificado con las dos señales para las que se usa (temporizador y luces).
- (temporizador) es una señal envolvente que se envía al fsm del contador regresivo como su entrada y es controlado por el estado actual del fsm principal. Indica cuándo encender el temporizador.
- (luces) es una señal envolvente que se utiliza para controlar el LED y está controlada por el estado actual del fsm principal.
-
El fsm del contador regresivo controla lo que muestra el segmento de siete según la entrada (temporizador) y emite el estado actual en el que se encuentra (sd) que se muestra simplificado con las dos señales para las que se usa (td y bin).
- (td) es una señal de envoltura que se envía al fsm principal como su entrada y es controlada por el estado actual del fsm del contador regresivo. Funciona como una señal de retroalimentación que indica cuándo termina el temporizador.
- (bin) es una señal de envoltura de cuatro bits que se concatena con cuatro bits de cero ("0000" y bin) y los ocho bits combinados se envían a (q), una señal de envoltura de ocho bits, que a su vez se envía a las siete decodificador de segmento en (ALU_VAL).
-
El módulo de siete segmentos es el mismo que en Polylearn; sus entradas principales toman un número de 8 bits (bin) a (ALU_VAL) para mostrar en cuatro pantallas diferentes de siete segmentos usando las salidas (SEGMENTS) para envolver la señal (seg) y (DISP_EN) para envolver (disp_en).
- Dado que dos o más pantallas de siete segmentos no pueden mostrar dígitos diferentes al mismo tiempo, se necesita un reloj para recorrer los cuatro ssegs, mostrando el dígito apropiado a la vez para cada sseg que se enciende individualmente, y el ciclo lo suficientemente rápido hace que el Los ssegs parecen estar activados todos a la vez.
- (signo y válido) son constantes a lo largo de este programa, por lo que (signo) se establece permanentemente en bajo y (válido) se establece permanentemente en alto.
- (ALU_VAL) toma la señal de envoltura (q) como entrada, que representa el número que se mostrará en la pantalla de siete segmentos en binario.
- La salida (SEGMENTS) se envía a una señal de envoltura de ocho bits (seg) y (DISP_EN) a una señal de envoltura de cuatro bits (disp_en).
-
También hay un módulo flip flop D que no se muestra explícitamente en el diagrama, pero es necesario para las dos máquinas de estado como submódulos y ayuda a la transición de estados sincrónicamente.
- (3) de estos son necesarios para el fsm principal ya que 2 ^ (3) = 8> 5 estados para la codificación
- (4) de estos son necesarios para el fsm del contador descendente ya que 2 ^ 4 = 16> 12 estados para la codificación
Paso 2: Máquinas de estado
Para diseñar correctamente las dos máquinas de estado, los estados individuales deben definirse claramente, con sus salidas y el estado al que pasa en función de las diferentes entradas posibles.
Estados del fsm principal:
"Luces encendidas, movimiento detectado" (id = 000)
Las luces están encendidas, al menos uno de los detectores de movimiento detecta movimiento, por lo que orx debe ser alto y ms está encendido.
- Salidas: luces = 1 y temporizador = 0
- Permanece en este estado cuando ms = 1 y orx = 1.
- Pasa al estado “luces encendidas, no se detecta movimiento” si ms = 1 y orx = 0.
- Pasa al estado "encendido manualmente" si ms = 0 y ns = 1.
- Pasa al estado "desconectado manualmente" si ms = 0 y ns = 0.
"Luces encendidas, no se detecta movimiento" (id = 001)
Las luces están encendidas, no se detecta movimiento de ningún detector de movimiento, por lo que orx debe ser bajo y ms está encendido. También al comienzo de este estado, el temporizador que se establece en alto le dice al fsm de cuenta regresiva que comience la cuenta regresiva, procede a la cuenta regresiva y detiene la cuenta regresiva una vez que el fsm de cuenta regresiva le dice a este fsm que ha terminado de contar.
- Salidas: luces = 1 y temporizador = 1.
- Permanece en este estado cuando ms = 1 y orx = 0 y td (el temporizador está listo) = 0.
- Pasa al estado "luces encendidas, movimiento detectado" si ms = 1 y orx = 1.
- Pasa al estado "luces apagadas, no se detecta movimiento" si ms = 1 y orx = 0 y td = 1.
- Pasa al estado "encendido manualmente" si ms = 0 y ns = 1.
- Pasa al estado "desconectado manualmente" si ms = 0 y ns = 0.
"Luces apagadas, no se detecta movimiento" (id = 010)
Las luces están apagadas, no se detecta movimiento de ningún sensor de movimiento y el temporizador finalizó la cuenta regresiva, por lo que orx debe estar bajo, ms está encendido y td está apagado.
- Salidas: luces = 0 y temporizador = 0.
- Permanece en este estado cuando ms = 1 y orx = 0.
- Pasa al estado "luces encendidas, movimiento detectado" si ms = 1 y orx = 1.
- Pasa al estado "encendido manualmente" si ms = 0 y ns = 1.
- Pasa al estado "desconectado manualmente" si ms = 0 y ns = 0.
"Encendido manualmente" (id = 011)
Las luces están encendidas, los detectores de movimiento son irrelevantes, por lo que ms está apagado y ns está encendido.
- Salidas: luces = 1 y temporizador = 0.
- Permanece en este estado cuando ms = 0 y ns = 1.
- Pasa al estado "desconectado manualmente" si ms = 0 y ns = 0.
- Pasa al estado “luces apagadas, no se detecta movimiento si ms = 1.
"Apagado manualmente" (id = 100)
Las luces están apagadas, los detectores de movimiento son irrelevantes, por lo que ms está apagado y ns está apagado.
- Salidas: luces = 0 y temporizador = 0.
- Permanece en este estado cuando ms = 0 y ns = 0.
- Pasa al estado "encendido manualmente" si ms = 0 y ns = 1.
- Pasa al estado “luces apagadas, no se detecta movimiento si ms = 1.
Estados del contador regresivo:
"Seg 10" (id = 1010)
La pantalla de siete segmentos muestra un 10.
- Salidas: bin = "1010" y td = 0.
- Pasa al estado "seg 9" si el temporizador = 1.
- Pasa al estado "en blanco 2" si el temporizador = 0.
"Seg 9" (id = 1001)
La pantalla de siete segmentos muestra un 9.
- Salidas: bin = "1001" y td = 0.
- Pasa al estado "seg 8" si el temporizador = 1.
- Pasa al estado "en blanco 2" si el temporizador = 0.
(Los estados "Seg 8" hasta "Seg 2" se omiten porque siguen el mismo patrón que "Seg 10" y "Seg 9" y no es necesario para la explicación)
"Seg 1" (id = 0001)
La pantalla de siete segmentos muestra un 1.
- Salidas: bin = “0001” y td = 0.
- Pasa al estado "en blanco 2" en el próximo flanco ascendente del reloj (no se necesita entrada).
"Espacio en blanco 2" (id = 1111)
La pantalla de siete segmentos muestra un 0. El propósito de un segundo estado en blanco es que haya un estado separado para cuando td = 1 por seguridad.
- Salidas: bin = “1111” y td = 1.
- Pasa al estado "en blanco 1" en el siguiente flanco ascendente del reloj (no se necesita entrada).
"Espacio en blanco 1" (id = 0000)
La pantalla de siete segmentos muestra un 0. Este es el estado en el que permanece el sistema cuando la máquina de estado principal está en el estado "luces apagadas, no se detectó movimiento".
- Salidas: bin = "0000" y td = 0.
- Pasa al estado "seg 10" si el temporizador = 1.
Paso 3: tablas de verdad de la máquina de estado, ecuaciones de excitación y ecuaciones de salida
El siguiente paso es crear tablas de verdad para las dos máquinas de estado y ecuaciones de excitación y ecuaciones de salida para cada fsm. Para cada ecuación de excitación fsm, es necesario que haya ecuaciones para cada bit codificado del siguiente estado en términos del estado actual y sus señales de entrada. Para cada ecuación de salida fsm, es necesario que haya ecuaciones para cada señal de salida en términos del estado actual. Los cuatro conjuntos de ecuaciones se pueden extraer de las tablas de verdad representadas. (qn es el siguiente bit codificado de estado para cada máquina de estado, yq es el estado actual)
(000) equivalente a q (2) 'q (1)' q (0) ', y (0000) equivalente a q (3)' q (2) 'q (1)' q (0) '
(ej. (0101) es q (3) 'q (2) q (1)' q (0) y (110) es q (2) q (1) q (0) ')
Ecuaciones de excitación para el fsm principal:
- qn (2) = (ms) '(ns)
- qn (1) = (ms) '(ns)' + (ms) (orx) '[(td) (001) + (010)] + (ms) [(011) + (100)]
- qn (0) = (ms) '(ns)' + (ms) (orx) '[(000) + (td)' (001)]
Ecuaciones de salida para el fsm principal:
- luces = (000) + (001) + (100)
- temporizador = (001)
Ecuaciones de excitación para el contador regresivo fsm:
- qn (3) = t [(0000) + (1010) + (1001) + (0001)]
- qn (2) = t [(1000) + (0111) + (0110) + (0101) + (0001)]
- qn (1) = t [(0000) + (1000) + (0111) + (0100) + (0011) + (0001)]
- qn (0) = t [(1010) + (1000) + (0110) + (0100) + (0010) + (0001)]
Ecuaciones de salida para el contador regresivo fsm:
- td = (1111)
- contenedor (3) = (1010) + (1001) + (1000) + (1111) + (0000)
- contenedor (2) = (0111) + (0110) + (0101) + (0100) + (1111) + (0000)
- contenedor (1) = (1010) + (0111) + (0110) + (0011) + (0010) + (1111) + (0000)
- bin (0) = (1001) + (0111) + (0101) + (0011) + (0001) + (1111) + (0000)
Paso 4: Contenedor, submódulos y restricción
Como ya se explicó en el Paso 1, estos módulos son necesarios para este proyecto y todos están vinculados con el módulo contenedor titulado "final_proj.vhd". El archivo de restricción titulado "Basys3_Master.xdc" se utiliza para vincular todas las entradas y salidas del contenedor a los conmutadores, los siete segmentos y los puertos de E / S en la placa Basys 3. El interruptor principal debe ser el interruptor en el tablero más cercano al lado en el que están los cables, el interruptor normal / manual es el segundo más cercano, y los tres interruptores que representan los tres sensores de movimiento son los tres interruptores inmediatamente al lado del interruptor normal / manual. Todo el código (ecuaciones booleanas, declaraciones de módulos, etc.) ya está escrito en los archivos, por lo que no tiene que escribir nada más para que esto funcione.
Paso 5: Puertos de E / S para LED
El último paso para este proyecto es usar un LED para mostrar si (las luces) realmente se encienden y apagan. El cableado se muestra en las dos imágenes. Asegúrese de que haya una resistencia en serie con el led (al menos 330 ohmios) para no quemar el led y asegúrese de que el pin largo del led esté conectado al mismo cabezal hembra en la placa basys como se muestra el cable rojo (arriba más a la derecha) y el pin más corto está conectado a tierra, el mismo conector hembra que el cable negro que se muestra (arriba, segundo desde la izquierda).
Recomendado:
Cómo hacer una antena 4G LTE Doble BiQuade Pasos sencillos: 3 pasos
Cómo hacer una antena 4G LTE Doble BiQuade Pasos sencillos: La mayoría de las veces que me enfrenté, no tengo una buena intensidad de señal para mis trabajos diarios. Entonces. Busco y pruebo diferentes tipos de antena pero no trabajo. Después de perder el tiempo, encontré una antena que espero hacer y probar, porque es un principio de construcción, no
Diseño de juegos en Flick en 5 pasos: 5 pasos
Diseño de juegos en Flick en 5 pasos: Flick es una forma realmente sencilla de hacer un juego, especialmente algo como un rompecabezas, una novela visual o un juego de aventuras
Detección facial en Raspberry Pi 4B en 3 pasos: 3 pasos
Detección de rostros en Raspberry Pi 4B en 3 pasos: En este Instructable vamos a realizar la detección de rostros en Raspberry Pi 4 con Shunya O / S usando la Biblioteca Shunyaface. Shunyaface es una biblioteca de reconocimiento / detección de rostros. El proyecto tiene como objetivo lograr la velocidad de detección y reconocimiento más rápida con
¿Cómo hacer un contador de pasos ?: 3 pasos (con imágenes)
¿Cómo hacer un contador de pasos ?: Solía desempeñarme bien en muchos deportes: caminar, correr, andar en bicicleta, jugar al bádminton, etc. Me encanta andar en bicicleta para viajar en poco tiempo. Bueno, mira mi corpulento vientre … Bueno, de todos modos, decido volver a hacer ejercicio. ¿Qué equipo debo preparar?
Espejo de tocador de bricolaje en sencillos pasos (usando tiras de luces LED): 4 pasos
Espejo de tocador de bricolaje en sencillos pasos (usando tiras de luces LED): En esta publicación, hice un espejo de tocador de bricolaje con la ayuda de las tiras de LED. Es realmente genial y debes probarlos también