Innehållsförteckning:

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

Video: L I G H T S: 5 steg

Video: L I G H T S: 5 steg
Video: STAGE BACKGROUND-6 WITH LIGHTS 2024, November
Anonim
L I G H T S
L I G H T S

Syftet med detta sista projekt var att skapa något som skulle fokusera på hållbarhet och implementera digitala designkoncept, och för att göra detta bestämde jag mig för att designa ett skalbart energisparande system med vhdl och gjort för Basys 3 Board (Artix-7 35T-serien). Skalerbar eftersom valfritt antal sensorer kan placeras i ett rum och valfritt antal av dessa system kan placeras runt en byggnad eller ett hus. Vad detta system skulle göra är att teoretiskt spara tusentals dollar i kommersiella byggnader och minska en stor andel av energiförbrukningen i mindre bostadsområden genom att implementera ett anslutet system med aktivt och passivt styrt ljus, rörelsedetektorer, timers som visas på sju segmentdisplayer och manöverbrytare. Detta exempel behandlar ett enda system med tre rörelsedetektorer, en huvudströmbrytare, en manuell/normal omkopplare, fyra sju segmentdisplayer och en enda lampa som systemet styr.

Till exempel, i ett valt rum skulle flera rörelsedetektorer placeras runt (denna exempeldesign har tre), och var och en skulle skicka en signal (1) om den upptäcker rörelse och (0) om den inte gör det. Om minst en av rörelsedetektorerna upptäcker rörelse tänds lamporna om de inte redan är tända och lyser om de redan är på. När som helst alla rörelsedetektorer inte upptäcker någonting, en timer börjar räkna ner under en viss tid (justerbar i kod) och lamporna lyser medan timern räknar ner. När timern har räknat ner stannar timern och lamporna släcks. Om minst en rörelsedetektor detekterar rörelse medan timern räknar ned, stannar timern och återställs. Och om minst en rörelsedetektor detekterar rörelse medan lamporna är släckta tänds lamporna omedelbart.

Detta system har två lägen, ett med timern enligt ovan, och ett andra där det finns en omkopplare som styr lamporna manuellt (ignorerar sensorer). Det finns en huvudströmbrytare som låter användaren välja vilket läge de vill använda baserat på vilket som de känner kommer att spara mer energi totalt sett. Ex. Ett rum som en hall kan dra nytta av det passiva timerläget. Användarna är inte säkra på när människor kommer att passera, men att tända och släcka lamporna varje gång de går in och lämnar skulle vara en olägenhet, medan ett rum som som ett sovrum med en enda användare skulle vara bättre manuellt. Och huvudströmbrytaren skulle vara till hjälp i fall som om personen som bor i sovrummet skulle lämna en längre tid, då kunde huvudströmbrytaren stängas av och timerläget skulle fungera för att spara energi mer effektivt.

Så i det här systemet finns det två tillståndsmaskiner, en är huvudstatsmaskinen och en annan för nedräkningstimern. Huvudtillståndsmaskinen har fem tillstånd definierade som sådana: 1. "tänds, rörelse detekteras" (id = 000), 2. "tänds, ingen rörelse detekteras" (id = 001), 3. "tänds, ingen rörelse upptäckt "(id = 010), 4." manuellt påslagen "(id = 011) och 5." manuellt avstängd "(id = 100). Denna huvudstatmaskin har fyra ingångar: huvudströmbrytaren (ms), den manuella/normala omkopplaren (ns), en signal som är hög när minst en omkopplare detekterar rörelse och som är låg annars (orx) och en signal som är hög när timern är klar, och är låg annars (td). Huvudtillståndsmaskinen har två utgångar: lampor (lampor) och en signal som anger när nedräkningstimern (timern) eller (t) ska aktiveras (båda används omväxlande).

Den andra tillståndsmaskinen, nedräkningstimern, har 12 tillstånd: 10 av dem har id: er associerade med numret som det sju segmentet visar- "seg 10" (id = 1010), "seg 9" (id = 1001), […], “Seg 2” (id = 0010), “seg 1” (id = 0001) och de andra två tillstånden visar båda noll, vilket representerar att timern är avstängd- så det finns det första tomma "tomma 1" (id = 1111) och den andra blanken "blank 2" (id = 0000). Nedräkningstimern har en ingång: timer (t) och tre utgångar: numret som visas i binärt med fyra bitar (bin) och en signal som indikerar att timern är klar (td).

Steg 1: Black Box Diagram

Black Box Diagram
Black Box Diagram

Detta är en översikt över hur hela systemet ska fungera och beskrivs med ett svart lådediagram.

  • Klockan används för att klocka huvudtillståndsmaskinen och sju segmentavkodaren; en långsammare klocka behövs för nedräknaren, så det finns en klockavdelningsmodul som tar klockans ingång och matar ut en långsammare klocka för nedräknaren.
  • Mellanvariabeln (orx) i omslaget är knuten till rörelsessensorerna och blir hög om minst en av sensorerna detekterar något, och låg annars; den booleska ekvationen för det är bara orx = s (2) eller s (1) eller s (0).
  • De huvudsakliga fsm kontrollerar vilket allmänt tillstånd systemet är i, beroende på ingångarna (orx, ms, ns, td) och matar ut det aktuella tillståndet det är i (sm) visas förenklat med de två signalerna det används för (timer och lampor).

    • (timer) är en omslagssignal som skickas till nedräknaren fsm som dess ingång och styrs av huvud -fsm: s nuvarande tillstånd. Det indikerar när timern ska sättas på.
    • (lampor) är en omslagsignal som används för att styra lysdioden och styrs av huvudfsm: s nuvarande tillstånd.
  • Nedräknaren fsm styr vad det sju segmentet visar beroende på ingången (timern) och matar ut det aktuella tillståndet det är i (sd) förenklat med de två signalerna det används för (td och bin).

    • (td) är en omslagssignal som skickas till huvud -fsm som dess ingång och styrs av nedräknaren fsm: s nuvarande tillstånd. Den fungerar som en återkopplingssignal som indikerar när timern är klar.
    • (bin) är en fyra bitars wrapper -signal som är sammanfälld med fyra bitar av noll ("0000" och bin) och de kombinerade åtta bitarna skickas till (q), en åtta bitars wrapper -signal, som i sin tur skickas till de sju segmentavkodare under (ALU_VAL).
  • Den sju segmentiga modulen är samma som på Polylearn; dess huvudingångar tar in ett 8 -bitars nummer (bin) till (ALU_VAL) för att visas på fyra olika sju segmentdisplayer med hjälp av utsignalerna (SEGMENTS) till wrappersignalen (seg) och (DISP_EN) till wrapper (disp_en).

    • Eftersom två eller fler sju segmentdisplayer inte kan visa olika siffror samtidigt, krävs en klocka för att bläddra genom de fyra seggen, vilket visar rätt siffra åt gången för varje sseg som slås på individuellt och cykling tillräckligt snabbt gör att ssegs verkar vara på alla samtidigt.
    • (tecken och giltig) är konstanta under hela programmet, så (tecken) är permanent lågt och (giltigt) permanent högt.
    • (ALU_VAL) tar in omslutningssignalen (q) som en ingång, som representerar talet som kommer att visas på sju segmentdisplayen i binär.
    • Utsignalen (SEGMENTS) skickas till en åttabitsslutningssignal (seg) och (DISP_EN) till en fyrbitarsomslagssignal (disp_en).
  • Det finns också en D flip -flop -modul som inte uttryckligen visas i diagrammet men som behövs för de två tillståndsmaskinerna som submoduler och hjälper tillstånden att transistion synkront.

    • (3) av dessa behövs för huvud -fsm eftersom 2^(3) = 8> 5 tillstånd för kodning
    • (4) av dessa behövs för nedräknaren fsm eftersom 2^4 = 16> 12 tillstånd för kodning

Steg 2: Ange maskiner

Statliga maskiner
Statliga maskiner

För att korrekt utforma de två tillståndsmaskinerna måste de enskilda tillstånden definieras tydligt, med dess utgångar och tillståndet det övergår till baserat på de olika möjliga ingångarna.

Huvud fsm säger:

“Tänd, rörelse upptäckt” (id = 000)

Ljusen är tända, minst en av rörelsedetektorerna upptäcker rörelse, så orx måste vara hög och ms är påslagen.

  • Utgångar: lampor = 1 och timer = 0
  • Förblir som detta tillstånd när ms = 1 och orx = 1.
  • Anger "lampor tänd, ingen rörelse detekteras" om ms = 1 och orx = 0.
  • Går att säga "manuellt påslagen" om ms = 0 och ns = 1.
  • Lägger till "manuellt avstängd" om ms = 0 och ns = 0.

"Tänds, ingen rörelse detekteras" (id = 001)

Ljusen är tända, ingen rörelse detekteras från någon rörelsedetektor, så orx måste vara låg och ms är påslagen. Även i början av detta tillstånd säger timern som ställs in högt att nedräkningen fsm börjar räkna ner, fortsätter att räkna ner och slutar räkna ner när nedräkningen fsm säger till denna fsm att den är klar med att räkna.

  • Utgångar: lampor = 1 och timer = 1.
  • Förblir som detta tillstånd när ms = 1 och orx = 0 och td (timern är klar) = 0.
  • Anger "lampor på, rörelse upptäckt" om ms = 1 och orx = 1.
  • Går att säga "tänds, ingen rörelse detekteras" om ms = 1 och orx = 0 och td = 1.
  • Går att säga "manuellt påslagen" om ms = 0 och ns = 1.
  • Lägger till "manuellt avstängd" om ms = 0 och ns = 0.

"Tänds, ingen rörelse detekteras" (id = 010)

Ljusen är släckta, ingen rörelse detekteras från någon rörelsesensor och timern är färdig att räkna ner, så orx måste vara låg, ms är påslagen och td är avstängd.

  • Utgångar: lampor = 0 och timer = 0.
  • Förblir som detta tillstånd när ms = 1 och orx = 0.
  • Anger "lampor på, rörelse upptäckt" om ms = 1 och orx = 1.
  • Går att säga "manuellt påslagen" om ms = 0 och ns = 1.
  • Lägger till "manuellt avstängd" om ms = 0 och ns = 0.

”Manuellt påslagen” (id = 011)

Ljus är tända, rörelsedetektorer är irrelevanta, så ms stängs av och ns slås på.

  • Utgångar: lampor = 1 och timer = 0.
  • Förblir som detta tillstånd när ms = 0 och ns = 1.
  • Lägger till "manuellt avstängd" om ms = 0 och ns = 0.
  • Går till status "tänds, ingen rörelse detekteras om ms = 1.

”Manuellt avstängd” (id = 100)

Ljus är släckta, rörelsedetektorer är irrelevanta, så ms är avstängd och ns är avstängd.

  • Utgångar: lampor = 0 och timer = 0.
  • Förblir som detta tillstånd när ms = 0 och ns = 0.
  • Går att säga "manuellt påslagen" om ms = 0 och ns = 1.
  • Går till status "tänds, ingen rörelse detekteras om ms = 1.

Nedräknare säger:

“Seg 10” (id = 1010)

Sju segment display visar en 10.

  • Utgångar: bin = “1010” och td = 0.
  • Anger “seg 9” om timern = 1.
  • Anger "tomt 2" om timern = 0.

“Seg 9” (id = 1001)

Sju segment display visar en 9.

  • Utgångar: bin = “1001” och td = 0.
  • Anger “seg 8” om timern = 1.
  • Anger "tomt 2" om timern = 0.

(Staterna "Seg 8" ner till "Seg 2" utelämnas eftersom de följer samma mönster som "Seg 10" och "Seg 9" och är inte nödvändigt för förklaring)

“Seg 1” (id = 0001)

Sju segment display visar en 1.

  • Utgångar: bin = “0001” och td = 0.
  • Anger "tomt 2" på nästa stigande kant på klockan (ingen ingång behövs).

”Tomt 2” (id = 1111)

Sju segmentvisning visar en 0. Syftet med ett andra tomt tillstånd är så att det finns ett separat tillstånd för när td = 1 för säkerhets skull.

  • Utgångar: bin = “1111” och td = 1.
  • Anger "tomt 1" på nästa stigande kant på klockan (ingen ingång behövs).

”Tomt 1” (id = 0000)

Sju segmentvisning visar en 0. Detta är tillståndet systemet förblir i när huvudtillståndsmaskinen är i tillstånd "tänds, ingen rörelse detekteras".

  • Utgångar: bin = “0000” och td = 0.
  • Anger “seg 10” om timern = 1.

Steg 3: Ange maskinens sanningstabeller, excitationsekvationer och utmatningsekvationer

State Machine Truth Tabels, Excitation Equations och Output Equations
State Machine Truth Tabels, Excitation Equations och Output Equations
State Machine Truth Tabels, Excitation Equations och Output Equations
State Machine Truth Tabels, Excitation Equations och Output Equations
State Machine Truth Tabels, Excitation Equations och Output Equations
State Machine Truth Tabels, Excitation Equations och Output Equations
State Machine Truth Tabels, Excitation Equations och Output Equations
State Machine Truth Tabels, Excitation Equations och Output Equations

Nästa steg är att skapa sanningstabeller för de två tillståndsmaskinerna och excitationsekvationer och utmatningsekvationer för varje fsm. För varje fsm -excitationsekvation måste det finnas ekvationer för varje nästa tillståndskodad bit när det gäller det aktuella tillståndet och dess insignaler. För varje fsm -utgångsekvation måste det finnas ekvationer för varje utsignal när det gäller det aktuella tillståndet. Alla fyra ekvationer kan dras från de sanningstabeller som avbildas. (qn är nästa tillståndskodade bit för varje tillståndsmaskin och q är det aktuella tillståndet)

(000) motsvarande q (2) 'q (1)' q (0) 'och (0000) motsvarande q (3)' q (2) 'q (1)' q (0) '

(ex. (0101) är q (3) 'q (2) q (1)' q (0) och (110) är q (2) q (1) q (0) ')

Excitationsekvationer för huvud -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)]

Utgångsekvationer för huvud -fsm:

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

Excitationsekvationer för nedräknaren 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)]

Utmatningsekvationer för nedräknaren 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)

Steg 4: Wrapper, submodules & Constraint

Som redan förklarats i steg 1 behövs dessa moduler för detta projekt och är alla bundna till omslagsmodulen med titeln "final_proj.vhd". Begränsningsfilen med titeln "Basys3_Master.xdc" används för att länka alla omslagets ingångar och utgångar till switchar, de sju segmenten och I/O -portarna på Basys 3 -kortet. Huvudströmbrytaren ska vara omkopplaren på kortet närmast den sida ledningarna är på, den normala/manuella omkopplaren är den näst närmaste, och de tre omkopplare som representerar de tre rörelsesensorerna är de tre omkopplarna direkt bredvid den normala/manuella omkopplaren. All kod (booleska ekvationer, moduldeklarationer, etc) är redan skriven i filerna, så du behöver inte skriva något annat för att få det att fungera.

Steg 5: I/O -portar för LED

I/O -portar för LED
I/O -portar för LED
I/O -portar för LED
I/O -portar för LED

Det sista steget för detta projekt är att använda en LED för att visa om (lampor) verkligen tänds eller släcks. Ledningarna visas på de två bilderna. Se till att det finns ett motstånd i serie med lysdioden (minst 330 ohm) för att inte bränna ut lysdioden och se till att lysdiodens långa stift är anslutet till samma honhuvud på grundkortet som den röda ledningen visas (överst längst till höger) och den kortare stiftet är anslutet till jord, samma kvinnliga rubrik som den svarta tråden som visas (överst, andra från vänster).

Rekommenderad: