Πίνακας περιεχομένων:

Ενεργειακά αποδοτική κίνηση Φώτα δρόμου: 8 βήματα
Ενεργειακά αποδοτική κίνηση Φώτα δρόμου: 8 βήματα

Βίντεο: Ενεργειακά αποδοτική κίνηση Φώτα δρόμου: 8 βήματα

Βίντεο: Ενεργειακά αποδοτική κίνηση Φώτα δρόμου: 8 βήματα
Βίντεο: Ευφυείς εργάτες κατασκευών που βρίσκονται σε άλλο επίπεδο ►8 2024, Νοέμβριος
Anonim
Ενεργειακά αποδοτικά κινούμενα φώτα του δρόμου
Ενεργειακά αποδοτικά κινούμενα φώτα του δρόμου

Ο στόχος μας με αυτό το έργο ήταν να δημιουργήσουμε κάτι που θα εξοικονομήσει ενέργεια και οικονομικούς πόρους από τις κοινότητες. Τα φώτα του δρόμου που ενεργοποιούνται με κίνηση θα κάνουν και τα δύο αυτά πράγματα. Σε ολόκληρο το έθνος η ενέργεια σπαταλάται στα φώτα των δρόμων φωτίζοντας τους άδειους δρόμους. Το σύστημα φωτισμού του δρόμου εξασφαλίζει ότι τα φώτα είναι αναμμένα μόνο όταν χρειάζεται, εξοικονομώντας αμέτρητα δολάρια στις κοινότητες. Χρησιμοποιώντας αισθητήρες κίνησης, το σύστημα ανάβει τα φώτα μόνο όταν υπάρχουν αυτοκίνητα. Επίσης, για την ασφάλεια των πεζών, εφαρμόσαμε ένα κουμπί παράκαμψης που ανάβει όλα τα φώτα στο δρόμο. Τα παρακάτω βήματα θα σας καθοδηγήσουν στο πώς σχεδιάσαμε και φτιάξαμε το μικρότερο μοντέλο του έργου μας χρησιμοποιώντας το Vivado και έναν πίνακα Basys 3.

Βήμα 1: Σύστημα Black Box

Σύστημα Black Box
Σύστημα Black Box

Ξεκινήσαμε αυτό το έργο σχεδιάζοντας ένα απλό διάγραμμα μαύρου κουτιού. Ένα διάγραμμα μαύρου κουτιού δείχνει απλώς τις εισόδους και τις εξόδους που απαιτεί το σύστημά μας για να ολοκληρώσει όλες τις απαραίτητες διαδικασίες. Προσπαθήσαμε να διατηρήσουμε το σχεδιασμό μας όσο το δυνατόν πιο απλό και βασικό. Οι τρεις εισόδους του συστήματος μας περιλάμβαναν ένα δίαυλο αισθητήρων κίνησης (4 για το μοντέλο μας), ένα κουμπί παράκαμψης πεζών και μια είσοδο ρολογιού. Από την άλλη πλευρά, η ενιαία έξοδός μας είναι ένα λεωφορείο με φώτα LED που αντιπροσωπεύουν τα φώτα του δρόμου μας. Για αυτό το μοντέλο χρησιμοποιήσαμε ένα σενάριο 16 φώτων του δρόμου απλώς και μόνο επειδή αυτός είναι ο μέγιστος αριθμός ενσωματωμένων εξόδων LED στον πίνακα Basys 3. Τέλος, χρησιμοποιώντας αυτό το διάγραμμα μπορέσαμε να δημιουργήσουμε το έργο, την πηγή και τα αρχεία περιορισμού Vivado με τις κατάλληλες εισόδους και εξόδους.

Βήμα 2: Συστατικά

Συστατικά
Συστατικά
Συστατικά
Συστατικά

Σε αυτό το βήμα, βουτάμε βαθύτερα εξετάζοντας τα στοιχεία που αποτελούν το διάγραμμα του μαύρου κουτιού μας. Το πρώτο μας στοιχείο είναι ένα αρχείο προέλευσης VHDL που περιέχει σαγιονάρες D. Οι σαγιονάρες D λαμβάνουν απλώς οποιοδήποτε σήμα εισέρχεται σε αυτούς από τους αισθητήρες στην ανερχόμενη άκρη του ρολογιού και τα ασφαλίζουν αυτά τα δεδομένα μέχρι την επόμενη άκρη ανόδου. Αυτό εμποδίζει τους ευαίσθητους αισθητήρες κίνησης να μην αναβοσβήνουν τα LED εξόδου. Επίσης, βάζουμε ένα απλό flip-flop στο σήμα εισόδου του κουμπιού για να διατηρήσουμε τα LED για περίπου 5-7 δευτερόλεπτα μετά το πάτημα του κουμπιού. Το περάσαμε επίσης μέσω ενός διαχωριστή ρολογιού.

η οντότητα clk_div2 είναι Port (clk: στο std_logic; sclk: out std_logic); τέλος clk_div2;

αρχιτεκτονική my_clk_div του clk_div2 είναι

