INHOUDSOPGAWE:

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

Video: L I G H T S: 5 stappe

Video: L I G H T S: 5 stappe
Video: The Weeknd - Blinding Lights (Official Video) 2024, November
Anonim
L I G H T S
L I G H T S

Die doel van hierdie laaste projek was om iets te skep wat fokus op volhoubaarheid en die implementering van digitale ontwerpkonsepte, en om dit te doen, het ek besluit om 'n skaalbare energiebesparingsstelsel te ontwerp met behulp van vhdl en gemaak vir die Basys 3 Board (Artix-7 35T-reeks). Skaalbaar omdat 'n aantal sensors in 'n kamer geplaas kan word en 'n aantal van hierdie stelsels rondom 'n gebou of 'n huis geplaas kan word. Wat hierdie stelsel sou doen, is om teoreties duisende dollars in kommersiële geboue te bespaar en 'n groot persentasie energieverbruik in kleiner woongemeenskappe te verminder deur 'n gekoppelde stelsel van aktief en passief beheerde ligte, bewegingsdetektore, timers wat op sewe segmentskerms vertoon word, te implementeer, en beheer skakelaars. Hierdie voorbeeld handel oor 'n enkele stelsel met drie bewegingsdetektore, 'n hoofskakelaar, 'n hand/normale skakelaar, vier sewe segmentskerms en 'n enkele lig wat die stelsel beheer.

Byvoorbeeld, in 'n gekose kamer word verskeie bewegingsdetektore geplaas (hierdie voorbeeldontwerp het drie), en elkeen sal 'n sein (1) stuur as dit beweging opspoor, en (0) as dit nie die geval is nie. As ten minste een van die bewegingsdetektore bewegings opspoor, word die ligte aangeskakel as dit nie reeds aangeskakel is nie, en bly dit aan as dit reeds aan is. Te alle tye bespeur alle bewegingsdetektore niks, 'n timer begin 'n vasgestelde tyd aftel (in kode verstelbaar), en die ligte bly aan terwyl die timer aftel. Sodra die timer klaar is om af te tel, stop die timer en die ligte gaan af. As ten minste een bewegingsdetektor beweging opspoor terwyl die tydteller aftel, stop die timer en herstel. En as ten minste een bewegingsdetektor beweging opspoor terwyl die ligte af is, skakel die ligte onmiddellik aan.

Hierdie stelsel het twee modusse, een met die timer soos hierbo genoem, en die tweede met 'n skakelaar wat die ligte met die hand beheer (ignoreer sensors). Daar is 'n hoofskakelaar waarmee die gebruiker kan kies watter modus hy wil gebruik, gebaseer op die een wat hulle voel meer energie bespaar. Bv. 'N Kamer soos 'n gang kan baat vind by die passiewe timer-modus- gebruikers is nie seker wanneer mense deurkom nie, maar dit is 'n ongerief om die ligte aan en uit te skakel elke keer as hulle in- en uitgaan. as 'n slaapkamer met 'n enkele gebruiker is dit beter om dit met die hand te bedryf. En die hoofskakelaar sou nuttig wees in gevalle soos as die persoon wat in die slaapkamer woon vir 'n lang tydperk sou vertrek, dan kon die hoofskakelaar afgeskakel word en sou die tydmodus werk om energie doeltreffender te bespaar.

In hierdie stelsel is daar dus twee staatsmasjiene, een is die hoofstaatsmasjien en 'n ander vir die afteller. Die hooftoestandmasjien het vyf toestande wat so gedefinieer is: 1. "ligte aan, beweging opgespoor" (id = 000), 2. "ligte aan, geen beweging opgespoor" (id = 001), 3. "ligte af, geen beweging nie opgespoor "(id = 010), 4." met die hand aangeskakel "(id = 011) en 5." met die hand afgeskakel "(id = 100). Hierdie hooftoestelmasjien het vier insette: die hoofskakelaar (ms), die hand/normale skakelaar (ns), 'n sein wat hoog is wanneer ten minste een skakelaar beweging opspoor, en andersins laag is (orx), en 'n sein wat hoog as die timer klaar is, en andersins laag (td). Die hooftoestelmasjien het twee uitsette: ligte (ligte) en 'n sein wat aandui wanneer die afteller (timer) of (t) aangeskakel moet word (beide word uitruilbaar gebruik).

