Cuprins:

Modelul unui comutator universal oprit: 10 pași
Modelul unui comutator universal oprit: 10 pași

Video: Modelul unui comutator universal oprit: 10 pași

Video: Modelul unui comutator universal oprit: 10 pași
Video: Costeo biju ‼️luat la palme de interlopi‼️#bucuresti #emipian #florinsalam #dans #interlopi 2024, Iulie
Anonim
Modelul unui comutator universal oprit
Modelul unui comutator universal oprit

Te-ai săturat să verifici dacă toate luminile din casa ta sunt stinse înainte să te culci? Îți dorești să poți opri fiecare lumină dintr-o dată fără nicio tulburare? Pentru a economisi energie și timp, am decis să creăm un sistem care să poată închide teoretic o casă întreagă dintr-o dată.

Am modelat o dovadă a acestui concept folosind câteva LED-uri și o placă de circuite basys 3 și am creat un design care să dezactiveze toate LED-urile prin simpla apăsare a unui buton. Acest model ar putea fi aplicat și unui sistem real de iluminare a locuințelor, deși ar necesita cabluri mai complicate și modificări ale fișierelor VHDL date.

Pasul 1: Importați fișierele VHDL date

Pentru ca modelul nostru să funcționeze corect, va trebui să descărcați software-ul care oferă instrucțiunilor plăcii Basys 3.

Mai întâi va trebui să descărcați un instrument de sinteză pentru implementarea fișierelor vhdl pe hardware. Dacă doriți să fiți siguri că tot codul va reproduce pe deplin designul nostru fără a fi nevoie de modificări, vă recomandăm să utilizați Vivado 2016.2. După ce ați instalat Vivado, puteți crea un proiect și puteți descărca fișierele noastre sursă. Adăugați-le ca surse la proiectul dvs., nu uitați să adăugați și fișierul de constrângeri!

În continuare vom explica ce face fiecare dintre fișierele sursă. Săriți pașii de la 2 la 6 dacă doriți doar să ajungeți la construcția fizică a dispozitivului.

Pasul 2: defalcarea modulului superior VHDL

Defalcarea modulului superior VHDL
Defalcarea modulului superior VHDL
Defalcarea modulului superior VHDL
Defalcarea modulului superior VHDL

Modulul superior al proiectului este ceea ce conectează toate modulele componente individuale la hardware-ul folosit. După cum puteți vedea, avem modulele killSwitch și buzzerControl definite ca componente în partea de sus.

Secțiunea inferioară specifică modul în care aceste module sunt conectate împreună. Am conectat patru LED-uri la placă și le-am asociat cu modulele killSwitch dev0 prin dev3. Avem patru module killSwitch definite, deoarece avem nevoie de unul pentru a gestiona starea fiecărui LED conectat. Fiecare dintre aceste module utilizează semnalul ceasului și butonului pe care l-am creat în definiția modulului superior, precum și semnalele respective ale comutatorului de intrare și ale dispozitivului de ieșire.

Modulul de control al buzzerului din partea de jos activează buzzer-ul atunci când este apăsat butonul universal off. După cum puteți vedea, modulul de control al buzzer-ului este transmis ceasul și butonul ca intrări. De asemenea, este trecut pinul de ieșire al buzzerului fizic pentru a-l controla în consecință.

Pasul 3: defalcare a modulului de comutare a uciderii VHDL

Defalcarea modulului VHDL Kill Switch
Defalcarea modulului VHDL Kill Switch
Defalcarea modulului VHDL Kill Switch
Defalcarea modulului VHDL Kill Switch

Comutatorul Kill este butonul universal de oprire, iar modulul este preocupat în primul rând de conectarea acestuia la alte elemente ale circuitului, astfel încât, atunci când este apăsat, toate luminile să se stingă.

În timp ce modulul superior gestionează conectarea hardware-ului fizic la software, modulul killSwitch gestionează logica principală a fiecărui dispozitiv. Modulul intră intrări pentru semnalul ceasului, butonul universal de oprire și comutatorul de comutare al dispozitivului. În schimb, controlează starea pinului dispozitivului la care este conectat.

În secțiunea de arhitectură a codului vedem că are o dependență de modulul dFlipFlop pentru a stoca memoria. De asemenea, puteți vedea că am declarat patru semnale care vor fi utilizate pentru a conecta flip flop-ul, precum și pentru a implementa instrucțiunile noastre logice. În secțiunea comportamentală a codului am creat o instanță a modulului dFlipFlop și am atribuit semnalele noastre I / O porturilor.