σταθερή max_count: ακέραιος: = (300000000); σήμα tmp_clk: std_logic: = '0'; Έναρξη my_div: διαδικασία (clk, tmp_clk) μεταβλητή div_cnt: ακέραιος: = 0; ξεκινήστε εάν (αυξανόμενη άκρη (clk)) στη συνέχεια εάν (div_cnt = MAX_COUNT) τότε tmp_clk <= όχι tmp_clk? div_cnt: = 0; else div_cnt: = div_cnt + 1; τέλος εαν; τέλος εαν; sclk <= tmp_clk; τερματισμός διαδικασίας my_div? τέλος my_clk_div?

Το τελευταίο μας στοιχείο σε αυτό το διάγραμμα είναι ένα αρχείο πηγής VHDL συμπεριφοράς που περιέχει προϋποθέσεις για τις εξόδους που βασίζονται στη διαμόρφωση των σημάτων εισόδου.

Βήμα 3: D Σαγιονάρες

D Σαγιονάρες
D Σαγιονάρες

Οι τέσσερις σαγιονάρες που είναι προσαρτημένες στα σήματα εισόδου είναι απαραίτητες για τη λειτουργικότητα του συστήματός μας. Όπως αναφέρθηκε προηγουμένως, με ευαίσθητους αισθητήρες κίνησης και κουμπί παράκαμψης, οι σαγιονάρες χρησιμοποιούν μάνδαλα για να εξάγουν μόνο το σήμα εισόδου μας στην ανερχόμενη άκρη του ρολογιού. Αυτή η διαδοχική λογική σημαίνει ότι τα φώτα του δρόμου μας μπορούν να παραμείνουν αναμμένα για ένα ορισμένο χρονικό διάστημα αφού ενεργοποιηθούν από μια γρήγορη κίνηση. Η κωδικοποίηση για ένα D-Flip Flop είναι αρκετά απλή:

beginprocess (CLK) ξεκινά αν η αυξανόμενη άκρη (CLK) τότε Q <= D? τέλος εαν; τελική διαδικασία?

Ολόκληρο το πράγμα μπορεί να συγκεντρωθεί σε μια ενιαία πρόταση. Μόλις είχαμε αυτό το κομμάτι, δημιουργήσαμε ένα δομικό αρχείο προέλευσης VHDL που περιέχει και τα τέσσερα απαραίτητα σαγιονάρες:

έναρξη DFF0: χάρτης θύρας DFF (CLK => CLK, D => D (0), Q => Q (0)); DFF1: Χάρτης θύρας DFF (CLK => CLK, D => D (1), Q => Q (1)); DFF2: Χάρτης θύρας DFF (CLK => CLK, D => D (2), Q => Q (2)); DFF3: Χάρτης θύρας DFF (CLK => CLK, D => D (3), Q => Q (3));

τέλος Συμπεριφορική?

Αυτό βοηθά στη διατήρηση του κύριου δομικού αρχείου όπου συγκεντρώνουμε όλα τα στοιχεία του συστήματος πολύ πιο καθαρά και οργανωμένα.

Βήμα 4: Υπό όρους

Για να διατηρήσουμε τον κώδικα συμπαγή και αποτελεσματικό, γράψαμε όλους τους όρους μας σε μια δήλωση πεζών -κεφαλαίων. Για το μικρότερο μοντέλο, είχαμε 16 πιθανές διαμορφώσεις εξόδου LED, καθώς κάθε αισθητήρας κίνησης είναι υπεύθυνος για μια ομάδα 4 LED.:

περίπτωση NMS είναι όταν "1111" => LED LED LED LED LED LED LED LED LED LED LED LED <= "1111111111111111"; τελική περίπτωση?

Βήμα 5: Περιορισμοί

Για να δηλώσετε σωστά τις εισόδους και τις εξόδους σας χρησιμοποιώντας το Vivado, πρέπει να εφαρμόσετε ένα αρχείο περιορισμού που αναφέρει όλες τις θύρες, τα κουμπιά, τις λυχνίες LED και τα ρολόγια που χρησιμοποιούνται.

set_property PACKAGE_PIN W5 [get_ports CLK] set_property IOSTANDARD LVCMOS33 [get_ports CLK]

set_property PACKAGE_PIN U16 [get_ports {LED [0]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [0]}] set_property PACKAGE_PIN E19 [get_ports {LED [1]}] set_property IOSTANDARD LVCMOS_33_pert_port U19 [get_ports {LED [2]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [2]}] set_property PACKAGE_PIN V19 [get_ports {LED [3]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [3]}] set_property PAC get_ports {LED [4]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [4]}] set_property PACKAGE_PIN U15 [get_ports {LED [5]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [5]}] set_property PACKAGE LED [6]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [6]}] set_property PACKAGE_PIN V14 [get_ports {LED [7]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [7]}] set_property PACKAGE_PIN V13 8]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [8]}] set_property PACKAGE_PIN V3 [get_ports {LED [9]}] set_property IO STANDARD LVCMOS33 [get_ports {LED [9]}] set_property PACKAGE_PIN W3 [get_ports {LED [10]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [10]}] set_property PACKAGE_PIN U3 [get_ports {LED [pert] 33 [get_ports {LED [11]}] set_property PACKAGE_PIN P3 [get_ports {LED [12]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [12]}] set_property PACKAGE_PIN N3 [get_ports {LED [13]}] set_property IOSTANDARD {LED [13]}] set_property PACKAGE_PIN P1 [get_ports {LED [14]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [14]}] set_property PACKAGE_PIN L1 [get_ports {LED [15]}] set_property IOSTANDARD LVCMOS [15]}]