Die tweede toestemmasjien, die afteller, het 12 state: 10 van hulle het ID's wat verband hou met die getal wat die sewe segment vertoon- "seg 10" (id = 1010), "seg 9" (id = 1001), […], "Seg 2" (id = 0010), "seg 1" (id = 0001) en die ander twee toestande vertoon albei nul, wat die tydteller afskakel- so daar is die eerste leë "leë 1" (id = 1111) en die tweede leë "blank 2" (id = 0000). Die afteller het een ingang: timer (t) en drie uitgange: die getal wat in binêre met vier bisse (bin) vertoon word en 'n sein wat aandui dat die timer is gedoen (td).

Stap 1: Black Box -diagram

Black Box diagram
Black Box diagram

Dit is 'n oorsig van hoe die hele stelsel funksioneer, en word beskryf met 'n swart boksdiagram.

  • Die klok word gebruik om die hooftoestandmasjien en die sewesegment -dekodeerder te klok; 'n stadiger horlosie is nodig vir die afwaartse toonbank, so daar is 'n klokverdelermodule wat die klok se invoer neem en 'n stadiger horlosie vir die afwaartse toonbank uitvoer.
  • Die tussenveranderlike (orx) in die omhulsel is aan die bewegingsensors vasgemaak en sal hoog wees as ten minste een van die sensors iets opspoor en andersins laag; die booleaanse vergelyking daarvoor is net orx = s (2) of s (1) of s (0).
  • Die belangrikste fsm beheer in watter algemene toestand die stelsel is, afhangende van die insette (orx, ms, ns, td) en voer die huidige toestand waarin dit is (sm) uit, vereenvoudig met die twee seine waarvoor dit gebruik word (timer en ligte).

    • (timer) is 'n wikkelsignaal wat na die afwaartse toonbank fsm gestuur word as sy inset en word beheer deur die huidige fsm se huidige toestand. Dit dui aan wanneer die timer aangeskakel moet word.
    • (ligte) is 'n wikkelsignaal wat gebruik word om die LED te beheer en word beheer deur die huidige fsm se huidige toestand.
  • Die afwaartse teller fsm beheer wat die sewe segment vertoon, afhangende van die invoer (timer) en gee die huidige toestand waarin dit vertoon word (sd) vereenvoudig met die twee seine waarvoor dit gebruik word (td en bin).

    • (td) is 'n wikkelsignaal wat as die inset na die hoof -fsm gestuur word en word beheer deur die afwaartse teller fsm se huidige toestand. Dit funksioneer as 'n terugvoersignaal wat aandui wanneer die tydteller klaar is.
    • (bin) is 'n vierbit -wikkelsignaal wat saamgevoeg is met vier bits van nul ("0000" en bin) en die gekombineerde agt bisse word gestuur na (q), 'n agt bis -wrapper -sein, wat weer na die sewe gestuur word segmentdekodeerder onder (ALU_VAL).
  • Die module met sewe segmente is dieselfde as op Polylearn; die belangrikste insette neem 'n 8 -bits nommer (bin) tot (ALU_VAL) in om op vier verskillende sewe segmentskerms te verskyn, met behulp van die uitsette (SEGMENTS) na die wikkelsignaal (seg) en (DISP_EN) na wrapper (disp_en).

    • Aangesien twee of meer sewe segmentskerms nie verskillende syfers op dieselfde tyd kan vertoon nie, is 'n horlosie nodig om deur die vier segmente te blaai, wat die gepaste syfer op 'n slag vertoon vir elke sseg wat individueel aangeskakel word, en om vinnig te ry, maak die ssegs blyk tegelyk aan te wees.
    • (teken en geldig) is konstant gedurende hierdie program, so (teken) is permanent laag gestel en (geldig) is permanent hoog gestel.
    • (ALU_VAL) neem die omslagsein (q) in as 'n invoer, wat die getal verteenwoordig wat op die sewe segment -vertoning in binêre vertoon sal word.
    • Die uitset (SEGMENTS) word gestuur na 'n agt bis -wikkelsignaal (seg) en (DISP_EN) na 'n vierbit -wikkel -sein (disp_en).
  • Daar is ook 'n D flip -flop -module wat nie eksplisiet in die diagram getoon word nie, maar dit is nodig vir die twee toestelmasjiene as submodules en help die toestande om sinchronies te oorgaan.

    • (3) hiervan is nodig vir die hoof -fsm, aangesien 2^(3) = 8> 5 toestande vir kodering
    • (4) hiervan is nodig vir die afwaartse teller fsm aangesien 2^4 = 16> 12 toestande vir kodering

Stap 2: Stel masjiene voor

Staatsmasjiene
Staatsmasjiene

Om die twee staatsmasjiene behoorlik te ontwerp, moet die individuele toestande duidelik gedefinieer word, met sy uitsette en die toestand waarna dit oorgaan, gebaseer op die verskillende moontlike insette.

Hoof fsm verklaar:

“Ligte aan, beweging opgespoor” (id = 000)

Ligte is aan, ten minste een van die bewegingsdetektore bespeur beweging, dus moet orx hoog wees en ms word aangeskakel.

  • Uitsette: ligte = 1 en timer = 0
  • Bly in hierdie toestand wanneer ms = 1 en orx = 1.
  • Gee 'ligte aan, geen beweging bespeur' as ms = 1 en orx = 0.
  • Gee 'handmatig aangeskakel' as ms = 0 en ns = 1.
  • Gee 'handmatig afgeskakel' as ms = 0 en ns = 0.

“Ligte aan, geen beweging bespeur nie” (id = 001)

Ligte is aan, geen beweging word van 'n bewegingsdetektor waargeneem nie, dus moet die orx laag wees en ms word aangeskakel. Ook aan die begin van hierdie toestand vertel die timer wat hoog is, dat die aftelling fsm moet begin aftel, begin aftel en stop met aftel sodra die aftelling fsm hierdie fsm vertel dat dit klaar is met tel.

  • Uitsette: ligte = 1 en timer = 1.
  • Bly in hierdie toestand wanneer ms = 1 en orx = 0 en td (timer is gedoen) = 0.
  • Gee 'ligte aan, beweging opgespoor' as ms = 1 en orx = 1.
  • Gee 'ligte af, geen beweging bespeur' as ms = 1 en orx = 0 en td = 1.
  • Gee 'handmatig aangeskakel' as ms = 0 en ns = 1.
  • Gee 'handmatig afgeskakel' as ms = 0 en ns = 0.

“Ligte af, geen beweging bespeur nie” (id = 010)

Ligte is af, geen beweging word van enige bewegingsensor waargeneem nie en die timer is afgetel, dus moet die orx laag wees, ms word aangeskakel en td is af.

  • Uitsette: ligte = 0 en timer = 0.
  • Bly in hierdie toestand wanneer ms = 1 en orx = 0.
  • Gee 'ligte aan, beweging opgespoor', as ms = 1 en orx = 1.
  • Gee 'handmatig aangeskakel' as ms = 0 en ns = 1.
  • Gee 'handmatig afgeskakel' as ms = 0 en ns = 0.

“Handmatig aangeskakel” (id = 011)

Ligte is aan, bewegingsdetektore is nie relevant nie, dus word ms uitgeskakel en ns is aangeskakel.

  • Uitsette: ligte = 1 en timer = 0.
  • Bly in hierdie toestand wanneer ms = 0 en ns = 1.
  • Gee 'handmatig afgeskakel' as ms = 0 en ns = 0.
  • Gee aan "ligte af, geen beweging word waargeneem as ms = 1.

“Handmatig afgeskakel” (id = 100)

Ligte is af, bewegingsdetektore is nie relevant nie, dus word ms uitgeskakel en ns is afgeskakel.

  • Uitsette: ligte = 0 en timer = 0.
  • Dit bly in hierdie toestand wanneer ms = 0 en ns = 0.
  • Gee 'handmatig aangeskakel' as ms = 0 en ns = 1.
  • Gee aan "ligte af, geen beweging word waargeneem as ms = 1.

Af toonbank sê:

“Seg 10” (id = 1010)

Die sewe segment vertoon 'n 10.

  • Uitsette: bin = “1010” en td = 0.
  • Gee 'seg 9' as timer = 1 is.
  • Gee 'blank 2' as timer = 0 is.

“Seg 9” (id = 1001)

Die sewe segment vertoon 'n 9.

  • Uitsette: bin = “1001” en td = 0.
  • Gee 'seg 8' as timer = 1 is.
  • Gee 'blank 2' as timer = 0 is.

(State "Seg 8" tot "Seg 2" word weggelaat omdat dit dieselfde patroon volg as "Seg 10" en "Seg 9" en nie nodig is vir verduideliking nie)

“Seg 1” (id = 0001)

Die sewe segment vertoon 'n 1.

  • Uitsette: bin = “0001” en td = 0.
  • Gee 'blank 2' op die volgende stygende horlosie (geen invoer nodig nie).

