Sisällysluettelo:
- Vaihe 1: Mustan laatikon kaavio
- Vaihe 2: Tilakoneet
- Vaihe 3: Ilmoita koneen totuustaulukot, viritysyhtälöt ja lähtöyhtälöt
- Vaihe 4: Kääre, alimoduulit ja rajoitukset
- Vaihe 5: I/O -portit LEDille
Video: L I G H T S: 5 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:03
Tämän lopullisen projektin tarkoituksena oli luoda jotain, joka keskittyy kestävyyteen ja toteuttaa digitaalisia suunnittelukonsepteja, ja tätä varten päätin suunnitella skaalautuvan virransäästöjärjestelmän vhdl: n avulla ja tehty Basys 3 -levylle (Artix-7 35T -sarja)). Skaalattava, koska huoneeseen voidaan sijoittaa mikä tahansa määrä antureita ja mikä tahansa määrä näitä järjestelmiä voidaan sijoittaa rakennuksen tai talon ympärille. Tämä järjestelmä tekisi teoriassa säästöjä tuhansia dollareita liikerakennuksissa ja pienentäisi suurta prosenttiosuutta energiankulutuksesta pienemmissä asuinalueissa ottamalla käyttöön yhdistetty järjestelmä, jossa on aktiivisesti ja passiivisesti ohjatut valot, liiketunnistimet, ajastimet, jotka näkyvät seitsemän segmentin näytöissä ja ohjauskytkimet. Tässä esimerkissä käsitellään yhtä järjestelmää, jossa on kolme liiketunnistinta, pääkytkin, manuaalinen/normaali kytkin, neljä seitsemän segmentin näyttöä ja yksi järjestelmän ohjaama valo.
Esimerkiksi valittuun huoneeseen sijoitettaisiin useita liikeilmaisimia (tässä esimerkkisuunnittelussa on kolme), ja jokainen lähettäisi signaalin (1), jos se havaitsee liikkeen, ja (0), jos ei. Jos ainakin yksi liiketunnistimista havaitsee liikkeen, valot syttyvät, jos ne eivät ole vielä päällä, ja pysyvät päällä, jos ne ovat jo päällä. Milloin tahansa kaikki liiketunnistimet eivät havaitse mitään, ajastin alkaa laskea alas tietyn ajan (säädettävissä koodissa) ja valot palavat, kun ajastin laskee alaspäin. Kun ajastin on laskenut alas, ajastin pysähtyy ja valot sammuvat. Jos vähintään yksi liiketunnistin havaitsee liikkeen ajastimen laskiessa alas, ajastin pysähtyy ja nollautuu. Ja jos ainakin yksi liiketunnistin havaitsee liikkeen valojen ollessa sammuksissa, valot syttyvät heti.
Tässä järjestelmässä on kaksi tilaa, joista toisessa on ajastin, kuten edellä on mainittu, ja toisessa, jossa on kytkin, joka ohjaa valoja manuaalisesti (antureiden huomiotta jättäminen). On pääkytkin, jonka avulla käyttäjä voi valita, mitä tilaa hän haluaa käyttää sen mukaan, kumpi heistä kokee säästävän enemmän energiaa. Esim. Eteisen kaltainen huone voi hyötyä passiivisesta ajastintilasta- käyttäjät eivät ole varmoja siitä, milloin ihmiset kulkevat läpi, mutta valojen sytyttäminen ja sammuttaminen aina, kun he tulevat sisään ja poistuvat, olisi haittaa, kun taas tällainen huone yhden makuuhuoneen makuuhuone olisi parempi käyttää käsin. Ja pääkytkimestä olisi apua esimerkiksi silloin, jos makuuhuoneessa asuva henkilö lähtisi pidemmäksi aikaa, pääkytkin voitaisiin sammuttaa ja ajastintoiminto säästäisi energiaa tehokkaammin.
Joten tässä järjestelmässä on kaksi tilakonetta, joista toinen on päätilakone ja toinen ajastimelle. Päätilakoneessa on viisi sellaisena määriteltyä tilaa: 1. "valot päällä, liike havaittu" (id = 000), 2. "valot päällä, ei liikettä havaittu" (id = 001), 3. "valot pois päältä, ei liikettä" havaittu "(id = 010), 4." manuaalisesti päällä "(id = 011) ja 5." manuaalisesti pois päältä "(id = 100). Tässä päätilakoneessa on neljä tuloa: pääkytkin (ms), manuaalinen/normaali kytkin (ns), signaali, joka on korkea, kun ainakin yksi kytkin havaitsee liikkeen, ja on muuten alhainen (orx), ja signaali, joka on korkea, kun ajastin on valmis, ja on muuten alhainen (td). Päätilakoneessa on kaksi lähtöä: valot (valot) ja signaali, joka osoittaa, milloin ajastin (ajastin) tai (t) on kytkettävä päälle (molempia käytetään keskenään).
Toisessa tilakoneessa, ajastimessa, on 12 tilaa: kymmenessä niistä on tunnus, joka liittyy numeroon, jota seitsemän segmenttiä näyttää- “seg 10” (id = 1010), “seg 9” (id = 1001), […], “Seg 2” (id = 0010), “seg 1” (id = 0001) ja molemmat muut tilat näyttävät molemmat nollaa, mikä tarkoittaa, että ajastin on pois päältä, joten ensimmäinen tyhjä "tyhjä 1" (id = 1111)) ja toinen tyhjä "tyhjä 2" (id = 0000). Ajastimessa on yksi sisääntulo: ajastin (t) ja kolme lähtöä: binäärinäytössä näkyvä luku, jossa on neljä bittiä (bin) ja signaali, joka osoittaa, että ajastin on valmis (td).
Vaihe 1: Mustan laatikon kaavio
Tämä on yleiskatsaus siitä, miten koko järjestelmän on tarkoitus toimia, ja sitä kuvataan mustan laatikon kaavion avulla.
- Kelloa käytetään kellotamaan päätilakonetta ja seitsemän segmentin dekooderia; alaslaskuria varten tarvitaan hitaampi kello, joten on kellonjakamoduuli, joka ottaa kellotulon ja lähettää hitaamman kellon alaslaskuria varten.
- Kääreessä oleva välimuuttuja (orx) on sidottu liikeantureihin ja on korkea, jos ainakin yksi antureista havaitsee jotain, ja alhainen muuten; Boolen yhtälö on vain orx = s (2) tai s (1) tai s (0).
-
Tärkein fsm ohjaa järjestelmän yleistä tilaa tulojen (orx, ms, ns, td) mukaan ja antaa sen nykyisen tilan (sm), joka on esitetty yksinkertaistettuna kahdella signaalilla, jota käytetään (ajastin ja valot).
- (ajastin) on käärintäsignaali, joka lähetetään alaslaskurille fsm tulona ja jota ohjaa päälaitteen nykyinen tila. Se osoittaa, milloin ajastin kytketään päälle.
- (valot) on käärintäsignaali, jota käytetään ohjaamaan lediä, ja sitä ohjaa pääyksikön nykyinen tila.
-
Alaslaskurin fsm ohjaa sitä, mitä seitsemän segmenttiä näyttää tulon (ajastimen) mukaan, ja antaa sen nykyisen tilan (sd), joka on yksinkertaistettu kahdella signaalilla, joita käytetään (td ja bin).
- (td) on käärintäsignaali, joka lähetetään pääyksikköön sen tulona ja jota ohjaa alaslaskurin fsm: n nykyinen tila. Se toimii takaisinkytkentäsignaalina, joka osoittaa, milloin ajastin on suoritettu.
- (bin) on nelibittinen käärintäsignaali, joka on yhdistetty neljään bittiin nolla ("0000" & bin) ja yhdistetyt kahdeksan bittiä lähetetään (q), kahdeksan bittinen kääritesignaali, joka puolestaan lähetetään seitsemälle bitille segmentin dekooderi alla (ALU_VAL).
-
Seitsemän segmentin moduuli on sama kuin Polylearnissa; sen päätulot syöttävät 8 -bittisen numeron (bin) - (ALU_VAL), jotta ne voidaan näyttää neljässä eri seitsemän segmentin näytössä käyttäen lähtöjä (SEGMENTS) kääreiden signaalille (seg) ja (DISP_EN) kääreille (disp_en).
- Koska kaksi tai useampi seitsemän segmentin näyttö ei voi näyttää eri numeroita samanaikaisesti, neljän kellon selaamiseen tarvitaan kello, joka näyttää sopivan numeron kerrallaan jokaiselle sekunnille, joka kytketään päälle erikseen, ja pyöräily riittävän nopeasti tekee ssegs näyttää olevan päällä kaikki kerralla.
- (merkki ja kelvollinen) ovat vakioita koko tämän ohjelman ajan, joten (merkki) on pysyvästi alhainen ja (kelvollinen) pysyvästi korkea.
- (ALU_VAL) ottaa kääreen signaalin (q) tuloksi, joka edustaa numeroa, joka näytetään binäärinä seitsemän segmentin näytöllä.
- Lähtö (SEGMENTS) lähetetään kahdeksan bitin käärintäsignaalille (seg) ja (DISP_EN) nelibittiselle käärintäsignaalille (disp_en).
-
On myös D -flip -flop -moduuli, jota ei ole selvästi esitetty kaaviossa, mutta jota tarvitaan molemmille tilakoneille alimoduuleina ja auttaa tilojen transistoria synkronisesti.
- (3) näistä tarvitaan pää fsm: lle, koska 2^(3) = 8> 5 tilaa koodausta varten
- (4) näistä tarvitaan alaslaskurin fsm: lle, koska 2^4 = 16> 12 tilaa koodausta varten
Vaihe 2: Tilakoneet
Jotta nämä kaksi tilakonetta voidaan suunnitella oikein, yksittäiset tilat on määriteltävä selkeästi, niiden lähdöt ja tila, johon se siirtyy eri mahdollisten panosten perusteella.
Tärkein fsm toteaa:
"Valot päällä, liike havaittu" (id = 000)
Valot ovat päällä, ainakin yksi liikeilmaisimista havaitsee liikkeen, joten orx: n on oltava korkea ja ms on päällä.
- Lähdöt: valot = 1 ja ajastin = 0
- Pysyy tässä tilassa, kun ms = 1 ja orx = 1.
- Menee tilaan "valot päällä, liikettä ei havaittu", jos ms = 1 ja orx = 0.
- Menee tilaan "manuaalisesti päällä", jos ms = 0 ja ns = 1.
- Menee tilaan "käsin pois päältä", jos ms = 0 ja ns = 0.
“Valot päällä, liikettä ei havaittu” (id = 001)
Valot ovat päällä, mitään liikettä ei havaittu mistään liiketunnistimesta, joten orx: n on oltava alhainen ja ms on päällä. Myös tämän tilan alussa korkealle asetettu ajastin käskee ajastimen fsm: n aloittamaan laskennan, jatkaa laskemista ja lopettaa laskennan, kun laskuri fsm kertoo tälle fsm: lle, että se on laskenut.
- Lähdöt: valot = 1 ja ajastin = 1.
- Pysyy tässä tilassa, kun ms = 1 ja orx = 0 ja td (ajastin on tehty) = 0.
- Menee tilaan "valot päällä, liike havaittu", jos ms = 1 ja orx = 1.
- Menee tilaan "valot pois päältä, liikettä ei havaittu", jos ms = 1 ja orx = 0 ja td = 1.
- Menee tilaan "manuaalisesti päällä", jos ms = 0 ja ns = 1.
- Menee tilaan "käsin pois päältä", jos ms = 0 ja ns = 0.
“Valot pois päältä, liikettä ei havaittu” (id = 010)
Valot ovat sammuneet, liikettä ei havaittu mistään liiketunnistimesta ja ajastin on laskenut alas, joten orx -arvon on oltava alhainen, ms on päällä ja td on pois päältä.
- Lähdöt: valot = 0 ja ajastin = 0.
- Pysyy tässä tilassa, kun ms = 1 ja orx = 0.
- Menee tilaan "valot päällä, liike havaittu", jos ms = 1 ja orx = 1.
- Menee tilaan "manuaalisesti päällä", jos ms = 0 ja ns = 1.
- Menee tilaan "käsin pois päältä", jos ms = 0 ja ns = 0.
“Käynnistetty manuaalisesti” (id = 011)
Valot ovat päällä, liiketunnistimilla ei ole merkitystä, joten ms on pois päältä ja ns on päällä.
- Lähdöt: valot = 1 ja ajastin = 0.
- Pysyy tässä tilassa, kun ms = 0 ja ns = 1.
- Menee tilaan "käsin pois päältä", jos ms = 0 ja ns = 0.
- Menee tilaan "valot pois päältä, liikettä ei havaittu, jos ms = 1.
“Käsin sammutettu” (id = 100)
Valot ovat pois päältä, liiketunnistimet ovat merkityksettömiä, joten ms on pois päältä ja ns on pois päältä.
- Lähdöt: valot = 0 ja ajastin = 0.
- Pysyy tässä tilassa, kun ms = 0 ja ns = 0.
- Menee tilaan "manuaalisesti päällä", jos ms = 0 ja ns = 1.
- Menee tilaan "valot pois päältä, liikettä ei havaittu, jos ms = 1.
Alaslaskuri toteaa:
"Seg 10" (id = 1010)
Seitsemän segmentin näytössä näkyy 10.
- Lähdöt: bin = “1010” ja td = 0.
- Menee tilaan "seg 9", jos ajastin = 1.
- Menee tilaan "tyhjä 2", jos ajastin = 0.
"Seg 9" (id = 1001)
Seitsemän segmentin näytössä näkyy 9.
- Lähdöt: bin = “1001” ja td = 0.
- Menee tilaan "seg 8", jos ajastin = 1.
- Menee tilaan "tyhjä 2", jos ajastin = 0.
(Tilat "Seg 8" alas "Seg 2" jätetään pois, koska ne noudattavat samaa mallia kuin "Seg 10" ja "Seg 9", eikä niitä tarvitse selittää)
"Seg 1" (id = 0001)
Seitsemän segmentin näytössä näkyy 1.
- Lähdöt: bin = “0001” ja td = 0.
- Menee tilaan "tyhjä 2" kellon seuraavalla nousevalla reunalla (syöttöä ei tarvita).
"Tyhjä 2" (id = 1111)
Seitsemän segmentin näytössä näkyy 0. Toisen tyhjän tilan tarkoitus on, että turvallisuuden vuoksi td = 1 on erillinen tila.
- Lähdöt: bin = “1111” ja td = 1.
- Menee tilaan "tyhjä 1" kellon seuraavalla nousevalla reunalla (syöttöä ei tarvita).
"Tyhjä 1" (id = 0000)
Seitsemän segmentin näytössä näkyy 0. Tämä on tila, jossa järjestelmä pysyy, kun päätilakone on tilassa”palaa, liikettä ei havaittu”.
- Lähdöt: bin = “0000” ja td = 0.
- Menee tilaan "seg 10", jos ajastin = 1.
Vaihe 3: Ilmoita koneen totuustaulukot, viritysyhtälöt ja lähtöyhtälöt
Seuraava askel on luoda totuustaulukot kahdelle tilakoneelle ja herätysyhtälöt ja lähtöyhtälöt kullekin fsm: lle. Jokaiselle fsm -heräteyhtälölle on oltava yhtälöt jokaiselle seuraavalle koodatulle bitille nykyisen tilan ja sen tulosignaalien suhteen. Jokaiselle fsm -lähtöyhtälölle on oltava yhtälöt kullekin lähtösignaalille nykyisessä tilassa. Kaikki neljä yhtälöryhmää voidaan piirtää esitetyistä totuustaulukoista. (qn on seuraava tilakoodattu bitti jokaiselle tilakoneelle ja q on nykyinen tila)
(000) vastaa q (2) 'q (1)' q (0) 'ja (0000) vastaa q (3)' q (2) 'q (1)' q (0) '
(esim. (0101) on q (3) 'q (2) q (1)' q (0) ja (110) on q (2) q (1) q (0) ')
Viritysyhtälöt tärkeimmälle fsm: lle:
- 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)]
Lähtöyhtälöt tärkeimmälle fsm: lle:
- valot = (000) + (001) + (100)
- ajastin = (001)
Viritysyhtälöt alaslaskurille 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)]
Lähtöyhtälöt alaslaskurille fsm:
- td = (1111)
- astia (3) = (1010) + (1001) + (1000) + (1111) + (0000)
- astia (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)
Vaihe 4: Kääre, alimoduulit ja rajoitukset
Kuten jo vaiheessa 1 selitettiin, näitä moduuleja tarvitaan tähän projektiin, ja ne kaikki on sidottu yhteen kääremoduulin kanssa nimeltä "final_proj.vhd". Rajoitustiedostoa nimeltä "Basys3_Master.xdc" käytetään linkittämään kaikki kääreiden tulot ja lähdöt Basys 3 -kortin kytkimiin, seitsemään segmenttiin ja I/O -portteihin. Pääkytkimen tulisi olla kytkentälevyllä, joka on lähimpänä sitä johtoa, jossa on virtajohto, normaali/manuaalinen kytkin on toiseksi lähin, ja kolme kytkintä, jotka edustavat kolmea liiketunnistinta, ovat kolme kytkintä normaalin/manuaalisen kytkimen vieressä. Kaikki koodit (boolean -yhtälöt, moduulijulkaisut jne.) On jo kirjoitettu tiedostoihin, joten sinun ei tarvitse kirjoittaa mitään muuta tämän toimimiseksi.
Vaihe 5: I/O -portit LEDille
Tämän projektin viimeinen vaihe on käyttää lediä osoittamaan, syttyvätkö (valot) todella vai eivät. Johdotus näkyy kahdessa kuvassa. Varmista, että ledin kanssa on sarjavastus (vähintään 330 ohmia), jotta ledi ei pala, ja varmista, että ledin pitkä nasta on kytketty samaan naarasliittimeen bassokortissa, kuten punainen johto on esitetty (ylhäällä) oikealla) ja lyhyempi nasta on kytketty maahan, sama naarasliitin kuin musta johto (ylhäällä, toinen vasemmalta).
Suositeltava:
DIY Raspberry Pi Downloadbox: 4 vaihetta
DIY Raspberry Pi Downloadbox: Löydätkö usein itsesi lataamasta suuria tiedostoja, kuten elokuvia, torrentteja, kursseja, TV -sarjoja jne., Niin tulet oikeaan paikkaan. Tässä Instructable -ohjelmassa muuttaisimme Raspberry Pi zero -laitteemme latauskoneeksi. Joka voi ladata minkä tahansa
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): 8 vaihetta
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): ultraäänikaiuttimet L298N DC-naarasadapterin virtalähde urospuolisella dc-nastalla ja analogiset portit koodin muuntamiseksi (C ++)
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: 3 vaihetta
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: Seuraava opas auttaa sinua saamaan live-HD-videovirtoja lähes mistä tahansa DJI-dronesta. FlytOS -mobiilisovelluksen ja FlytNow -verkkosovelluksen avulla voit aloittaa videon suoratoiston droonilta
Pultti - DIY -langaton latauskello (6 vaihetta): 6 vaihetta (kuvilla)
Pultti - DIY -langaton latausyökello (6 vaihetta): Induktiiviset lataukset (tunnetaan myös nimellä langaton lataus tai langaton lataus) on langattoman voimansiirron tyyppi. Se käyttää sähkömagneettista induktiota sähkön tuottamiseen kannettaville laitteille. Yleisin sovellus on langaton Qi -latauslaite
4 vaihetta akun sisäisen vastuksen mittaamiseksi: 4 vaihetta
4 vaihetta akun sisäisen vastuksen mittaamiseksi: Tässä on 4 yksinkertaista vaihetta, joiden avulla voit mitata taikinan sisäisen vastuksen