set_property PACKAGE_PIN U18 [get_ports BTN] set_property IOSTANDARD LVCMOS33 [get_ports BTN]

set_property PACKAGE_PIN A14 [get_ports {MS [0]}] set_property IOSTANDARD LVCMOS33 [get_ports {MS [0]}] set_property PACKAGE_PIN A16 [get_ports {MS [1]}] set_property IOSTANDARD LVCMOS_33_pert_port_MAC33 B15 [get_ports {MS [2]}] set_property IOSTANDARD LVCMOS33 [get_ports {MS [2]}] set_property PACKAGE_PIN B16 [get_ports {MS [3]}] set_property IOSTANDARD LVCMOS33 [get_ports {MS [3]}]

Βήμα 6: Κύριο αρχείο προέλευσης

Σε αυτό το κύριο αρχείο συγκεντρώνουμε όλα τα αρχεία προέλευσης συστατικών που αναφέρθηκαν προηγουμένως. Αυτό το αρχείο λειτουργεί ως δομικός κώδικας που συγκεντρώνει τα διαφορετικά στοιχεία.

οντότητα Master_Final_Project is Port (BTN: σε STD_LOGIC; CLK: σε STD_LOGIC; MS: σε STD_LOGIC_VECTOR (3 προς τα κάτω 0). LED: εκτός STD_LOGIC_VECTOR (15 προς τα κάτω 0)). τέλος Master_Final_Project;

αρχιτεκτονική Συμπεριφορική του Master_Final_Project είναι

component final_project is Port (--CLK: σε STD_LOGIC; NMS: σε STD_LOGIC_VECTOR (3 προς τα κάτω 0). BTN: σε STD_LOGIC;-sw: σε STD_LOGIC_Vector (1 κάτω 0); LED: εκτός STD_LOGIC_V τελικό στοιχείο?

στοιχείο Final_DFF είναι

Θύρα (CLK: σε STD_LOGIC; D: σε STD_LOGIC_Vector (3 προς τα 0); Q: εκτός STD_LOGIC_Vector (3 προς τα κάτω 0)); τελικό στοιχείο?

σήμα DFF02proj30: STD_LOGIC;

σήμα DFF12proj74: STD_LOGIC; σήμα DFF22proj118: STD_LOGIC; σήμα DFF32proj1512: STD_LOGIC;

να αρχίσει

DFF0: Final_DFF χάρτης θύρας (CLK => CLK, D (0) => MS (0), D (1) => MS (1), D (2) => MS (2), D (3) => MS (3), Q (0) => DFF02proj30, Q (1) => DFF12proj74, Q (2) => DFF22proj118, Q (3) => DFF32proj1512); Proj0: τελικός_χάρτης θύρας έργου (NMS (0) => DFF02proj30, NMS (1) => DFF12proj74, NMS (2) => DFF22proj118, NMS (3) => DFF32proj1512, BTN => BTN, LED => LED); τέλος Συμπεριφορική?

Βήμα 7: Συναρμολόγηση

Συνέλευση
Συνέλευση
Συνέλευση
Συνέλευση
Συνέλευση
Συνέλευση
Συνέλευση
Συνέλευση

Η συναρμολόγηση υλικού για αυτό το έργο είναι ελάχιστη. Τα μόνα απαιτούμενα κομμάτια είναι τα εξής:

1. Basys 3 σανίδα (1)

2. Φτηνοί αισθητήρες κίνησης που μπορείτε να βρείτε στο amazon εδώ. (4)

3. Μόλυβδος από άντρα σε γυναίκα (4)

Συνέλευση:

1. Συνδέστε 4 αρσενικούς αγωγούς στις θύρες JB κεφαλίδας PMod 1-4 (Βλέπε εικόνα).

2. Συνδέστε τα θηλυκά άκρα στην ακίδα εξόδου κάθε αισθητήρα κίνησης.

Βήμα 8: Φόρτωση του προγράμματος

Τώρα είμαστε έτοιμοι να φορτώσουμε το κύριο αρχείο προέλευσης VHDL στον πίνακα Basys 3. Βεβαιωθείτε ότι εκτελείτε σύνθεση, υλοποίηση και δημιουργία ελέγχου bitstream για τυχόν σφάλματα. Εάν όλα εκτελούνται με επιτυχία, ανοίξτε τη διαχείριση υλικού και προγραμματίστε τη συσκευή Basys 3. Το έργο σας τώρα ολοκληρώθηκε!

Συνιστάται: