Table des matières:
- Étape 1: Diagramme de la boîte noire
- Étape 2: Machines d'état
- Étape 3: Tables de vérité de la machine à états, équations d'excitation et équations de sortie
- Étape 4: Wrapper, sous-modules et contraintes
- Étape 5: Ports d'E/S pour LED
Vidéo: L I G H T S : 5 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:09
Le but de ce projet final était de créer quelque chose qui se concentrerait sur la durabilité et mettrait en œuvre des concepts de conception numérique, et pour ce faire, j'ai décidé de concevoir un système d'économie d'énergie évolutif utilisant vhdl et conçu pour la carte Basys 3 (série Artix-7 35T). Évolutif car n'importe quel nombre de capteurs peut être installé dans une pièce et n'importe quel nombre de ces systèmes peut être installé autour d'un bâtiment ou d'une maison. Ce que ce système ferait, c'est théoriquement économiser des milliers de dollars dans les bâtiments commerciaux et réduire un grand pourcentage de la consommation d'énergie dans les petites communautés résidentielles en mettant en œuvre un système connecté de lumières à commande active et passive, de détecteurs de mouvement, de minuteries affichées sur sept écrans à segments, et interrupteurs de commande. Cet exemple traite d'un système unique avec trois détecteurs de mouvement, un interrupteur principal, un interrupteur manuel/normal, quatre affichages à sept segments et une seule lumière que le système contrôle.
Par exemple, dans une pièce choisie, plusieurs détecteurs de mouvement seraient placés autour (cet exemple de conception en a trois), et chacun enverrait un signal (1) s'il détecte un mouvement et (0) s'il ne le fait pas. Si au moins un des détecteurs de mouvement détecte un mouvement, les lumières s'allument si elles ne sont pas déjà allumées et restent allumées si déjà allumées. A tout moment, tous les détecteurs de mouvement ne détectent rien, une minuterie commence à décompter pendant un laps de temps défini (réglable en code), et les lumières restent allumées pendant que la minuterie décompte. Une fois le compte à rebours terminé, il s'arrête et les lumières s'éteignent. Si au moins un détecteur de mouvement détecte un mouvement pendant le compte à rebours, celui-ci s'arrête et se réinitialise. Et si au moins un détecteur de mouvement détecte un mouvement alors que les lumières sont éteintes, les lumières s'allument immédiatement.
Ce système a deux modes, un avec la minuterie comme indiqué ci-dessus, et un second où il y a un interrupteur qui contrôle les lumières manuellement (ignorant les capteurs). Il existe un interrupteur principal qui permet à l'utilisateur de choisir le mode qu'il souhaite utiliser en fonction de celui qui, selon lui, économisera plus d'énergie dans l'ensemble. Ex. Une pièce telle qu'un couloir pourrait bénéficier du mode de minuterie passive - les utilisateurs ne savent pas quand les gens vont passer, mais allumer et éteindre les lumières chaque fois qu'ils entrent et sortent serait un inconvénient, alors qu'une pièce telle comme une chambre avec un seul utilisateur serait mieux actionnée manuellement. Et l'interrupteur principal serait utile dans des cas tels que si la personne vivant dans la chambre devait partir pendant une période prolongée, alors l'interrupteur principal pourrait être éteint et le mode minuterie fonctionnerait pour économiser de l'énergie plus efficacement.
Donc, dans ce système, il y a deux machines à états, l'une est la machine à états principale et une autre pour le compte à rebours. La machine d'état principale a cinq états définis comme tels: 1. "lumières allumées, mouvement détecté" (id = 000), 2. "lumières allumées, aucun mouvement détecté" (id = 001), 3. "lumières éteintes, pas de mouvement détecté" (id = 010), 4. "manuellement allumé" (id = 011), et 5. "manuellement éteint" (id = 100). Cette machine d'état principale a quatre entrées: le commutateur principal (ms), le commutateur manuel/normal (ns), un signal qui est haut lorsqu'au moins un commutateur détecte un mouvement, et est bas sinon (orx), et un signal qui est élevé une fois la minuterie terminée, et faible sinon (td). La machine d'état principale a deux sorties: des lumières (lumières) et un signal qui indique quand allumer le compte à rebours (minuterie) ou (t) (les deux sont utilisés de manière interchangeable).
La deuxième machine à états, le compte à rebours, a 12 états: 10 d'entre eux ont des identifiants associés au nombre que les sept segments affichent - "seg 10" (id = 1010), "seg 9" (id = 1001), […], "seg 2" (id = 0010), "seg 1" (id = 0001), et les deux autres états affichent tous les deux zéro, ce qui représente la minuterie étant éteinte- donc il y a le premier "blanc 1" vide (id = 1111) et le deuxième blanc "blank 2" (id = 0000). Le compte à rebours a une entrée: timer (t), et trois sorties: le nombre affiché en binaire avec quatre bits (bin) et un signal indiquant que le timer est terminé (td).
Étape 1: Diagramme de la boîte noire
Il s'agit d'un aperçu de la façon dont l'ensemble du système est censé fonctionner et est décrit avec un diagramme en boîte noire.
- L'horloge est utilisée pour cadencer la machine à états principale et le décodeur à sept segments; une horloge plus lente est nécessaire pour le décompteur, il y a donc un module diviseur d'horloge qui prend l'entrée d'horloge et produit une horloge plus lente pour le décompteur.
- La variable intermédiaire (orx) dans l'emballage est liée aux capteurs de mouvement et sera élevée si au moins un des capteurs détecte quelque chose, et faible sinon; l'équation booléenne pour cela est simplement orx = s(2) ou s(1) ou s(0).
-
Le fsm principal contrôle l'état général dans lequel se trouve le système, en fonction des entrées (orx, ms, ns, td) et sort l'état actuel dans lequel il se trouve (sm) illustré simplifié avec les deux signaux pour lesquels il est utilisé (minuterie et lumières).
- (timer) est un signal wrapper qui est envoyé au décompteur fsm en tant qu'entrée et est contrôlé par l'état actuel du fsm principal. Il indique quand allumer la minuterie.
- (lumières) est un signal d'enveloppe est utilisé pour contrôler la led et est contrôlé par l'état actuel du fsm principal.
-
Le décompteur fsm contrôle ce que les sept segments affichent en fonction de l'entrée (minuterie) et affiche l'état actuel dans lequel il se trouve (sd) illustré simplifié avec les deux signaux pour lesquels il est utilisé (td et bin).
- (td) est un signal wrapper qui est envoyé au fsm principal en tant qu'entrée et est contrôlé par l'état actuel du décompteur fsm. Il fonctionne comme un signal de retour qui indique quand la minuterie est terminée.
- (bin) est un signal d'enveloppe de quatre bits qui est concaténé avec quatre bits de zéro ("0000" et bin) et les huit bits combinés sont envoyés à (q), un signal d'enveloppe de huit bits, qui est à son tour envoyé aux sept décodeur de segment sous (ALU_VAL).
-
Le module à sept segments est le même que sur Polylearn; ses entrées principales prennent un nombre de 8 bits (bin) à (ALU_VAL) pour s'afficher sur quatre affichages différents à sept segments en utilisant les sorties (SEGMENTS) pour envelopper le signal (seg) et (DISP_EN) pour envelopper (disp_en).
- Étant donné que deux affichages à sept segments ou plus ne peuvent pas afficher des chiffres différents en même temps, une horloge est nécessaire pour faire défiler les quatre sseg, affichant le chiffre approprié à la fois pour chaque sseg étant allumé individuellement, et un cycle assez rapide rend le ssegs semblent être activés en même temps.
- (signe et valide) sont constants tout au long de ce programme, donc (signe) est défini en permanence à un niveau bas et (valide) est défini en permanence à un niveau haut.
- (ALU_VAL) prend en entrée le signal wrapper (q) qui représente le nombre qui sera affiché sur l'affichage à sept segments en binaire.
- La sortie (SEGMENTS) est envoyée à un signal d'enveloppe à huit bits (seg) et (DISP_EN) à un signal d'enveloppe à quatre bits (disp_en).
-
Il existe également un module de bascule D non explicitement montré dans le schéma mais est nécessaire pour les deux machines à états en tant que sous-modules et aide la transition des états de manière synchrone.
- (3) d'entre eux sont nécessaires pour le fsm principal puisque 2^(3) = 8 > 5 états pour l'encodage
- (4) d'entre eux sont nécessaires pour le décompteur fsm puisque 2^4 = 16 > 12 états pour l'encodage
Étape 2: Machines d'état
Pour concevoir correctement les deux machines à états, les états individuels doivent être définis clairement, avec ses sorties et l'état vers lequel il passe en fonction des différentes entrées possibles.
Principaux états de fsm:
« Lumières allumées, mouvement détecté » (id = 000)
Les lumières sont allumées, au moins un des détecteurs de mouvement détecte un mouvement, donc orx doit être élevé et ms est activé.
- Sorties: lumières = 1 et minuterie = 0
- Reste dans cet état lorsque ms = 1 et orx = 1.
- Passe à l'état « lumières allumées, aucun mouvement détecté » si ms = 1 et orx = 0.
- Passe à l'état « allumé manuellement » si ms = 0 et ns = 1.
- Passe à l'état « désactivé manuellement » si ms = 0 et ns = 0.
« Lumières allumées, aucun mouvement détecté » (id = 001)
Les lumières sont allumées, aucun mouvement détecté par aucun détecteur de mouvement, donc orx doit être faible et ms est activé. Également au début de cet état, la minuterie réglée sur haut indique au compte à rebours fsm de commencer le compte à rebours, procède au compte à rebours et arrête le compte à rebours une fois que le compte à rebours fsm indique à ce fsm qu'il a fini de compter.
- Sorties: lumières = 1 et minuterie = 1.
- Reste dans cet état lorsque ms = 1 et orx = 0 et td (le minuteur est terminé) = 0.
- Passe à l'état « lumières allumées, mouvement détecté » si ms = 1 et orx = 1.
- Va à l'état « lumières éteintes, aucun mouvement détecté » si ms = 1 et orx = 0 et td = 1.
- Passe à l'état « allumé manuellement » si ms = 0 et ns = 1.
- Passe à l'état « désactivé manuellement » si ms = 0 et ns = 0.
« Feux éteints, aucun mouvement détecté » (id = 010)
Les lumières sont éteintes, aucun mouvement détecté par aucun capteur de mouvement et la minuterie a terminé le compte à rebours, donc orx doit être faible, ms est activé et td est éteint.
- Sorties: lumières = 0 et minuterie = 0.
- Reste dans cet état lorsque ms = 1 et orx = 0.
- Passe à l'état "lumières allumées, mouvement détecté" si ms = 1 et orx =1.
- Passe à l'état « allumé manuellement » si ms = 0 et ns = 1.
- Passe à l'état « désactivé manuellement » si ms = 0 et ns = 0.
« Allumé manuellement » (id = 011)
Les lumières sont allumées, les détecteurs de mouvement ne sont pas pertinents, donc ms est désactivé et ns est activé.
- Sorties: lumières = 1 et minuterie = 0.
- Reste dans cet état lorsque ms = 0 et ns = 1.
- Passe à l'état « désactivé manuellement » si ms = 0 et ns = 0.
- Passe à l'état « lumières éteintes, aucun mouvement détecté si ms = 1.
« Désactivé manuellement » (id = 100)
Les lumières sont éteintes, les détecteurs de mouvement ne sont pas pertinents, donc ms est désactivé et ns est désactivé.
- Sorties: lumières = 0 et minuterie = 0.
- Reste dans cet état lorsque ms = 0 et ns = 0.
- Passe à l'état « allumé manuellement » si ms = 0 et ns = 1.
- Passe à l'état « lumières éteintes, aucun mouvement détecté si ms = 1.
Le décompte indique:
"Seg 10" (id = 1010)
L'affichage à sept segments affiche un 10.
- Sorties: bin = « 1010 » et td = 0.
- Va à l'état "seg 9" si timer = 1.
- Va à l'état "vide 2" si timer = 0.
"Seg 9" (id = 1001)
L'affichage à sept segments affiche un 9.
- Sorties: bin = « 1001 » et td = 0.
- Va à l'état "seg 8" si timer = 1.
- Va à l'état "vide 2" si timer = 0.
(Les états "Seg 8" jusqu'à "Seg 2" sont omis car ils suivent le même schéma que "Seg 10" et "Seg 9" et ne sont pas nécessaires pour l'explication)
"Seg 1" (id = 0001)
L'affichage à sept segments affiche un 1.
- Sorties: bin = « 0001 » et td = 0.
- Passe à l'état « vide 2 » sur le prochain front montant de l'horloge (aucune entrée nécessaire).
« Vide 2 » (id = 1111)
L'affichage à sept segments affiche un 0. Le but d'un deuxième état vide est de créer un état séparé lorsque td = 1 pour la sécurité.
- Sorties: bin = "1111" et td = 1.
- Passe à l'état « vide 1 » sur le prochain front montant de l'horloge (aucune entrée nécessaire).
« Vide 1 » (identifiant = 0000)
L'affichage à sept segments affiche un 0. C'est l'état dans lequel le système reste lorsque la machine d'état principale est dans l'état « lumières éteintes, aucun mouvement détecté ».
- Sorties: bin = « 0000 » et td = 0.
- Va à l'état "seg 10" si timer = 1.
Étape 3: Tables de vérité de la machine à états, équations d'excitation et équations de sortie
L'étape suivante consiste à créer des tables de vérité pour les deux machines à états et des équations d'excitation et des équations de sortie pour chaque fsm. Pour chaque équation d'excitation fsm, il doit y avoir des équations pour chaque bit codé d'état suivant en termes d'état actuel et de ses signaux d'entrée. Pour chaque équation de sortie fsm, il doit y avoir des équations pour chaque signal de sortie en termes d'état actuel. Les quatre ensembles d'équations peuvent être tirés des tables de vérité représentées. (qn est le bit codé d'état suivant pour chaque machine d'état, et q est l'état actuel)
(000) équivalent à q(2)'q(1)'q(0)', et (0000) équivalent à q(3)'q(2)'q(1)'q(0)'
(ex. (0101) est q(3)'q(2)q(1)'q(0) et (110) est q(2)q(1)q(0)')
Équations d'excitation pour le 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)]
Équations de sortie pour le fsm principal:
- lumières = (000) + (001) + (100)
- minuteur = (001)
Équations d'excitation pour le décompteur 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)]
Équations de sortie pour le décompteur 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)
Étape 4: Wrapper, sous-modules et contraintes
Comme expliqué déjà à l'étape 1, ces modules sont nécessaires pour ce projet et sont tous liés avec le module wrapper intitulé "final_proj.vhd". Le fichier de contraintes intitulé "Basys3_Master.xdc" est utilisé pour relier toutes les entrées et sorties du wrapper aux commutateurs, aux sept segments et aux ports d'E/S de la carte Basys 3. L'interrupteur principal doit être l'interrupteur sur la carte le plus proche du côté où les fils sont allumés, l'interrupteur normal/manuel est le deuxième le plus proche, et les trois interrupteurs représentant les trois capteurs de mouvement sont les trois interrupteurs immédiatement à côté de l'interrupteur normal/manuel. Tout le code (équations booléennes, déclarations de modules, etc.) est déjà écrit dans les fichiers, vous n'avez donc rien à écrire d'autre pour que cela fonctionne.
Étape 5: Ports d'E/S pour LED
La dernière étape de ce projet consiste à utiliser une led pour montrer si oui ou non (les lumières) s'allument et s'éteignent réellement. Le câblage est montré dans les deux images. Assurez-vous qu'il y a une résistance en série avec la led (au moins 330 ohms) pour ne pas griller la led et assurez-vous que la longue broche de la led est connectée à la même embase femelle sur la carte basys que le fil rouge est montré (en haut la plus à droite) et la broche la plus courte est connectée à la terre, la même embase femelle que le fil noir illustré (en haut, deuxième à partir de la gauche).
Conseillé:
Comment fabriquer une antenne double biquade 4G LTE en quelques étapes faciles : 3 étapes
Comment créer une antenne double biquade 4G LTE Étapes faciles : La plupart du temps, je n'ai pas une bonne force de signal pour mes travaux quotidiens. Donc. Je recherche et essaye différents types d'antenne mais ne fonctionne pas. Après une perte de temps, j'ai trouvé une antenne que j'espère fabriquer et tester, car ce n'est pas un principe de construction
Game Design dans Flick en 5 étapes : 5 étapes
Game Design dans Flick en 5 étapes : Flick est un moyen très simple de créer un jeu, en particulier quelque chose comme un puzzle, un roman visuel ou un jeu d'aventure
Système d'alerte de stationnement en marche arrière Arduino - Étapes par étape : 4 étapes
Système d'alerte de stationnement en marche arrière Arduino | Étapes par étape : dans ce projet, je vais concevoir un circuit de capteur de stationnement inversé pour voiture Arduino simple à l'aide d'un capteur à ultrasons Arduino UNO et HC-SR04. Ce système d'alerte de marche arrière basé sur Arduino peut être utilisé pour une navigation autonome, une télémétrie de robot et d'autres r
Détection de visage sur Raspberry Pi 4B en 3 étapes : 3 étapes
Détection de visage sur Raspberry Pi 4B en 3 étapes : dans ce Instructable, nous allons effectuer une détection de visage sur Raspberry Pi 4 avec Shunya O/S en utilisant la bibliothèque Shunyaface. Shunyaface est une bibliothèque de reconnaissance/détection de visage. Le projet vise à atteindre la vitesse de détection et de reconnaissance la plus rapide avec
Miroir de vanité de bricolage en étapes faciles (à l'aide de bandes lumineuses à LED): 4 étapes
Miroir de vanité DIY en étapes faciles (à l'aide de bandes lumineuses à LED) : Dans cet article, j'ai fabriqué un miroir de vanité DIY à l'aide des bandes LED. C'est vraiment cool et vous devez les essayer aussi