Innholdsfortegnelse:

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

Video: L I G H T S: 5 trinn

Video: L I G H T S: 5 trinn
Video: Что будет если купить КИТАЙЦА? 23 СЮРПРИЗА в КАБИНЕ DONGFENG 520 2024, November
Anonim
L I G H T S
L I G H T S

Hensikten med dette siste prosjektet var å skape noe som ville fokusere på bærekraft og implementere digitale designkonsepter, og for å gjøre dette bestemte jeg meg for å designe et skalerbart strømsparingssystem ved hjelp av vhdl og laget for Basys 3 Board (Artix-7 35T-serien). Skalerbar fordi et hvilket som helst antall sensorer kan settes i et rom og et hvilket som helst antall av disse systemene kan plasseres rundt en bygning eller et hus. Hva dette systemet ville gjøre, er teoretisk sett å spare tusenvis av dollar i kommersielt bygg og redusere en stor prosentandel av energiforbruket i mindre boligsamfunn ved å implementere et tilkoblet system med aktivt og passivt kontrollert lys, bevegelsesdetektorer, tidtakere som vises på syv segmentdisplayer, og kontrollbrytere. Dette eksemplet omhandler et enkelt system med tre bevegelsesdetektorer, en hovedbryter, en manuell/normal bryter, fire syv segmentdisplayer og et enkelt lys som systemet kontrollerer.

For eksempel i et valgt rom ville flere bevegelsesdetektorer være plassert rundt (dette eksempeldesignet har tre), og hver ville sende et signal (1) hvis det oppdager bevegelse, og (0) hvis det ikke gjør det. Hvis minst en av bevegelsesdetektorene oppdager bevegelse, tennes lysene hvis de ikke allerede er på, og lyser hvis de allerede er på. Når som helst alle bevegelsesdetektorer ikke oppdager noe, begynner en tidtaker å telle ned i en bestemt tid (justerbar i kode), og lysene lyser mens timeren teller ned. Når timeren er ferdig med å telle ned, stopper timeren og lysene slås av. Hvis minst én bevegelsesdetektor oppdager bevegelse mens timeren teller ned, stopper timeren og tilbakestilles. Og hvis minst én bevegelsesdetektor oppdager bevegelse mens lysene er slukket, tennes lysene umiddelbart.

Dette systemet har to moduser, en med timeren som nevnt ovenfor, og den andre der det er en bryter som styrer lysene manuelt (ignorerer sensorer). Det er en hovedbryter som lar brukeren velge hvilken modus de vil bruke basert på hvilken som helst de føler vil spare mer energi totalt sett. Eks. Et rom som en gang kan ha nytte av den passive timermodusen. Brukerne er ikke sikre på når folk skal passere, men det vil være en ulempe å slå av og på lysene hver gang de går inn og ut. som et soverom med en enkelt bruker ville vært bedre manuelt. Og hovedbryteren ville være nyttig i tilfeller som hvis personen som bodde på soverommet skulle forlate en lengre periode, så kunne hovedbryteren slås av, og timermodus ville fungere for å spare energi mer effektivt.

Så i dette systemet er det to statlige maskiner, en er hovedstatsmaskinen og en annen for nedtellingstimeren. Hovedstatsmaskinen har fem tilstander definert som sådan: 1. "lyser på, bevegelse oppdaget" (id = 000), 2. "lyser på, ingen bevegelse oppdaget" (id = 001), 3. "lyser av, ingen bevegelse oppdaget "(id = 010), 4." manuelt slått på "(id = 011) og 5." manuelt slått av "(id = 100). Denne hovedstatsmaskinen har fire innganger: hovedbryteren (ms), den manuelle/normale bryteren (ns), et signal som er høyt når minst én bryter oppdager bevegelse, og som er lav ellers (orx), og et signal som er høy når timeren er ferdig, og er lav ellers (td). Hovedstatsmaskinen har to utganger: lys (lys) og et signal som angir når nedtellingstimeren (timeren) eller (t) skal slås på (begge brukes om hverandre).