De aici, partea principală a logicii noastre constă în valorile semnalului pentru invertState și isDevOn. Baza noastră logică pentru dispozitiv este după cum urmează: „De fiecare dată când comutatorul este aruncat, lumina va inversa starea pornită / oprită. De fiecare dată când butonul este apăsat și LED-ul este aprins în prezent, LED-ul își va inversa starea la oprit. Din aceste două afirmații putem extrapola faptul că starea LED-ului ar trebui să fie XOR-ul comutatorului și elementul nostru de memorie. Acest lucru poate fi văzut implementat în semnalul isDevOn. Condiția LED pentru elementul de memorie este gestionată de semnalul nostru invertState. Dacă LED-ul este aprins și butonul este apăsat, elementul nostru de memorie se va actualiza și va inversa starea acestuia. Aceasta inversează apoi și starea LED-ului.

Pasul 4: defalcarea modulului VHDL Flip Flop

Defalcarea modulului VHDL Flip Flop
Defalcarea modulului VHDL Flip Flop

O problemă cu designul nostru a fost faptul că, după utilizarea comutatorului oprit, luminile care au fost anterior aprinse ar putea fi necesare să fie răsturnate de două ori pentru a reveni la poziția pornită. Acesta ar fi un inconvenient pentru oameni de-a lungul timpului. Am reușit să ocolim acest inconvenient prin includerea unui „Flip Flop”, un element de circuit capabil să stocheze informații, în proiectarea noastră. Acum, sistemul își amintește dacă un comutator de lumină a fost activat anterior, astfel încât, dacă este răsucit, se va aprinde indiferent de poziția sa inițială.

Codul VHDL folosește instrucțiunile if și else pentru a crea Flip Flop ca o componentă în proiectarea circuitului nostru. Se asigură că atunci când semnalul ceasului trece de la o stare joasă la una înaltă, când becul este aprins și când comutatorul oprit este apăsat, ieșirea cu flip-flops își suprascrie intrarea. Când intrarea este suprascrisă, flip-flop-ul este inversat.

Pasul 5: defalcarea modulului VHDL Piezo Buzzer

Defalcarea modulului VHDL Piezo Buzzer
Defalcarea modulului VHDL Piezo Buzzer
Defalcarea modulului VHDL Piezo Buzzer
Defalcarea modulului VHDL Piezo Buzzer

Acest fișier este un pic de prisos în ceea ce privește designul hardware, dar este esențial pentru a face ca modulul superior și fișierele de constrângeri să ruleze fără probleme. Dacă alegeți să nu utilizați buzzer-ul Piezo, descărcați acest fișier, dar nu atașați buzzer-ul la placa Basys 3.

Buzzer-ul piezo, la apăsarea butonului de dezactivare, va reda un ton cu două note care va oferi utilizatorului feedback auditiv că butonul a fost apăsat. Am implementat acest comportament în VHDL printr-o serie de instrucțiuni if într-o structură de proces. Am început prin a crea o valoare întreagă pentru a urmări câte modificări de ceas au avut loc. Odată ce procesul începe, programul petrece prima jumătate de secundă (0 până la 50 de milioane de căpușe de ceas) scoțând o notă A la 440 hertz. Acest lucru este realizat prin inversarea semnalului piezo buzzer la fiecare multiplu egal de 227272 căpușe de ceas cu funcție modulo. Acest număr este rezultatul împărțirii semnalului de ceas al plăcii (100 MHz) la frecvența dorită (400 Hz). În a doua jumătate de secundă (50 până la 100 de milioane de căpușe de ceas), placa emite o notă F la 349,2 hertz prin aceeași metodă ca înainte. După o secundă, programul nu mai crește variabila de ceas și nu mai scoate nimic din buzzer-ul piezo. Apăsând din nou butonul universal de oprire, resetează acest număr la 0, repornind ciclul de zgomot.

Pasul 6: Defalcarea fișierului de constrângeri VHDL

Fișierul de constrângeri îi spune lui Vivado ce dispozitive folosim pe placa Basys 3. De asemenea, oferă Vivado numele pe care le-am dat dispozitivelor din codul nostru. Vivado are nevoie de aceste informații, astfel încât să știe cum să conecteze elementele noastre logice la hardware-ul fizic. Fișierul de constrângeri include o cantitate mare de cod comentat (neutilizat). Aceste linii de cod fac referire la dispozitivele de pe placă pe care nu le folosim.

