Indholdsfortegnelse:

L I G H T S: 5 trin
L I G H T S: 5 trin

Video: L I G H T S: 5 trin

Video: L I G H T S: 5 trin
Video: Would You Sleep Here? 🫢 LED Lights 2024, November
Anonim
L I G H T S
L I G H T S

Formålet med dette sidste projekt var at skabe noget, der ville fokusere på bæredygtighed og implementere digitale designkoncepter, og for at gøre dette besluttede jeg at designe et skalerbart energisparesystem ved hjælp af vhdl og lavet til Basys 3 Board (Artix-7 35T-serien). Skalerbar, fordi et vilkårligt antal sensorer kan sættes i et rum, og et vilkårligt antal af disse systemer kan placeres rundt om en bygning eller et hus. Hvad dette system ville gøre, er teoretisk set at spare tusinder af dollars i kommerciel bygning og reducere en stor procentdel af energiforbruget i mindre bofællesskaber ved at implementere et tilsluttet system med aktivt og passivt kontrolleret lys, bevægelsesdetektorer, timere, der vises på syv segmentdisplays, og kontrolafbrydere. Dette eksempel omhandler et enkelt system med tre bevægelsesdetektorer, en hovedkontakt, en manuel/normal kontakt, fire syv segmentdisplays og et enkelt lys, som systemet styrer.

For eksempel ville der i et valgt rum være placeret flere bevægelsesdetektorer rundt (dette eksempeldesign har tre), og hver ville sende et signal (1), hvis det registrerer bevægelse, og (0) hvis det ikke gør det. Hvis mindst en af bevægelsessensorerne registrerer bevægelse, tænder lyset, hvis det ikke allerede er tændt, og forbliver tændt, hvis det allerede er tændt. Når som helst alle bevægelsesdetektorer ikke registrerer noget, begynder en timer at tælle ned i et bestemt tidsrum (justerbar i kode), og lysene forbliver tændt, mens timeren tæller ned. Når timeren er færdig med at tælle ned, stopper timeren, og lysene slukker. Hvis mindst én bevægelsesdetektor registrerer bevægelse, mens timeren tæller ned, stopper timeren og nulstilles. Og hvis mindst en bevægelsesdetektor registrerer bevægelse, mens lyset er slukket, tænder lyset straks.

Dette system har to tilstande, en med timeren som angivet ovenfor, og en anden, hvor der er en kontakt, der styrer lysene manuelt (ignorer sensorer). Der er en hovedkontakt, der gør det muligt for brugeren at vælge, hvilken tilstand de vil bruge baseret på den, de føler, vil spare mere energi samlet. Eks. Et værelse som en gang kan have fordel af den passive timer-tilstand- brugere er ikke sikre på, hvornår folk kommer til at passere, men det ville være en ulempe at tænde og slukke lyset, hver gang de går ind og ud, mens et sådant værelse som et soveværelse med en enkelt bruger ville være bedre manuelt betjent. Og hovedafbryderen ville være nyttig i tilfælde som hvis personen, der bor i soveværelset, skulle forlade en længere periode, så kunne hovedafbryderen slukkes, og timertilstanden ville fungere for at spare energi mere effektivt.

Så i dette system er der to statsmaskiner, en er hovedstatsmaskinen og en anden til nedtællingstimeren. Hovedstatsmaskinen har fem tilstande defineret som sådan: 1. "lyser tændt, bevægelse registreret" (id = 000), 2. "lyser tændt, ingen bevægelse registreret" (id = 001), 3. "lyser slukket, ingen bevægelse registreret "(id = 010), 4." manuelt tændt "(id = 011) og 5." manuelt slukket "(id = 100). Denne hovedstatsmaskine har fire indgange: hovedafbryderen (ms), den manuelle/normale kontakt (ns), et signal, der er højt, når mindst en kontakt registrerer bevægelse, og som ellers er lav (orx), og et signal, der er høj, når timeren er udført, og er lav (td) ellers. Hovedstatsmaskinen har to udgange: lys (lys) og et signal, der angiver, hvornår nedtællingstimeren (timeren) eller (t) skal tændes (begge bruges i flæng).