“Leeg 2” (id = 1111)

Sewe segment vertoon 'n 0. Die doel van 'n tweede leë toestand is sodat daar 'n aparte toestand is vir wanneer td = 1 vir veiligheid.

  • Uitsette: bin = “1111” en td = 1.
  • Gee 'blank 1' op die volgende stygende horlosie (geen invoer nodig nie).

“Leeg 1” (id = 0000)

Die sewe segment vertoon 'n 0. Dit is die toestand waarin die stelsel bly wanneer die hooftoestel masjien in toestand is "ligte af, geen beweging opgespoor".

  • Uitsette: bin = “0000” en td = 0.
  • Gee 'seg 10' as timer = 1 is.

Stap 3: Waarheidstabelle vir masjiene, opwindingsvergelykings en uitvoervergelykings

Waarheidstabelle, opwindingsvergelykings en uitvoervergelykings van die staatmasjien
Waarheidstabelle, opwindingsvergelykings en uitvoervergelykings van die staatmasjien
Waarheidstabelle, opwindingsvergelykings en uitvoervergelykings van die staatmasjien
Waarheidstabelle, opwindingsvergelykings en uitvoervergelykings van die staatmasjien
Waarheidstabelle, opwindingsvergelykings en uitvoervergelykings van die staatmasjien
Waarheidstabelle, opwindingsvergelykings en uitvoervergelykings van die staatmasjien
Waarheidstabelle, opwindingsvergelykings en uitvoervergelykings van die staatmasjien
Waarheidstabelle, opwindingsvergelykings en uitvoervergelykings van die staatmasjien

Die volgende stap is om waarheidstabelle vir die twee staatsmasjiene en eksitasievergelykings en uitsetvergelykings vir elke fsm te skep. Vir elke fsm -eksitasievergelyking moet daar vergelykings wees vir elke volgende toestand -gekodeerde bis in terme van die huidige toestand en sy insetseine. Vir elke fsm -uitsetvergelyking moet daar vergelykings wees vir elke uitsetsein in terme van die huidige toestand. Al vier stelle vergelykings kan uit die getoonde waarheidstabelle getrek word. (qn is die volgende toestand gekodeerde bis vir elke staatsmasjien, en q is die huidige toestand)

(000) gelykstaande aan q (2) 'q (1)' q (0) ', en (0000) gelykstaande aan q (3)' q (2) 'q (1)' q (0) '

(bv. (0101) is q (3) 'q (2) q (1)' q (0) en (110) is q (2) q (1) q (0) ')

Opwindingsvergelykings vir die belangrikste 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)]

Uitsetvergelykings vir die belangrikste fsm:

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

Opwindingsvergelykings vir die af -toonbank 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)]

Uitsetvergelykings vir die afwaartse teller 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)

Stap 4: Wikkelaar, submodules en beperking

Soos reeds in stap 1 uiteengesit, is hierdie modules nodig vir hierdie projek en is dit almal saamgebind met die omslagmodule met die titel "final_proj.vhd". Die beperkingslêer met die titel "Basys3_Master.xdc" word gebruik om al die toevoerinvoer en -uitsette aan skakelaars, die sewe segment- en I/O -poorte op die Basys 3 -bord te koppel. Die hoofskakelaar moet die skakelaar op die bord wees wat die naaste aan die kant van die drade is, die normale/handskakelaar is die tweede naaste, en die drie skakelaars wat die drie bewegingsensors verteenwoordig, is die drie skakelaars onmiddellik langs die normale/handskakelaar. Al die kode (Booleaanse vergelykings, moduleverklarings, ens.) Is reeds in die lêers geskryf, sodat u niks anders hoef te skryf om dit te laat werk nie.

Stap 5: I/O -poorte vir LED

I/O -poorte vir LED
I/O -poorte vir LED
I/O -poorte vir LED
I/O -poorte vir LED

Die laaste stap vir hierdie projek is om 'n LED te gebruik om aan te toon of (ligte) werklik aan- en uitskakel. Die bedrading word op die twee foto's getoon. Maak seker dat daar 'n weerstand in serie is met die LED (ten minste 330 ohm) om die LED nie uit te brand nie en maak seker dat die LED se lang pen aan dieselfde vroulike kopstuk op die basiese bord gekoppel is as wat die rooi draad getoon word (bo regs) en die korter pen is aan die grond gekoppel, dieselfde vroulike kop as die swart draad (bo, tweede van links).

Aanbeveel: