Taula de continguts:
- Pas 1: diagrama de la caixa negra
- Pas 2: Màquines d'estat
- Pas 3: Taules de veritat de màquines d’estat, equacions d’excitació i equacions de sortida
- Pas 4: embolcall, submoduls i restricció
- Pas 5: ports d'E / S per LED
Vídeo: L I G H T S: 5 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
El propòsit d’aquest projecte final era crear alguna cosa que se centrés en la sostenibilitat i implementés conceptes de disseny digital i, per fer-ho, vaig decidir dissenyar un sistema d’estalvi d’energia escalable mitjançant vhdl i creat per a la placa Basys 3 (sèrie Artix-7 35T). Es pot escalar perquè es poden col·locar qualsevol nombre de sensors en una habitació i qualsevol d'aquests sistemes es pot col·locar al voltant d'un edifici o d'una casa. El que faria aquest sistema és estalviar teòricament milers de dòlars en edificis comercials i disminuir un gran percentatge del consum d’energia en comunitats residencials més petites mitjançant la implementació d’un sistema connectat de llums controlats activament i passivament, detectors de moviment, temporitzadors que es mostren en pantalles de set segments i interruptors de control. Aquest exemple tracta d'un sol sistema amb tres detectors de moviment, un commutador mestre, un interruptor manual / normal, quatre pantalles de set segments i una sola llum que el sistema controla.
Per exemple, en una habitació escollida, es col·locarien diversos detectors de moviment al voltant (aquest exemple de disseny en té tres) i cadascun enviaria un senyal (1) si detecta moviment i (0) si no. Si almenys un dels detectors de moviment detecta moviment, els llums s’encenen si no estan engegats i es mantenen encesos si ja estan engegats. En qualsevol moment, tots els detectors de moviment no detecten res, un temporitzador comença a comptar enrere durant un temps determinat (ajustable en codi) i els llums es mantenen mentre el temporitzador compta enrere. Un cop el temporitzador finalitza el compte enrere, el temporitzador s’atura i els llums s’apaguen. Si almenys un detector de moviment detecta moviment mentre el temporitzador compta enrere, el temporitzador s’atura i es reinicia. I si almenys un detector de moviment detecta moviment mentre els llums estan apagats, els llums s’encenen immediatament.
Aquest sistema té dos modes, un amb el temporitzador tal com s’ha indicat anteriorment, i un segon en què hi ha un interruptor que controla els llums manualment (ignorant els sensors). Hi ha un commutador principal que permet a l'usuari triar el mode que vol utilitzar en funció del que consideri que estalviarà més energia en general. Ex. Una habitació com un passadís podria beneficiar-se del mode de temporitzador passiu: els usuaris no estan segurs de quan passaran les persones, però encendre i apagar els llums cada vegada que entren i surten seria un inconvenient, mentre que una habitació com ja que un dormitori amb un sol usuari funcionaria millor manualment. I l’interruptor principal seria útil en casos com si la persona que viu al dormitori marxés durant un període de temps prolongat, l’interruptor principal es podria apagar i el mode temporitzador funcionaria per estalviar energia de manera més eficient.
Per tant, en aquest sistema hi ha dues màquines d’estats, una és la màquina d’estats principal i una altra per al temporitzador de compte enrere. La màquina d'estats principal té cinc estats definits com a tals: 1. "llums encesos, moviment detectat" (id = 000), 2. "llums encesos, sense moviment detectat" (id = 001), 3. "llums apagades, sense moviment detectat "(id = 010), 4." activat manualment "(id = 011) i 5." apagat manualment "(id = 100). Aquesta màquina d’estat principal té quatre entrades: l’interruptor mestre (ms), l’interruptor manual / normal (ns), un senyal elevat quan almenys un commutador detecta moviment i, si no, és baix (orx) i un senyal que és alt un cop acabat el temporitzador, i en cas contrari (td) és baix. La màquina d’estat principal té dues sortides: llums (llums) i un senyal que indica quan s’ha d’encendre el temporitzador de compte enrere (temporitzador) o (t) (tots dos s’utilitzen indistintament).
La segona màquina d'estats, el temporitzador de compte enrere, té 12 estats: 10 d'ells tenen identificadors associats amb el número que mostra el segment: "seg 10" (id = 1010), "seg 9" (id = 1001), […], “Seg 2” (id = 0010), “seg 1” (id = 0001) i els altres dos estats mostren tots dos zero, el que representa que el temporitzador està desactivat, de manera que hi ha el primer "blanc 1" en blanc (id = 1111) i el segon "blanc 2" en blanc (id = 0000). El temporitzador de compte enrere té una entrada: temporitzador (t) i tres sortides: el número que es mostra en binari amb quatre bits (bin) i un senyal que indica que el temporitzador està acabat (td).
Pas 1: diagrama de la caixa negra
Aquesta és una visió general del funcionament del sistema sencer i es descriu amb un diagrama de caixa negra.
- El rellotge s’utilitza per rellotjar la màquina d’estats principal i el descodificador de set segments; es necessita un rellotge més lent per al comptador de baixada, de manera que hi ha un mòdul divisor de rellotge que pren l'entrada de rellotge i emet un rellotge més lent per al comptador de baixada.
- La variable intermèdia (orx) de l’embolcall està lligada als sensors de moviment i serà elevada si almenys un dels sensors detecta alguna cosa i baixa d’altra manera; l'equació booleana per a això és només orx = s (2) o s (1) o s (0).
-
El principal fsm controla l'estat general en què es troba el sistema, depenent de les entrades (orx, ms, ns, td) i genera l'estat actual en què es mostra (sm) simplificat amb els dos senyals per als quals s'utilitza (temporitzador i llums).
- (temporitzador) és un senyal d’embolcall que s’envia al comptador descendent fsm com a entrada i que està controlat per l’estat actual del fsm principal. Indica quan cal activar el temporitzador.
- (llums) és un senyal d’embolcall que s’utilitza per controlar el led i està controlat per l’estat actual del fsm principal.
-
El comptador descendent fsm controla el que mostra el segment de set segons l’entrada (temporitzador) i genera l’estat actual en què es troba (sd) que es mostra simplificat amb els dos senyals que s’utilitzen (td i bin).
- (td) és un senyal d’embolcall que s’envia al fsm principal com a entrada i està controlat per l’estat actual del comptador descendent fsm. Funciona com un senyal de retroalimentació que indica quan s’ha acabat el temporitzador.
- (bin) és un senyal d’embolcall de quatre bits que es concatena amb quatre bits de zero (“0000” i bin) i els vuit bits combinats s’envien a (q), un senyal d’embolcall de vuit bits, que al seu torn s’envia als set descodificador de segment a (ALU_VAL).
-
El mòdul de set segments és el mateix que a Polylearn; les seves entrades principals prenen un número de 8 bits (bin) fins a (ALU_VAL) per mostrar-se en quatre pantalles de set segments diferents mitjançant les sortides (SEGMENTS) per embolicar el senyal (seg) i (DISP_EN) per embolicar (disp_en).
- Com que dos o més pantalles de set segments no poden mostrar dígits diferents al mateix temps, cal un rellotge per recórrer els quatre segs, mostrant el dígit adequat a la vegada perquè cada segseg s’activi individualment i fer una bicicleta prou ràpidament fa que Ssegs semblen estar a la vegada.
- (signar i vàlid) són constants a tot aquest programa, de manera que (signar) es defineix permanentment com a baix i (vàlid) és permanentment alt.
- (ALU_VAL) pren el senyal d'embolcall (q) com a entrada, que representa el número que es mostrarà a la pantalla de set segments en binari.
- La sortida (SEGMENTS) s’envia a un senyal d’embolcall de vuit bits (seg) i (DISP_EN) a un senyal d’embolcall de quatre bits (disp_en).
-
També hi ha un mòdul D flip flop que no es mostra explícitament al diagrama, però es necessita per a les dues màquines d'estats com a submòduls i ajuda la transició d'estats de manera sincrònica.
- (3) d'aquests són necessaris per al fsm principal, ja que 2 ^ (3) = 8> 5 estats per a la codificació
- (4) d'aquests són necessaris per al comptador descendent fsm ja que 2 ^ 4 = 16> 12 estats per a la codificació
Pas 2: Màquines d'estat
Per dissenyar correctament les dues màquines d’estats, cal definir els estats individuals amb claredat, amb les seves sortides i l’estat al qual transita en funció de les diferents entrades possibles.
Principals estats fsm:
"Llums enceses, moviment detectat" (id = 000)
Les llums estan enceses, almenys un dels detectors de moviment detecta el moviment, de manera que l’orx ha de ser alt i ms està activat.
- Sortides: llums = 1 i temporitzador = 0
- Es manté com aquest estat quan ms = 1 i orx = 1.
- Va a indicar "llums encesos, no s'ha detectat cap moviment" si ms = 1 i orx = 0.
- Va a l'estat "activat manualment" si ms = 0 i ns = 1.
- Va a l'estat "apagat manualment" si ms = 0 i ns = 0.
"Llums enceses, no s'ha detectat cap moviment" (id = 001)
Les llums estan activades, no es detecta cap moviment des de cap detector de moviment, de manera que orx ha de ser baix i ms està activat. També al començament d’aquest estat, el temporitzador que s’estableix en alt indica que el compte enrere fsm comenci el compte enrere, procedeixi al compte enrere i deixi el compte enrere un cop el compte enrere fsm digui a aquest fsm que s’ha acabat el compte.
- Sortides: llums = 1 i temporitzador = 1.
- Es manté com aquest estat quan ms = 1 i orx = 0 i td (el temporitzador està acabat) = 0.
- Va a indicar "llums encesos, moviment detectat" si ms = 1 i orx = 1.
- Va a l'estat "llums apagats, no s'ha detectat cap moviment" si ms = 1 i orx = 0 i td = 1.
- Va a l'estat "activat manualment" si ms = 0 i ns = 1.
- Va a l'estat "apagat manualment" si ms = 0 i ns = 0.
"Llums apagades, no s'ha detectat cap moviment" (id = 010)
Les llums estan apagades, no es detecta cap moviment de cap sensor de moviment i el temporitzador ha acabat el compte enrere, de manera que orx ha de ser baix, ms està activat i td està apagat.
- Sortides: llums = 0 i temporitzador = 0.
- Es manté com aquest estat quan ms = 1 i orx = 0.
- Va a indicar "llums encesos, moviment detectat" si ms = 1 i orx = 1.
- Va a l'estat "activat manualment" si ms = 0 i ns = 1.
- Passa a l'estat "apagat manualment" si ms = 0 i ns = 0.
"Encès manualment" (id = 011)
Les llums estan enceses, els detectors de moviment són irrellevants, per tant, ms està apagat i ns està activat.
- Sortides: llums = 1 i temporitzador = 0.
- Es manté com aquest estat quan ms = 0 i ns = 1.
- Passa a l'estat "apagat manualment" si ms = 0 i ns = 0.
- Va a l'estat "llums apagades, no s'ha detectat cap moviment si ms = 1.
"Apagat manualment" (id = 100)
Les llums estan apagades, els detectors de moviment són irrellevants, de manera que ms està apagat i ns apagat.
- Sortides: llums = 0 i temporitzador = 0.
- Es manté com aquest estat quan ms = 0 i ns = 0.
- Va a l'estat "activat manualment" si ms = 0 i ns = 1.
- Va a l'estat "llums apagades, no s'ha detectat cap moviment si ms = 1.
Estats del comptador baix:
"Seg 10" (id = 1010)
La pantalla de set segments mostra un 10.
- Sortides: bin = "1010" i td = 0.
- Va a indicar "seg 9" si el temporitzador = 1.
- Va a indicar "2 en blanc" si el temporitzador = 0.
"Seg 9" (id = 1001)
La pantalla de set segments mostra un 9.
- Sortides: bin = "1001" i td = 0.
- Va a indicar "seg 8" si el temporitzador = 1.
- Va a indicar "2 en blanc" si el temporitzador = 0.
(Els estats "Seg 8" fins a "Seg 2" s'ometen perquè segueixen el mateix patró que "Seg 10" i "Seg 9" i no són necessaris per a l'explicació)
"Seg 1" (id = 0001)
La pantalla de set segments mostra un 1.
- Sortides: bin = "0001" i td = 0.
- Va a indicar "2 en blanc" a la següent vora ascendent del rellotge (no cal introduir cap entrada).
"En blanc 2" (id = 1111)
La visualització de set segments mostra un 0. L’objectiu d’un segon estat en blanc és que hi hagi un estat separat per quan td = 1 per seguretat.
- Sortides: bin = "1111" i td = 1.
- Va a indicar "1 en blanc" a la següent vora ascendent del rellotge (no cal introduir cap entrada).
"1 en blanc" (id = 0000)
La pantalla de set segments mostra un 0. Aquest és l’estat en què es manté el sistema quan la màquina d’estat principal està en estat “s’encén, no s’ha detectat cap moviment”.
- Sortides: bin = "0000" i td = 0.
- Va a indicar "seg 10" si el temporitzador = 1.
Pas 3: Taules de veritat de màquines d’estat, equacions d’excitació i equacions de sortida
El següent pas és crear taules de veritat per a les dues màquines d'estats i equacions d'excitació i equacions de sortida per a cada fsm. Per a cada equació d’excitació fsm, ha d’haver-hi equacions per a cada següent bit codificat d’estat en funció de l’estat actual i els seus senyals d’entrada. Per a cada equació de sortida fsm, cal que hi hagi equacions per a cada senyal de sortida en funció de l’estat actual. Els quatre conjunts d’equacions es poden extreure de les taules de veritat representades. (qn és el següent bit codificat d'estat per a cada màquina d'estats i q és l'estat actual)
(000) equivalent a q (2) 'q (1)' q (0) 'i (0000) equivalent a q (3)' q (2) 'q (1)' q (0) '
(ex. (0101) és q (3) 'q (2) q (1)' q (0) i (110) és q (2) q (1) q (0) ')
Equacions d'excitació per a la 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)]
Equacions de sortida per al fsm principal:
- llums = (000) + (001) + (100)
- temporitzador = (001)
Equacions d'excitació per al comptador descendent 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)]
Equacions de sortida per al comptador descendent 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)
Pas 4: embolcall, submoduls i restricció
Com ja s'ha explicat al pas 1, aquests mòduls són necessaris per a aquest projecte i estan tots units amb el mòdul d'embolcall titulat "final_proj.vhd". El fitxer de restriccions titulat "Basys3_Master.xdc" s'utilitza per enllaçar totes les entrades i sortides de l'embolcall als commutadors, els set segments i els ports d'E / S de la placa Basys 3. El commutador mestre hauria de ser el commutador de la placa més proper al costat en què estan connectats els cables, el commutador normal / manual és el segon més proper i els tres commutadors que representen els tres sensors de moviment són els tres commutadors immediatament al costat del commutador normal / manual.. Tot el codi (equacions booleanes, declaracions de mòduls, etc.) ja està escrit als fitxers, de manera que no cal que escriviu res més perquè això funcioni.
Pas 5: ports d'E / S per LED
L’últim pas d’aquest projecte és utilitzar un led per mostrar si els llums s’encenen o no. El cablejat es mostra a les dues imatges. Assegureu-vos que hi hagi una resistència en sèrie amb el led (com a mínim 330 ohms) per no cremar-lo i assegureu-vos que el pin llarg del led estigui connectat a la mateixa capçalera femenina de la placa base que es mostra el fil vermell (part superior més a la dreta) i el pin més curt està connectat a terra, la mateixa capçalera femenina que es mostra el fil negre (superior, segon des de l’esquerra).
Recomanat:
Disseny de jocs en Flick en 5 passos: 5 passos
Disseny de jocs en Flick en 5 passos: Flick és una manera molt senzilla de fer un joc, sobretot com un trencaclosques, una novel·la visual o un joc d’aventures
Detecció de cares a Raspberry Pi 4B en 3 passos: 3 passos
Detecció de cares a Raspberry Pi 4B en 3 passos: en aquest manual, farem la detecció de cares a Raspberry Pi 4 amb Shunya O / S mitjançant la biblioteca Shunyaface. Shunyaface és una biblioteca de reconeixement / detecció de cares. El projecte té com a objectiu aconseguir una velocitat de detecció i reconeixement més ràpida amb
Com fer un comptador de passos ?: 3 passos (amb imatges)
Com fer un comptador de passos ?: Jo solia tenir un bon rendiment en molts esports: caminar, córrer, anar en bicicleta, jugar a bàdminton, etc. M’encanta viatjar poc després. Bé, mireu el meu ventre corpulent … Bé, de totes maneres, decideixo tornar a començar a fer exercici. Quin equip he de preparar?
Mirall de vanitat de bricolatge en passos senzills (amb llums de tira LED): 4 passos
Mirall de vanitat de bricolatge en passos senzills (amb llums de tires LED): en aquest post vaig crear un mirall de vanitat de bricolatge amb l'ajut de les tires LED. És molt genial i també heu de provar-les
Arduino Halloween Edition: pantalla emergent de zombis (passos amb imatges): 6 passos
Arduino Halloween Edition: pantalla emergent de zombis (passos amb imatges): voleu espantar els vostres amics i fer soroll a Halloween? O simplement voleu fer una bona broma? Aquesta pantalla emergent de Zombies ho pot fer! En aquest instructiu us ensenyaré a fer zombis fàcilment amb Arduino. L'HC-SR0