Den anden tilstandsmaskine, nedtællingstimeren, har 12 tilstande: 10 af dem har id'er, der er knyttet til det nummer, de syv segment viser- "seg 10" (id = 1010), "seg 9" (id = 1001), […], "Seg 2" (id = 0010), "seg 1" (id = 0001) og de to andre tilstande viser begge nul, hvilket repræsenterer, at timeren er slukket- så der er det første tomme "tomme 1" (id = 1111) og den anden blank "blank 2" (id = 0000). Nedtællingstimeren har en indgang: timer (t) og tre udgange: tallet vist i binært med fire bits (bin) og et signal, der angiver, at timeren er udført (td).

Trin 1: Black Box Diagram

Black Box Diagram
Black Box Diagram

Dette er en oversigt over, hvordan hele systemet skal fungere, og er beskrevet med et sort boksdiagram.

  • Uret bruges til at klokke hovedstatsmaskinen og de syv segment dekoder; der kræves et langsommere ur til nedtælleren, så der er et urdelermodul, der tager urets input og udsender et langsommere ur til nedtælleren.
  • Mellemvariablen (orx) i omslaget er bundet til bevægelsessensorerne og vil være høj, hvis mindst en af sensorerne registrerer noget, og lav ellers; den boolske ligning for det er bare orx = s (2) eller s (1) eller s (0).
  • De vigtigste fsm styrer, hvilken generel tilstand systemet er i, afhængigt af input (orx, ms, ns, td) og udsender den aktuelle tilstand, det er i (sm) vist forenklet med de to signaler, det bruges til (timer og lys).

    • (timer) er et indpakningssignal, der sendes til nedtælleren fsm som dets input og styres af hoved -fsm's aktuelle tilstand. Det angiver, hvornår timeren skal tændes.
    • (lys) er et indpakningssignal, der bruges til at styre LED'en og styres af hoved -fsm's aktuelle tilstand.
  • Nedtælleren fsm styrer, hvad det syv segment viser afhængigt af input (timer) og udsender den aktuelle tilstand, det er i (sd) vist, forenklet med de to signaler, det bruges til (td og bin).

    • (td) er et indpakningssignal, der sendes til hoved -fsm som dets input og styres af nedtælleren fsms aktuelle tilstand. Det fungerer som et feedback -signal, der angiver, hvornår timeren er udført.
    • (bin) er et fire bit wrapper signal, der er sammenkædet med fire bits nul ("0000" og bin), og de kombinerede otte bits sendes til (q), et otte bit wrapper signal, der igen sendes til de syv segmentdekoder under (ALU_VAL).
  • Det syv segmentmodul er det samme som på Polylearn; dens hovedindgange indtager et 8 -bit nummer (bin) til (ALU_VAL) for at blive vist på fire forskellige syv segmentdisplays ved hjælp af output (SEGMENTS) til indpakningssignal (seg) og (DISP_EN) til indpakning (disp_en).

    • Da to eller flere syv segmentskærme ikke kan vise forskellige cifre på samme tid, er det nødvendigt med et ur for at bladre gennem de fire ssegs, hvilket viser det relevante ciffer ad gangen for hvert sseg, der tændes individuelt, og cykling hurtigt nok gør, at ssegs ser ud til at være tændt på én gang.
    • (tegn og gyldig) er konstante i hele dette program, så (tegn) er permanent indstillet lavt og (gyldigt) er permanent indstillet højt.
    • (ALU_VAL) optager indpakningssignalet (q) som et input, der repræsenterer det tal, der skal vises på displayet med syv segmenter i binært format.
    • Outputtet (SEGMENTS) sendes til et otte bit wrapper signal (seg) og (DISP_EN) til et fire bit wrapper signal (disp_en).
  • Der er også et D flip -flop -modul, der ikke eksplicit er vist i diagrammet, men er nødvendigt for de to tilstandsmaskiner som submoduler og hjælper staterne med at transistion synkront.

    • (3) af disse er nødvendige for hoved -fsm siden 2^(3) = 8> 5 tilstande til kodning
    • (4) af disse er nødvendige for nedtælleren fsm, da 2^4 = 16> 12 tilstande til kodning

Trin 2: Angiv maskiner

Statsmaskiner
Statsmaskiner

For at kunne designe de to statsmaskiner korrekt skal de enkelte tilstande defineres klart med dets output og den tilstand, det overgår til baseret på de forskellige mulige input.

Vigtigste fsm siger:

“Lyser, bevægelse registreret” (id = 000)

Lys er tændt, mindst en af bevægelsessensorerne registrerer bevægelse, så orx skal være høj, og ms tændes.

  • Udgange: lys = 1 og timer = 0
  • Bliver som denne tilstand, når ms = 1 og orx = 1.
  • Går til tilstanden "lyser tændt, ingen bevægelse registreret", hvis ms = 1 og orx = 0.
  • Går til tilstanden "manuelt tændt", hvis ms = 0 og ns = 1.
  • Går til tilstanden "manuelt slukket", hvis ms = 0 og ns = 0.

“Lyser, ingen bevægelse registreret” (id = 001)

Lys er tændt, ingen bevægelse registreret fra nogen bevægelsesdetektor, så orx skal være lav, og ms tændes. Også i begyndelsen af denne tilstand fortæller timeren, der sættes højt, nedtællingen fsm at begynde at tælle ned, fortsætter med at tælle ned og stopper med at tælle ned, når nedtællingen fsm fortæller denne fsm, at den er færdig med at tælle.

  • Udgange: lys = 1 og timer = 1.
  • Bliver som denne tilstand, når ms = 1 og orx = 0 og td (timeren er udført) = 0.
  • Angiver "lyser tændt, bevægelse registreret" hvis ms = 1 og orx = 1.
  • Går til tilstanden "lyser slukket, ingen bevægelse registreret", hvis ms = 1 og orx = 0 og td = 1.
  • Går til tilstanden "manuelt tændt", hvis ms = 0 og ns = 1.
  • Går til tilstanden "manuelt slukket", hvis ms = 0 og ns = 0.

“Lyser, ingen bevægelse registreret” (id = 010)

Lys er slukket, ingen bevægelse registreret fra nogen bevægelsessensor og timeren er færdig med at tælle ned, så orx skal være lav, ms tændes, og td er slukket.

  • Udgange: lys = 0 og timer = 0.
  • Bliver som denne tilstand, når ms = 1 og orx = 0.
  • Angiver "lyser tændt, bevægelse registreret" hvis ms = 1 og orx = 1.
  • Går til tilstanden "manuelt tændt", hvis ms = 0 og ns = 1.
  • Går til tilstanden "manuelt slukket", hvis ms = 0 og ns = 0.

"Manuelt tændt" (id = 011)

Lys er tændt, bevægelsesdetektorer er irrelevante, så ms er slukket, og ns er tændt.

  • Udgange: lys = 1 og timer = 0.
  • Bliver som denne tilstand, når ms = 0 og ns = 1.
  • Går til tilstanden "manuelt slukket", hvis ms = 0 og ns = 0.
  • Går til tilstanden "lyser, ingen bevægelse registreret, hvis ms = 1.

"Manuelt slukket" (id = 100)

Lys er slukket, bevægelsesdetektorer er irrelevante, så ms er slukket, og ns er slukket.

  • Udgange: lys = 0 og timer = 0.
  • Bliver som denne tilstand, når ms = 0 og ns = 0.
  • Går til tilstanden "manuelt tændt", hvis ms = 0 og ns = 1.
  • Går til tilstanden "lyser, ingen bevægelse registreret, hvis ms = 1.

Nedtæller siger:

“Seg 10” (id = 1010)

Syv segment display viser et 10.

  • Udgange: bin = “1010” og td = 0.
  • Angiver “seg 9”, hvis timeren = 1.
  • Angiver "blank 2", hvis timeren = 0.

“Seg 9” (id = 1001)

Syv segment display viser en 9.

  • Udgange: bin = “1001” og td = 0.
  • Angiver "seg 8", hvis timeren = 1.
  • Angiver "blank 2", hvis timeren = 0.

(Staterne "Seg 8" ned til "Seg 2" udelades, fordi de følger det samme mønster som "Seg 10" og "Seg 9" og ikke er nødvendige til forklaring)

“Seg 1” (id = 0001)