Dispozitivele pe care le folosim includ patru comutatoare de intrare etichetate V17, V16, W16 și W1 pe placă. De asemenea, folosim butonul universal de oprire, etichetat U18. Pinii de ieșire pentru cele patru LED-uri conectate sunt JB4, JB10, JC4 și JC10. Pentru buzzerul nostru piezzo folosim pinul de ieșire JA9.

Așa cum am menționat în defalcarea modulului de sus, dacă doriți să adăugați LED-uri suplimentare sau alte dispozitive pe placă, trebuie să măriți sfera semnalelor sw și dev, să adăugați mai multe module killSwitch și să le conectați împreună. Apoi, trebuie să legați acele nume de variabile la hardware-ul dispozitivului prin fișierul de constrângeri. Acest lucru se poate face prin decomentarea (reactivarea) liniilor de cod asociate cu pinii pe care doriți să îi utilizați, apoi adăugarea numelui variabilei asociate în modulul de sus. Sintaxa adecvată pentru aceasta poate fi copiată de pe dispozitivele pe care le folosim. Pentru a afla numele pinilor pe care doriți să îi utilizați pe tablă, consultați ghidul de referință Baasys 3 aici.

Pasul 7: Construirea bazelor 3

Construirea bazelor 3
Construirea bazelor 3
Construirea bazelor 3
Construirea bazelor 3

Va trebui să conectați LED-urile la porturile I / O corecte ale bazelor 3. Urmați imaginile furnizate pentru a determina care sunt porturile corecte, deoarece dacă conectați un LED la portul greșit nu se va aprinde. Dacă ați ales să atașați buzzer-ul piezo, va trebui, de asemenea, să îl conectați la porturile I / O corecte.

Când placa este gata, conectați-o la computer prin cablu USB.

Pasul 8: Implementarea fișierelor VHDL în Bazele 3

Implementarea fișierelor VHDL în Bazele 3
Implementarea fișierelor VHDL în Bazele 3
Implementarea fișierelor VHDL în Bazele 3
Implementarea fișierelor VHDL în Bazele 3

Acum că placa dvs. este gata și codul dvs. este terminat, puteți pune în cele din urmă modelul împreună.

Odată ce ați configurat proiectul în Vivado, trebuie să faceți clic pe butonul „Generați Bitstream” pentru a compila codul înainte ca acesta să fie încărcat pe tablă. Dacă primiți un mesaj de eroare în acest moment, trebuie să verificați dacă codul dvs. se potrivește exact cu al nostru. Când spun exact, mă refer până la punct și virgulă sau tipurile de paranteze care sunt utilizate. Odată ce fluxul dvs. de biți a fost scris cu succes, mergeți la managerul hardware din Vivado și faceți clic pe butonul „Deschideți ținta”, apoi faceți clic pe „Programare dispozitiv” imediat după aceea. Placa dvs. Basys 3 ar trebui să fie acum complet funcțională.

Pasul 9: Utilizarea plăcii Basys 3

Folosind placa Basys 3
Folosind placa Basys 3

Acum, când placa Basys 3 este funcțională și a fost programată pentru a reprezenta modelul nostru, trebuie să știți cum să îl utilizați.

Fiecare dintre cele patru comutatoare cele mai îndepărtate spre dreapta controlează unul dintre LED-uri, dacă le atingeți, LED-ul se va aprinde sau se va stinge. Dacă LED-ul nu se activează, verificați dacă sunteți conectat la portul I / O corect și că LED-ul dvs. este funcțional în primul rând.

Când doriți să dezactivați toate LED-urile simultan, trebuie să apăsați butonul central din setul de cinci butoane afișate mai sus.

Pasul 10: Arătați-vă

Modelul servește ca o mică noutate îngrijită pe care o puteți demonstra în fața prietenilor și a familiei. Teoretic, poate fi folosit și pentru a implementa întrerupătorul universal în sistemul electric de acasă, dacă înlocuiți LED-urile cu fire care duc la luminile dvs. Deși este posibil, ar trebui totuși să ne sfătuim. Există potențialul de a vă face rău grav pentru dvs. sau pentru casa dvs. dacă încercați să reconectați cablul fără ajutorul unui electrician.

Recomandat: