Índice:
- Etapa 1: Diagrama de caixa preta
- Etapa 2: máquinas de estado
- Etapa 3: tabelas de verdade da máquina de estado, equações de excitação e equações de saída
- Etapa 4: Wrapper, submódulos e restrição
- Etapa 5: Portas de E / S para LED
Vídeo: L I G H T S: 5 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:39
O objetivo deste projeto final era criar algo que se concentrasse na sustentabilidade e implementasse conceitos de design digital e, para fazer isso, decidi projetar um sistema de economia de energia escalonável usando vhdl e feito para a placa Basys 3 (série Artix-7 35T) Escalável porque qualquer número de sensores pode ser colocado em uma sala e qualquer número desses sistemas pode ser colocado ao redor de um edifício ou uma casa. O que este sistema faria é, teoricamente, economizar milhares de dólares em prédios comerciais e diminuir uma grande porcentagem do consumo de energia em comunidades residenciais menores, implementando um sistema conectado de luzes controladas ativa e passivamente, detectores de movimento, temporizadores exibidos em telas de sete segmentos e interruptores de controle. Este exemplo trata de um único sistema com três detectores de movimento, uma chave mestre, uma chave manual / normal, quatro telas de sete segmentos e uma única luz que os controles do sistema.
Por exemplo, em uma sala escolhida, vários detectores de movimento seriam colocados ao redor (este projeto de exemplo tem três), e cada um enviaria um sinal (1) se detectar movimento e (0) se não. Se pelo menos um dos detectores de movimento detectar movimento, as luzes acendem se já não estiverem acesas e permanecem acesas se já estiverem acesas. A qualquer momento, todos os detectores de movimento não detectam nada, um cronômetro começa a contagem regressiva por um determinado período de tempo (ajustável em código) e as luzes permanecem acesas enquanto o cronômetro faz a contagem regressiva. Quando a contagem regressiva termina, o cronômetro para e as luzes se apagam. Se pelo menos um detector de movimento detecta movimento enquanto o cronômetro está em contagem regressiva, o cronômetro para e reinicia. E se pelo menos um detector de movimento detecta movimento enquanto as luzes estão apagadas, as luzes se acendem imediatamente.
Este sistema possui dois modos, um com o temporizador conforme indicado acima, e um segundo onde há um interruptor que controla as luzes manualmente (ignorando os sensores). Há um interruptor mestre que permite ao usuário escolher o modo que deseja usar com base em qualquer um que ache que irá economizar mais energia no geral. Ex. Uma sala como um corredor pode se beneficiar do modo de temporizador passivo - os usuários não têm certeza de quando as pessoas passarão, mas ligar e desligar as luzes cada vez que elas entrarem e saírem seria um inconveniente, enquanto uma sala assim como um quarto com um único usuário, seria melhor operado manualmente. E o interruptor mestre seria útil em casos como se a pessoa que mora no quarto fosse sair por um longo período de tempo, então o interruptor mestre poderia ser desligado e o modo do temporizador funcionaria para economizar energia com mais eficiência.
Portanto, neste sistema, há duas máquinas de estado, uma é a máquina de estado principal e outra para o cronômetro de contagem regressiva. A máquina de estado principal tem cinco estados definidos como: 1. "luzes acesas, movimento detectado" (id = 000), 2. "luzes acesas, nenhum movimento detectado" (id = 001), 3. "luzes apagadas, nenhum movimento detectado "(id = 010), 4." ligado manualmente "(id = 011) e 5." desligado manualmente "(id = 100). Esta máquina de estado principal tem quatro entradas: a chave mestre (ms), a chave manual / normal (ns), um sinal que é alto quando pelo menos uma chave detecta movimento e é baixo caso contrário (orx), e um sinal que é alto quando o cronômetro termina e baixo caso contrário (td). A máquina de estado principal tem duas saídas: luzes (luzes) e um sinal que indica quando ligar o cronômetro de contagem regressiva (cronômetro) ou (t) (ambos são usados alternadamente).
A segunda máquina de estado, o temporizador de contagem regressiva, tem 12 estados: 10 deles têm ids associados ao número que o segmento de sete está exibindo - “seg 10” (id = 1010), “seg 9” (id = 1001), […], “Seg 2” (id = 0010), “seg 1” (id = 0001) e os outros dois estados exibem zero, representando o temporizador desativado - portanto, há o primeiro espaço em branco "em branco 1" (id = 1111) e o segundo espaço em branco "espaço em branco 2" (id = 0000). O cronômetro regressivo tem uma entrada: cronômetro (t) e três saídas: o número exibido em binário com quatro bits (bin) e um sinal indicando que o cronômetro terminou (td).
Etapa 1: Diagrama de caixa preta
Esta é uma visão geral de como todo o sistema deve operar e é descrita com um diagrama de caixa preta.
- O clock é usado para cronometrar a máquina de estado principal e o decodificador de sete segmentos; um relógio mais lento é necessário para o contador decrescente, portanto, há um módulo divisor de relógio que recebe a entrada do relógio e produz um relógio mais lento para o contador decrescente.
- A variável intermediária (orx) no invólucro está ligada aos sensores de movimento e será alta se pelo menos um dos sensores detectar algo, e baixa caso contrário; a equação booleana para isso é apenas orx = s (2) ou s (1) ou s (0).
-
O fsm principal controla em qual estado geral o sistema está, dependendo das entradas (orx, ms, ns, td) e produz o estado atual em (sm) mostrado simplificado com os dois sinais para os quais é usado (temporizador e luzes).
- (temporizador) é um sinal de invólucro que é enviado para o contador descendente fsm como sua entrada e é controlado pelo estado atual do fsm principal. Indica quando ligar o cronômetro.
- (luzes) é um sinal de invólucro usado para controlar o led e é controlado pelo estado atual do fsm principal.
-
O fsm do contador descendente controla o que o segmento de sete exibe, dependendo da entrada (temporizador) e produz o estado atual em (sd) mostrado simplificado com os dois sinais para os quais é usado (td e bin).
- (td) é um sinal de invólucro enviado para o fsm principal como sua entrada e é controlado pelo estado atual do fsm do contador descendente. Funciona como um sinal de feedback que indica quando o cronômetro termina.
- (bin) é um sinal de wrapper de quatro bits que é concatenado com quatro bits de zero ("0000" e bin) e os oito bits combinados são enviados para (q), um sinal de wrapper de oito bits, que por sua vez é enviado para os sete decodificador de segmento em (ALU_VAL).
-
O módulo de sete segmentos é o mesmo do Polylearn; suas entradas principais levam um número de 8 bits (bin) para (ALU_VAL) para exibir em quatro telas diferentes de sete segmentos usando as saídas (SEGMENTOS) para o sinal do invólucro (seg) e (DISP_EN) para o invólucro (disp_en).
- Uma vez que dois ou mais displays de sete segmentos não podem exibir dígitos diferentes ao mesmo tempo, um relógio é necessário para percorrer os quatro ssegs, exibindo o dígito apropriado por vez para cada sseg sendo ativado individualmente, e o ciclo rápido o suficiente torna o ssegs parecem estar ligados ao mesmo tempo.
- (sinal e válido) são constantes ao longo deste programa, portanto (sinal) é definido permanentemente baixo e (válido) é definido permanentemente alto.
- (ALU_VAL) recebe o sinal do invólucro (q) como uma entrada, que representa o número que será exibido no display de sete segmentos em binário.
- A saída (SEGMENTS) é enviada para um sinal de wrapper de oito bits (seg) e (DISP_EN) para um sinal de wrapper de quatro bits (disp_en).
-
Há também um módulo flip-flop D não mostrado explicitamente no diagrama, mas é necessário para as duas máquinas de estado como submódulos e ajuda a transição de estados de forma síncrona.
- (3) destes são necessários para o fsm principal, uma vez que 2 ^ (3) = 8> 5 estados para codificação
- (4) destes são necessários para o contador descendente fsm, uma vez que 2 ^ 4 = 16> 12 estados para codificação
Etapa 2: máquinas de estado
Para projetar adequadamente as duas máquinas de estado, os estados individuais precisam ser definidos claramente, com suas saídas e o estado para o qual faz a transição com base nas diferentes entradas possíveis.
Principais estados de fsm:
“Luzes acesas, movimento detectado” (id = 000)
As luzes estão acesas, pelo menos um dos detectores de movimento detecta movimento, então orx deve estar alto e ms está ligado.
- Saídas: luzes = 1 e temporizador = 0
- Permanece neste estado quando ms = 1 e orx = 1.
- Vai para o estado “luzes acesas, nenhum movimento detectado” se ms = 1 e orx = 0.
- Vai para o estado “ligado manualmente” se ms = 0 e ns = 1.
- Vai para o estado “desligado manualmente” se ms = 0 e ns = 0.
“Luzes acesas, nenhum movimento detectado” (id = 001)
As luzes estão acesas, nenhum movimento detectado de qualquer detector de movimento, então orx deve estar baixo e ms está ligado. Além disso, no início deste estado, o cronômetro sendo definido como alto diz ao fsm de contagem regressiva para iniciar a contagem regressiva, continua a contagem regressiva e para a contagem regressiva assim que o fsm de contagem regressiva diz a este fsm que terminou a contagem.
- Saídas: luzes = 1 e temporizador = 1.
- Permanece neste estado quando ms = 1 e orx = 0 e td (temporizador concluído) = 0.
- Vai para o estado “luzes acesas, movimento detectado” se ms = 1 e orx = 1.
- Vai para o estado "luzes apagadas, nenhum movimento detectado" se ms = 1 e orx = 0 e td = 1.
- Vai para o estado “ligado manualmente” se ms = 0 e ns = 1.
- Vai para o estado “desligado manualmente” se ms = 0 e ns = 0.
“Luzes apagadas, nenhum movimento detectado” (id = 010)
As luzes estão apagadas, nenhum movimento detectado de qualquer sensor de movimento e o cronômetro terminou a contagem regressiva, então orx deve estar baixo, ms está ligado e td está desligado.
- Saídas: luzes = 0 e temporizador = 0.
- Permanece neste estado quando ms = 1 e orx = 0.
- Vai para o estado “luzes acesas, movimento detectado” se ms = 1 e orx = 1.
- Vai para o estado “ligado manualmente” se ms = 0 e ns = 1.
- Vai para o estado “desligado manualmente” se ms = 0 e ns = 0.
“Ligado manualmente” (id = 011)
As luzes estão acesas, os detectores de movimento são irrelevantes, então ms está desligado e ns está ligado.
- Saídas: luzes = 1 e temporizador = 0.
- Permanece neste estado quando ms = 0 e ns = 1.
- Vai para o estado “desligado manualmente” se ms = 0 e ns = 0.
- Vai para o estado “luzes apagadas, nenhum movimento detectado se ms = 1.
“Desligado manualmente” (id = 100)
As luzes estão apagadas, os detectores de movimento são irrelevantes, então ms está desligado e ns está desligado.
- Saídas: luzes = 0 e temporizador = 0.
- Permanece neste estado quando ms = 0 e ns = 0.
- Vai para o estado “ligado manualmente” se ms = 0 e ns = 1.
- Vai para o estado “luzes apagadas, nenhum movimento detectado se ms = 1.
Estados de contagem decrescente:
“Seg 10” (id = 1010)
O display de sete segmentos mostra um 10.
- Saídas: bin = “1010” e td = 0.
- Vai para o estado “seg 9” se temporizador = 1.
- Vai para o estado “em branco 2” se cronômetro = 0.
“Seg 9” (id = 1001)
O display de sete segmentos mostra um 9.
- Saídas: bin = “1001” e td = 0.
- Vai para o estado “seg 8” se timer = 1.
- Vai para o estado “vazio 2” se temporizador = 0.
(Estados "Seg 8" até "Seg 2" são omitidos porque seguem o mesmo padrão que "Seg 10" e "Seg 9" e não são necessários para explicação)
“Seg 1” (id = 0001)
O display de sete segmentos mostra um 1.
- Saídas: bin = “0001” e td = 0.
- Vai para o estado “vazio 2” na próxima borda ascendente do relógio (nenhuma entrada necessária).
“Branco 2” (id = 1111)
O display de sete segmentos mostra um 0. O propósito de um segundo estado em branco é para que haja um estado separado para quando td = 1 para segurança.
- Saídas: bin = “1111” e td = 1.
- Vai para o estado “em branco 1” na próxima borda ascendente do relógio (nenhuma entrada necessária).
“Branco 1” (id = 0000)
O display de sete segmentos mostra um 0. Este é o estado em que o sistema permanece quando a máquina de estado principal está no estado “luzes apagadas, nenhum movimento detectado”.
- Saídas: bin = “0000” e td = 0.
- Vai para o estado “seg 10” se temporizador = 1.
Etapa 3: tabelas de verdade da máquina de estado, equações de excitação e equações de saída
A próxima etapa é criar tabelas verdade para as duas máquinas de estado e equações de excitação e equações de saída para cada fsm. Para cada equação de excitação fsm, deve haver equações para cada bit codificado de próximo estado em termos do estado atual e seus sinais de entrada. Para cada equação de saída fsm, deve haver equações para cada sinal de saída em termos do estado atual. Todos os quatro conjuntos de equações podem ser extraídos das tabelas de verdade representadas. (qn é o próximo bit codificado de estado para cada máquina de estado, e q é o estado atual)
(000) equivalente a q (2) 'q (1)' q (0) ', e (0000) equivalente a q (3)' q (2) 'q (1)' q (0) '
(por exemplo, (0101) é q (3) 'q (2) q (1)' q (0) e (110) é q (2) q (1) q (0) ')
Equações de excitação para o 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)]
Equações de saída para o fsm principal:
- luzes = (000) + (001) + (100)
- temporizador = (001)
Equações de excitação para o fsm do contador descendente:
- 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)]
Equações de saída para o contador decrescente fsm:
- td = (1111)
- bin (3) = (1010) + (1001) + (1000) + (1111) + (0000)
- bin (2) = (0111) + (0110) + (0101) + (0100) + (1111) + (0000)
- bin (1) = (1010) + (0111) + (0110) + (0011) + (0010) + (1111) + (0000)
- bin (0) = (1001) + (0111) + (0101) + (0011) + (0001) + (1111) + (0000)
Etapa 4: Wrapper, submódulos e restrição
Conforme explicado na Etapa 1, esses módulos são necessários para este projeto e estão todos vinculados ao módulo wrapper intitulado "final_proj.vhd". O arquivo de restrição intitulado "Basys3_Master.xdc" é usado para vincular todas as entradas e saídas do wrapper aos switches, os sete segmentos e as portas de E / S na placa Basys 3. O interruptor mestre deve ser o interruptor na placa mais próximo do lado em que os fios estão ligados, o interruptor normal / manual é o segundo mais próximo e os três interruptores que representam os três sensores de movimento são os três interruptores imediatamente ao lado do interruptor normal / manual. Todo o código (equações booleanas, declarações de módulo, etc) já está escrito nos arquivos, então você não precisa escrever mais nada para fazer este trabalho.
Etapa 5: Portas de E / S para LED
A última etapa deste projeto é usar um led para mostrar se (as luzes) realmente acendem e apagam. A fiação é mostrada nas duas fotos. Certifique-se de que haja um resistor em série com o led (pelo menos 330 ohms) para não queimar o led e certifique-se de que o pino longo do led esteja conectado ao mesmo conector fêmea na placa basys conforme o fio vermelho é mostrado (topo mais à direita) e o pino mais curto é conectado ao aterramento, o mesmo conector fêmea do fio preto mostrado (topo, segundo da esquerda).
Recomendado:
Como fazer uma antena dupla BiQuade 4G LTE Etapas fáceis: 3 etapas
Como Fazer Antena Dupla BiQuade 4G LTE Etapas fáceis: Na maioria das vezes que enfrentei, não tenho uma boa intensidade de sinal para meus trabalhos do dia-a-dia. Então. Procuro e tento diferentes tipos de antena, mas não funciona. Depois de perder tempo, encontrei uma antena que espero fazer e testar, porque não é um princípio de construção
Design de jogo no Flick em 5 etapas: 5 etapas
Design de jogos no Flick em 5 etapas: o Flick é uma maneira realmente simples de fazer um jogo, especialmente algo como um quebra-cabeça, romance visual ou jogo de aventura
Detecção de rosto no Raspberry Pi 4B em 3 etapas: 3 etapas
Detecção de rosto no Raspberry Pi 4B em 3 etapas: Neste Instructable, vamos realizar a detecção de rosto no Raspberry Pi 4 com Shunya O / S usando a Biblioteca Shunyaface. Shunyaface é uma biblioteca de reconhecimento / detecção de rosto. O projeto visa alcançar a detecção mais rápida e velocidade de reconhecimento com
Espelho de cortesia DIY em etapas fáceis (usando luzes de tira LED): 4 etapas
Espelho de toucador DIY em etapas fáceis (usando tiras de LED): Neste post, fiz um espelho de toucador DIY com a ajuda de tiras de LED. É muito legal e você deve experimentá-los também
Arduino Halloween Edition - Tela pop-out de zumbis (etapas com imagens): 6 etapas
Arduino Halloween Edition - Tela pop-out de zumbis (etapas com imagens): Quer assustar seus amigos e fazer barulho no Halloween? Ou apenas quer fazer uma boa pegadinha? Esta tela pop-out de zumbis pode fazer isso! Neste Instructable, vou ensiná-lo a criar facilmente zumbis usando o Arduino. O HC-SR0