Syv segment display viser en 1.

  • Udgange: bin = “0001” og td = 0.
  • Angiver "blank 2" på næste stigende kant af uret (ingen input nødvendig).

"Blank 2" (id = 1111)

Syv segment display viser en 0. Formålet med en anden blank tilstand er, så der er en separat tilstand for når td = 1 for sikkerheden.

  • Udgange: bin = “1111” og td = 1.
  • Angiver "blank 1" på næste stigende kant af uret (ingen input nødvendig).

"Blank 1" (id = 0000)

Syv segmentdisplay viser en 0. Dette er den tilstand, systemet forbliver i, når hovedstatsmaskinen er i tilstand "lyser, ingen bevægelse registreret".

  • Udgange: bin = “0000” og td = 0.
  • Angiver "seg 10", hvis timeren = 1.

Trin 3: Angiv maskinens sandhedstabeller, excitationsligninger og outputligninger

State Machine Sandhedstabeller, excitationsligninger og outputligninger
State Machine Sandhedstabeller, excitationsligninger og outputligninger
State Machine Sandhedstabeller, excitationsligninger og outputligninger
State Machine Sandhedstabeller, excitationsligninger og outputligninger
State Machine Sandhedstabeller, excitationsligninger og outputligninger
State Machine Sandhedstabeller, excitationsligninger og outputligninger
State Machine Sandhedstabeller, excitationsligninger og outputligninger
State Machine Sandhedstabeller, excitationsligninger og outputligninger

Det næste trin er at oprette sandhedstabeller for de to statsmaskiner og excitationsligninger og outputligninger for hver fsm. For hver fsm excitationsligning skal der være ligninger for hver næste tilstandskodede bit med hensyn til den aktuelle tilstand og dens indgangssignaler. For hver fsm -udgangsligning skal der være ligninger for hvert udgangssignal med hensyn til den aktuelle tilstand. Alle fire sæt ligninger kan trækkes fra de afbildede sandhedstabeller. (qn er den næste tilstandskodede bit for hver tilstandsmaskine, og q er den aktuelle tilstand)

(000) ækvivalent med q (2) 'q (1)' q (0) 'og (0000) ækvivalent med q (3)' q (2) 'q (1)' q (0) '

(eks. (0101) er q (3) 'q (2) q (1)' q (0) og (110) er q (2) q (1) q (0) ')

Excitationsligninger for de vigtigste fsm:

  • 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)]

Outputligninger for hoved -fsm:

  • lys = (000) + (001) + (100)
  • timer = (001)

Excitationsligninger for nedtælleren 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)]

Outputligninger for nedtælleren 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)

Trin 4: Indpakning, submoduler og begrænsning

Som forklaret allerede i trin 1 er disse moduler nødvendige for dette projekt og er alle bundet sammen med indpakningsmodulet med titlen "final_proj.vhd". Begrænsningsfilen med titlen "Basys3_Master.xdc" bruges til at forbinde alle wrapper -input og output til switches, de syv segmenter og I/O -porte på Basys 3 -kortet. Hovedafbryderen skal være kontakten på tavlen tættest på den side, ledningerne er på, den normale/manuelle kontakt er den næst tætteste, og de tre kontakter, der repræsenterer de tre bevægelsessensorer, er de tre kontakter umiddelbart ved siden af den normale/manuelle kontakt. Al koden (boolske ligninger, moduldeklarationer osv.) Er allerede skrevet ud i filerne, så du behøver ikke skrive noget andet for at få dette til at fungere.

Trin 5: I/O -porte til LED

I/O -porte til LED
I/O -porte til LED
I/O -porte til LED
I/O -porte til LED

Det sidste trin for dette projekt er at bruge en LED til at vise, om (lys) faktisk tænder og slukker. Ledningerne er vist på de to billeder. Sørg for, at der er en modstand i serie med LED'en (mindst 330 ohm) for ikke at brænde LED'en ud, og sørg for, at LED'ens lange pin er forbundet til det samme kvindelige header på basys boardet som den røde ledning er vist (øverst til højre) og den kortere pin er forbundet til jorden, den samme kvindelige overskrift som den sorte ledning vist (øverst, anden fra venstre).

Anbefalede: