Sisukord:
- Samm: musta kasti skeem
- 2. samm: olekumasinad
- 3. samm: oleku masina tõetabelid, erutusvõrrandid ja väljundvõrrandid
- 4. samm: ümbris, alammoodulid ja piirangud
- Samm: LED -ide I/O -pordid
Video: L I G H T S: 5 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:49
Selle lõppprojekti eesmärk oli luua midagi, mis keskenduks jätkusuutlikkusele ja rakendaks digitaalseid disainikontseptsioone. Selleks otsustasin ma kujundada vhdl abil skaleeritava energiasäästu süsteemi, mis on valmistatud Basys 3 juhatuse jaoks (Artix-7 35T seeria)). Skaleeritav, kuna ruumi saab panna suvalise arvu andureid ja hoone või maja ümber saab paigutada suvalise arvu neid süsteeme. See süsteem aitaks teoreetiliselt säästa ärihoonetes tuhandeid dollareid ja vähendada suurt osa energiatarbimisest väiksemates elamukogukondades, rakendades ühendatud süsteemi aktiivselt ja passiivselt juhitavatest tuledest, liikumisanduritest, seitsme segmendi ekraanidel kuvatavatest taimeritest ja juhtlülitid. See näide käsitleb ühte süsteemi kolme liikumisanduriga, pealülitit, käsitsi/tavalist lülitit, nelja seitsme segmendi kuvarit ja ühte valgust, mida süsteem juhib.
Näiteks paigutatakse valitud ruumi ümber mitu liikumisandurit (sellel näidiskujundusel on kolm) ja igaüks saadaks signaali (1), kui tuvastab liikumise, ja (0), kui ei tuvasta. Kui vähemalt üks liikumisanduritest tuvastab liikumise, lülituvad tuled sisse, kui need pole juba sisse lülitatud, ja jäävad põlema, kui juba põlevad. Kõik liikumisandurid ei tuvasta igal ajal midagi, taimer hakkab teatud aja jooksul loendama (koodiga reguleeritav) ja tuled jäävad põlema, kuni taimer loendab. Kui taimer on loendamise lõpetanud, taimer peatub ja tuled kustuvad. Kui vähemalt üks liikumisandur tuvastab taimeri loendamise ajal liikumise, peatub taimer ja lähtestatakse. Ja kui vähemalt üks liikumisandur tuvastab liikumise ajal, mil tuled on välja lülitatud, lülituvad tuled kohe sisse.
Sellel süsteemil on kaks režiimi, üks taimeriga, nagu eespool öeldud, ja teine, kus on lüliti, mis juhib tulesid käsitsi (andureid ignoreerides). Seal on pealüliti, mis võimaldab kasutajal valida, millist režiimi ta soovib kasutada, lähtudes sellest, kumb neist tunneb, et säästab üldiselt rohkem energiat. Näide Sellisele ruumile nagu esik võib passiivne taimerirežiim kasu saada- kasutajad pole kindlad, millal inimesed sealt läbi sõidavad, kuid tulede sisse- ja väljalülitamine iga kord, kui nad sisenevad ja lahkuvad, tekitaks ebamugavust, samas kui selline ruum ühe magamistoaga magamistuba oleks parem käsitsi juhitav. Ja pealüliti oleks abiks sellistel juhtudel nagu näiteks magamistoas elav inimene peaks lahkuma pikemaks ajaks, siis saab pealüliti välja lülitada ja taimerirežiim töötaks energiat tõhusamalt säästma.
Nii et selles süsteemis on kaks olekumasinat, üks on peamine olekumasin ja teine loenduri jaoks. Põhiseisundi masinal on viis olekut, mis on määratletud sellisena: 1. "tuled põlevad, liikumine tuvastatud" (id = 000), 2. "tuled põlevad, liikumist ei tuvastatud" (id = 001), 3. "tuled on väljas, liikumist pole tuvastatud "(id = 010), 4." käsitsi sisse lülitatud "(id = 011) ja 5." käsitsi välja lülitatud "(id = 100). Sellel põhiseisundi masinal on neli sisendit: pealüliti (ms), käsitsi/normaalne lüliti (ns), signaal, mis on kõrge, kui vähemalt üks lüliti tuvastab liikumise ja on muidu madal (orx), ja signaal, mis on kõrge, kui taimer on tehtud, ja muidu madal (td). Põhiseadmel on kaks väljundit: tuled (tuled) ja signaal, mis näitab, millal taimer (taimer) või (t) sisse lülitada (mõlemat kasutatakse vaheldumisi).
Teisel olekumasinal, loenduril, on 12 olekut: kümnel neist on ID-d, mis on seotud seitsme segmendi kuvatava numbriga- „seg 10” (id = 1010), „seg 9” (id = 1001), […], “Seg 2” (id = 0010), “seg 1” (id = 0001) ja ülejäänud kaks olekut kuvavad mõlemad nulli, mis näitab, et taimer on välja lülitatud, seega on esimene tühi tühi 1 (id = 1111)) ja teine tühi "tühi 2" (id = 0000). Taimeril on üks sisend: taimer (t) ja kolm väljundit: number, mis kuvatakse binaarselt nelja bitiga (bin) ja signaal, mis näitab, et taimer on tehtud (td).
Samm: musta kasti skeem
See on ülevaade kogu süsteemi toimimisest ja seda kirjeldatakse musta kasti skeemiga.
- Kella kasutatakse põhiseisundi ja seitsme segmendi dekoodri kellaks; allapoole loenduri jaoks on vaja aeglasemat kella, seega on olemas kellajaotusmoodul, mis võtab kella sisendi ja väljastab aeglasema loenduri jaoks aeglasema kella.
- Vahemuutuja (orx) ümbrises on seotud liikumisanduritega ja on kõrge, kui vähemalt üks anduritest midagi tuvastab, ja muidu madal; loogiline võrrand selleks on lihtsalt orx = s (2) või s (1) või s (0).
-
Peamine fsm juhib süsteemi üldist olekut, olenevalt sisenditest (orx, ms, ns, td), ja väljastab praegust olekut (sm), mis on lihtsustatud kahe signaali abil, mille jaoks seda kasutatakse (taimer ja tuled).
- (taimer) on mähisignaal, mis saadetakse sisendina alumisele loendurile fsm ja mida juhib põhilise fsm -i praegune olek. See näitab, millal taimer sisse lülitada.
- (tuled) on ümbrise signaal, mida kasutatakse LED -i juhtimiseks ja mida juhib põhilise fsm -i praegune olek.
-
Alumine loendur fsm juhib seda, mida seitse segmenti kuvab sõltuvalt sisendist (taimer), ja väljastab praeguse oleku (sd), mis on lihtsustatud kahe signaaliga, mida kasutatakse (td ja bin).
- (td) on mähis -signaal, mis saadetakse sisendina põhilisele fsm -le ja mida juhib alumise loenduri fsm -i praegune olek. See toimib tagasisidesignaalina, mis näitab, kui taimer on tehtud.
- (bin) on neljabitine mähis -signaal, mis on ühendatud nelja bitti nulliga (“0000” ja bin) ja kombineeritud kaheksa bitti saadetakse (q), kaheksa bitise mähis -signaali juurde, mis omakorda saadetakse seitsmele bitile segmendi dekooder all (ALU_VAL).
-
Seitsme segmendi moodul on sama, mis Polylearnil; selle peamised sisendid võtavad 8 -bitise numbri (bin) kuni (ALU_VAL), et kuvada neljal erineval seitsme segmendi kuvaril, kasutades väljundeid (SEGMENTS) kuni mähisignaali (seg) ja (DISP_EN) ümbrise (disp_en) jaoks.
- Kuna kaks või enam seitsme segmendi kuvarit ei saa korraga kuvada erinevaid numbreid, on nelja tsükli läbimiseks vaja kella, mis kuvab iga numbri eraldi sisselülitamiseks korraga sobiva numbri ja piisavalt kiiresti jalgrattasõit ssegs tundub olevat korraga sees.
- (märk ja kehtiv) on kogu selle programmi vältel konstantsed, nii et (märk) on püsivalt madalaks määratud ja (kehtiv) on püsivalt kõrge.
- (ALU_VAL) võtab sisendiks mähissignaali (q), mis tähistab numbrit, mis kuvatakse binaarses seitsme segmendi ekraanil.
- Väljund (SEGMENTS) saadetakse kaheksa bitise mähisignaalile (seg) ja (DISP_EN) neljabitisele mähisignaalile (disp_en).
-
Samuti on olemas D flip flop moodul, mida pole diagrammil selgesõnaliselt näidatud, kuid seda on vaja kahe olekumasina jaoks alammoodulitena ja see aitab olekuid sünkroonselt muuta.
- (3) neist on vaja põhilise fsm -i jaoks, kuna 2^(3) = 8> 5 olekut kodeerimiseks
- (4) neist on vaja alumise loenduri fsm jaoks, kuna 2^4 = 16> 12 olekut kodeerimiseks
2. samm: olekumasinad
Kahe olekumasina nõuetekohaseks projekteerimiseks tuleb üksikud olekud selgelt määratleda koos nende väljundite ja olekuga, millele see üle läheb, erinevate võimalike sisendite põhjal.
Peamine fsm väidab:
„Tuled põlevad, liikumine tuvastatud” (id = 000)
Tuled on sisse lülitatud, vähemalt üks liikumisanduritest tuvastab liikumise, seega peab orx olema kõrgel ja ms on sisse lülitatud.
- Väljundid: tuled = 1 ja taimer = 0
- Jääb selliseks olekuks, kui ms = 1 ja orx = 1.
- Läheb olekusse „tuled põlevad, liikumist ei tuvastatud”, kui ms = 1 ja orx = 0.
- Läheb olekusse „käsitsi sisse lülitatud”, kui ms = 0 ja ns = 1.
- Läheb olekusse „käsitsi välja lülitatud”, kui ms = 0 ja ns = 0.
„Tuled põlevad, liikumist ei tuvastatud” (id = 001)
Tuled on sisse lülitatud, ühtegi liikumisandurit ei tuvastanud liikumist, seega peab orx olema madal ja ms on sisse lülitatud. Ka selle oleku alguses käsib kõrgeks seatud taimer loenduril fsm hakata loendama, jätkab loendamist ja lõpetab loendamise, kui loendur fsm ütleb sellele fsm -le, et loendamine on lõpetatud.
- Väljundid: tuled = 1 ja taimer = 1.
- Jääb selliseks olekuks, kui ms = 1 ja orx = 0 ja td (taimer on tehtud) = 0.
- Läheb olekusse „tuled põlevad, liikumine tuvastatud”, kui ms = 1 ja orx = 1.
- Läheb olekusse „tuled välja, liikumist ei tuvastatud”, kui ms = 1 ja orx = 0 ja td = 1.
- Läheb olekusse „käsitsi sisse lülitatud”, kui ms = 0 ja ns = 1.
- Läheb olekusse „käsitsi välja lülitatud”, kui ms = 0 ja ns = 0.
“Tuled kustuvad, liikumist ei tuvastatud” (id = 010)
Tuled on välja lülitatud, ühtegi liikumisandurit ei tuvastanud liikumist ja taimer lõpetas loendamise, seega peab orx olema madal, ms on sisse lülitatud ja td on välja lülitatud.
- Väljundid: tuled = 0 ja taimer = 0.
- Jääb selliseks olekuks, kui ms = 1 ja orx = 0.
- Läheb olekusse „tuled põlevad, liikumine tuvastatud”, kui ms = 1 ja orx = 1.
- Läheb olekusse „käsitsi sisse lülitatud”, kui ms = 0 ja ns = 1.
- Läheb olekusse „käsitsi välja lülitatud”, kui ms = 0 ja ns = 0.
„Käsitsi sisse lülitatud” (id = 011)
Tuled on sisse lülitatud, liikumisandurid ei oma tähtsust, seega on ms välja lülitatud ja ns sisse lülitatud.
- Väljundid: tuled = 1 ja taimer = 0.
- Jääb selliseks olekuks, kui ms = 0 ja ns = 1.
- Läheb olekusse „käsitsi välja lülitatud”, kui ms = 0 ja ns = 0.
- Lülitab oleku „tuled välja, liikumist ei tuvastata, kui ms = 1.
“Käsitsi välja lülitatud” (id = 100)
Tuled on välja lülitatud, liikumisandurid ei oma tähtsust, seega on ms välja lülitatud ja ns välja lülitatud.
- Väljundid: tuled = 0 ja taimer = 0.
- Jääb selliseks olekuks, kui ms = 0 ja ns = 0.
- Läheb olekusse „käsitsi sisse lülitatud”, kui ms = 0 ja ns = 1.
- Lülitab oleku „tuled välja, liikumist ei tuvastata, kui ms = 1.
Alla loendur ütleb:
„Seg 10” (id = 1010)
Seitsme segmendi ekraanil on 10.
- Väljundid: bin = “1010” ja td = 0.
- Läheb olekusse „seg 9”, kui taimer = 1.
- Läheb olekule “tühi 2”, kui taimer = 0.
„Seg 9” (id = 1001)
Seitsme segmendi ekraanil on 9.
- Väljundid: bin = “1001” ja td = 0.
- Läheb olekusse „seg 8”, kui taimer = 1.
- Läheb olekule “tühi 2”, kui taimer = 0.
(Olekud „Seg 8” kuni „Seg 2” jäetakse välja, kuna need järgivad sama mustrit nagu „Seg 10” ja „Seg 9” ning pole selgitamiseks vajalikud)
„Seg 1” (id = 0001)
Seitsme segmendi ekraanil on 1.
- Väljundid: bin = “0001” ja td = 0.
- Läheb kella järgmise tõusva serva olekule „tühi 2” (sisendit pole vaja).
"Tühi 2" (id = 1111)
Seitsme segmendi ekraanil on 0. Teise tühja oleku eesmärk on ohutuse tagamiseks eraldi olek, millal td = 1.
- Väljundid: bin = “1111” ja td = 1.
- Läheb kella järgmise tõusva serva olekule „tühi 1” (sisendit pole vaja).
„Tühi 1” (id = 0000)
Seitsme segmendi ekraanil kuvatakse 0. See on olek, milles süsteem püsib, kui põhiseadme masin on olekus „tuled kustuvad, liikumist ei tuvastatud”.
- Väljundid: bin = “0000” ja td = 0.
- Läheb olekusse „seg 10”, kui taimer = 1.
3. samm: oleku masina tõetabelid, erutusvõrrandid ja väljundvõrrandid
Järgmine samm on luua tõese tabelid kahe olekumasina jaoks ning erutusvõrrandid ja väljundvõrrandid iga fsm jaoks. Iga fsm -ergastusvõrrandi jaoks peavad iga järgmise olekuga kodeeritud biti jaoks olema võrrandid hetkeoleku ja selle sisendsignaalide osas. Iga fsm -väljundvõrrandi jaoks peavad iga väljundsignaali jaoks olema võrrandid hetkeoleku mõttes. Kõik neli võrrandikomplekti saab joonistada tõestatabelitest. (qn on iga olekumasina järgmine olekukodeeritud bit ja q on praegune olek)
(000) vastab q (2) 'q (1)' q (0) 'ja (0000) vastab q (3)' q (2) 'q (1)' q (0) '
(nt (0101) on q (3) 'q (2) q (1)' q (0) ja (110) on q (2) q (1) q (0) ')
Põhilise fsm -i erutusvõrrandid:
- 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)]
Peamise fsm -i väljundvõrrandid:
- tuled = (000) + (001) + (100)
- taimer = (001)
Erutusvõrrandid alumise loenduri fsm jaoks:
- 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)]
Väljundvõrrandid alumise loenduri fsm jaoks:
- td = (1111)
- prügikast (3) = (1010) + (1001) + (1000) + (1111) + (0000)
- prügikast (2) = (0111) + (0110) + (0101) + (0100) + (1111) + (0000)
- prügikast (1) = (1010) + (0111) + (0110) + (0011) + (0010) + (1111) + (0000)
- prügikast (0) = (1001) + (0111) + (0101) + (0011) + (0001) + (1111) + (0000)
4. samm: ümbris, alammoodulid ja piirangud
Nagu juba 1. etapis selgitatud, on neid mooduleid selle projekti jaoks vaja ja need on kõik ühendatud ümbrismooduliga pealkirjaga "final_proj.vhd". Piirangute faili nimega "Basys3_Master.xdc" kasutatakse kõigi ümbriste sisendite ja väljundite linkimiseks Basys 3 tahvli lülitite, seitsme segmendi ja I/O portidega. Pealüliti peaks olema lülitil plaadil, mis on kõige lähemal juhtmete poolele, tavaline/käsitsi lüliti on teine lähim ja kolm lülitit, mis tähistavad kolme liikumisandurit, on kolm lülitit vahetult tavalise/käsitsi lüliti kõrval. Kogu kood (loogilised võrrandid, moodulideklaratsioonid jne) on failides juba välja kirjutatud, nii et selle töö tegemiseks ei pea te midagi muud kirjutama.
Samm: LED -ide I/O -pordid
Selle projekti viimane samm on kasutada LED -d, et näidata, kas (tuled) tegelikult sisse ja välja lülituvad. Juhtmestik on kahel pildil. Veenduge, et LED -iga oleks jadamisi takisti (vähemalt 330 oomi), et mitte LED -i läbi põleda, ja veenduge, et LED -i pikk tihvt on ühendatud bassiplaadi sama naissoost päisega, nagu on näidatud punane juhe (üleval parempoolseim) ja lühem tihvt on ühendatud maandusega, sama naissoost päisega nagu näidatud must traat (üleval, teine vasakult).
Soovitan:
Atari punkkonsool beebiga 8 sammu järjestus: 7 sammu (piltidega)
Atari punkkonsool koos beebi 8-astmelise sekveneerijaga: see vaheehitus on kõik-ühes Atari punk-konsool ja beebi 8-astmeline järjestus, mida saate freesida Bantam Tools töölaua PCB-freespingis. See koosneb kahest trükkplaadist: üks on kasutajaliidese (UI) plaat ja teine on utiliit
Akustiline levitatsioon Arduino Unoga samm-sammult (8 sammu): 8 sammu
Akustiline levitatsioon Arduino Uno abil samm-sammult (8 sammu): ultraheliheli muundurid L298N DC-naissoost adapteri toiteallikas isase alalisvoolupistikuga Arduino UNOBreadboard ja analoogpordid koodi teisendamiseks (C ++)
4G/5G HD -video otseülekanne DJI droonilt madala latentsusega [3 sammu]: 3 sammu
4G/5G HD-video otseülekanne DJI droonilt madala latentsusega [3 sammu]: Järgnev juhend aitab teil saada HD-kvaliteediga otseülekandeid peaaegu igalt DJI droonilt. FlytOSi mobiilirakenduse ja veebirakenduse FlytNow abil saate alustada drooni video voogesitust
Polt - DIY juhtmeta laadimise öökell (6 sammu): 6 sammu (piltidega)
Bolt - DIY juhtmeta laadimise öökell (6 sammu): Induktiivsed laadimised (tuntud ka kui juhtmeta laadimine või juhtmeta laadimine) on traadita jõuülekande tüüp. See kasutab kaasaskantavatele seadmetele elektrit pakkumiseks elektromagnetilist induktsiooni. Kõige tavalisem rakendus on Qi traadita laadimisst
4 sammu aku sisemise takistuse mõõtmiseks: 4 sammu
4 sammu aku sisemise takistuse mõõtmiseks: Siin on 4 lihtsat sammu, mis aitavad mõõta taigna sisemist takistust