Den andre tilstandsmaskinen, nedtellingstimeren, har 12 tilstander: 10 av dem har id-er knyttet til tallet det syv segmentet viser- "seg 10" (id = 1010), "seg 9" (id = 1001), […], “Seg 2” (id = 0010), “seg 1” (id = 0001), og de to andre tilstandene viser begge null, og representerer at timeren er slått av- så det er det første tomme “tomme 1” (id = 1111) og det andre tomme "tomme 2" (id = 0000). Nedtellingstimeren har én inngang: timer (t) og tre utganger: tallet som vises i binær med fire bits (bin) og et signal som indikerer at timeren er ferdig (td).

Trinn 1: Black Box Diagram

Black Box Diagram
Black Box Diagram

Dette er en oversikt over hvordan hele systemet skal fungere, og er beskrevet med et svart boks diagram.

  • Klokken brukes til å klokke hovedmaskinen og dekoderen med syv segmenter; en tregere klokke er nødvendig for nedtelleren, så det er en klokkedelermodul som tar klokkeinngangen og sender ut en langsommere klokke for nedtelleren.
  • Mellomvariabelen (orx) i omslaget er knyttet til bevegelsessensorene og vil være høy hvis minst en av sensorene oppdager noe, og lavt ellers; den boolske ligningen for det er bare orx = s (2) eller s (1) eller s (0).
  • Hoved -fsm kontrollerer hvilken generell tilstand systemet er i, avhengig av inngangene (orx, ms, ns, td) og gir ut gjeldende tilstand det er i (sm) vist forenklet med de to signalene det brukes til (timer og lys).

    • (timer) er et innpakningssignal som sendes til nedtelleren fsm som inngang og styres av hovedfsmens nåværende tilstand. Det indikerer når timeren skal slås på.
    • (lys) er et innpakningssignal som brukes til å kontrollere lysdioden og styres av hovedfsmens nåværende tilstand.
  • Nedtelleren fsm styrer hva de syv segmentene viser, avhengig av inngangen (timeren) og sender ut gjeldende tilstand den er vist (sd) forenklet med de to signalene den brukes til (td og bin).

    • (td) er et innpakningssignal som sendes til hoved -fsm som inngang og styres av nedtelleren fsms nåværende tilstand. Det fungerer som et tilbakemeldingssignal som indikerer når timeren er ferdig.
    • (bin) er et fire -bits wrapper -signal som er sammenkoblet med fire bits med null ("0000" og bin) og de kombinerte åtte bitene sendes til (q), et åtte -bits wrapper -signal, som i sin tur sendes til de syv segmentdekoder under (ALU_VAL).
  • Den syv segmentmodulen er den samme som på Polylearn; hovedinngangene tar et 8 -bits tall (bin) til (ALU_VAL) for å vises på fire forskjellige syv segmentdisplayer ved å bruke utgangene (SEGMENTS) til wrappersignal (seg) og (DISP_EN) til wrapper (disp_en).

    • Siden to eller flere syv segmentdisplayer ikke kan vise forskjellige siffer samtidig, er det nødvendig med en klokke for å bla gjennom de fire seggene, og vise det riktige sifferet om gangen for hvert sseg som slås på individuelt, og sykling raskt nok gjør at ssegs ser ut til å være slått på samtidig.
    • (tegn og gyldig) er konstant i hele dette programmet, så (tegn) er permanent satt lavt og (gyldig) er permanent høyt.
    • (ALU_VAL) tar inn wrappersignalet (q) som en inngang, som representerer tallet som skal vises på syv segmentdisplayet i binær.
    • Utgangen (SEGMENTER) sendes til et åtte bits wrapper signal (seg) og (DISP_EN) til et fire bit wrapper signal (disp_en).
  • Det er også en D flip -flop -modul som ikke eksplisitt vises i diagrammet, men er nødvendig for de to tilstandsmaskinene som submoduler og hjelper statene med å transistjon synkront.

    • (3) av disse er nødvendige for hoved -fsm siden 2^(3) = 8> 5 tilstander for koding
    • (4) av disse er nødvendige for nedtelleren fsm siden 2^4 = 16> 12 tilstander for koding

Trinn 2: Oppgi maskiner

Statlige maskiner
Statlige maskiner

For å kunne designe de to statlige maskinene riktig, må de enkelte statene defineres tydelig, med sine utganger og tilstanden den overgår til basert på de forskjellige mulige inngangene.

Hoved fsm sier:

"Lyser, bevegelse oppdaget" (id = 000)

Lysene er tent, minst en av bevegelsesdetektorene oppdager bevegelse, så orx må være høy og ms er slått på.

  • Utganger: lys = 1 og timer = 0
  • Holder seg som denne tilstanden når ms = 1 og orx = 1.
  • Angir "lyser på, ingen bevegelse oppdaget" hvis ms = 1 og orx = 0.
  • Går til tilstanden "manuelt slått på" hvis ms = 0 og ns = 1.
  • Går til tilstanden "manuelt slått av" hvis ms = 0 og ns = 0.

“Lyser, ingen bevegelse oppdaget” (id = 001)

Lysene er tent, ingen bevegelse er oppdaget fra noen bevegelsesdetektor, så orx må være lav og ms er slått på. I begynnelsen av denne tilstanden forteller timeren som settes høyt nedtellingen fsm til å begynne å telle ned, fortsetter å telle ned og slutter å telle ned når nedtellingen fsm forteller denne fsm at den er ferdig med å telle.

  • Utganger: lys = 1 og timer = 1.
  • Blir som denne tilstanden når ms = 1 og orx = 0 og td (timeren er ferdig) = 0.
  • Angir "lyser på, bevegelse oppdaget" hvis ms = 1 og orx = 1.
  • Går til tilstanden "lyser av, ingen bevegelse oppdaget" hvis ms = 1 og orx = 0 og td = 1.
  • Går til tilstanden "manuelt slått på" hvis ms = 0 og ns = 1.
  • Går til tilstanden "manuelt slått av" hvis ms = 0 og ns = 0.

“Lyser, ingen bevegelse oppdaget” (id = 010)

Lysene er slukket, ingen bevegelse oppdaget fra noen bevegelsessensor og timeren er ferdig med å telle ned, så orx må være lav, ms er slått på og td er av.

  • Utganger: lys = 0 og timer = 0.
  • Holder seg som denne tilstanden når ms = 1 og orx = 0.
  • Angir "lyser på, bevegelse oppdaget" hvis ms = 1 og orx = 1.
  • Går til tilstanden "manuelt slått på" hvis ms = 0 og ns = 1.
  • Går til tilstanden "manuelt slått av" hvis ms = 0 og ns = 0.

“Slått på manuelt” (id = 011)

Lys er tent, bevegelsesdetektorer er irrelevante, så ms er slått av og ns er slått på.

  • Utganger: lys = 1 og timer = 0.
  • Holder seg som denne tilstanden når ms = 0 og ns = 1.
  • Går til tilstanden "manuelt slått av" hvis ms = 0 og ns = 0.
  • Går til tilstanden "lyser av, ingen bevegelse oppdaget hvis ms = 1.

"Manuelt slått av" (id = 100)

Lys er slått av, bevegelsesdetektorer er irrelevante, så ms er slått av og ns er slått av.

  • Utganger: lys = 0 og timer = 0.
  • Blir som denne tilstanden når ms = 0 og ns = 0.
  • Går til tilstanden "manuelt slått på" hvis ms = 0 og ns = 1.
  • Går til tilstanden "lyser av, ingen bevegelse oppdaget hvis ms = 1.

Nedteller sier:

“Seg 10” (id = 1010)

Syv segmentvisning viser en 10.

  • Utganger: bin = “1010” og td = 0.
  • Angir “seg 9” hvis tidtaker = 1.
  • Angir "tomt 2" hvis tidtaker = 0.

“Seg 9” (id = 1001)

Syv segmentvisning viser en 9.

  • Utganger: bin = “1001” og td = 0.
  • Angir “seg 8” hvis tidtaker = 1.
  • Angir "tomt 2" hvis tidtaker = 0.

(Statene "Seg 8" ned til "Seg 2" utelates fordi de følger samme mønster som "Seg 10" og "Seg 9" og ikke er nødvendig for forklaring)

“Seg 1” (id = 0001)

Syv segmentvisning viser en 1.

  • Utganger: bin = “0001” og td = 0.
  • Angir "tomt 2" på neste stigende kant på klokken (ingen input nødvendig).

"Tomt 2" (id = 1111)

Syv segmentvisning viser en 0. Hensikten med en annen blank tilstand er slik at det er en egen tilstand for når td = 1 for sikkerhet.

  • Utganger: bin = “1111” og td = 1.
  • Angir "blank 1" på neste stigende kant på klokken (ingen input nødvendig).

"Tomt 1" (id = 0000)

Syv segmentdisplay viser en 0. Dette er tilstanden systemet holder seg i når hovedtilstandsmaskinen er i tilstand "lyser av, ingen bevegelse oppdaget".

  • Utganger: bin = “0000” og td = 0.
  • Angir “seg 10” hvis tidtaker = 1.

Trinn 3: Angi maskinens sannhetstabeller, eksitasjonsligninger og utmatningsligninger

State Machine Truth Tables, Excitation Equations og Output Equations
State Machine Truth Tables, Excitation Equations og Output Equations
State Machine Truth Tables, Excitation Equations og Output Equations
State Machine Truth Tables, Excitation Equations og Output Equations
State Machine Truth Tables, Excitation Equations og Output Equations
State Machine Truth Tables, Excitation Equations og Output Equations
State Machine Truth Tables, Excitation Equations og Output Equations
State Machine Truth Tables, Excitation Equations og Output Equations

Det neste trinnet er å lage sannhetstabeller for de to tilstandsmaskinene og eksitasjonsligninger og utgangsligninger for hver fsm. For hver fsm eksitasjonsligning må det være ligninger for hver neste tilstandskodede bit når det gjelder nåværende tilstand og dens inngangssignaler. For hver fsm -utgangsligning må det være ligninger for hvert utgangssignal når det gjelder nåværende tilstand. Alle de fire ligningssettene kan trekkes fra sannhetstabellene som er avbildet. (qn er den neste tilstandskodede biten for hver tilstandsmaskin, og q er den nåværende tilstanden)

(000) tilsvarer q (2) 'q (1)' q (0) ', og (0000) tilsvarer 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) ')

Eksitasjonsligninger for hoved -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)]

Utgangsligninger for hoved -fsm:

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

Eksitasjonsligninger for nedtelleren 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)]

Utgangsligninger for nedtelleren 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)

Trinn 4: Innpakning, submoduler og begrensning

Som forklart allerede i trinn 1, er disse modulene nødvendige for dette prosjektet og er alle knyttet sammen med innpakningsmodulen med tittelen "final_proj.vhd". Begrensningsfilen med tittelen "Basys3_Master.xdc" brukes til å koble alle wrapperinngangene og -utgangene til switcher, de syv segmentene og I/O -portene på Basys 3 -kortet. Hovedbryteren bør være bryteren på brettet nærmest siden ledningene er på, den normale/manuelle bryteren er den nest nærmeste, og de tre bryterne som representerer de tre bevegelsessensorene er de tre bryterne umiddelbart ved siden av normal/manuell bryter. All koden (boolske ligninger, moduldeklarasjoner, osv.) Er allerede skrevet ut i filene, så du trenger ikke å skrive noe annet for å få dette til å fungere.

Trinn 5: I/O -porter for LED

I/O -porter for LED
I/O -porter for LED
I/O -porter for LED
I/O -porter for LED

Det siste trinnet for dette prosjektet er å bruke en LED for å vise om (lys) faktisk slås på og av. Kablingene er vist på de to bildene. Sørg for at det er en motstand i serie med lysdioden (minst 330 ohm) for ikke å brenne ut ledningen, og sørg for at ledets lange pinne er koblet til den samme kvinnelige overskriften på basiskortet som den røde ledningen er vist (øverst til høyre) og den kortere pinnen er koblet til bakken, den samme kvinnelige overskriften som den svarte ledningen vist (øverst, andre fra venstre).

Anbefalt: