فهرست مطالب:

چراغ های خیابانی فعال شده با انرژی کارآمد: 8 مرحله
چراغ های خیابانی فعال شده با انرژی کارآمد: 8 مرحله

تصویری: چراغ های خیابانی فعال شده با انرژی کارآمد: 8 مرحله

تصویری: چراغ های خیابانی فعال شده با انرژی کارآمد: 8 مرحله
تصویری: لزبازی لیلا اوتادی چه لبی میگیره (نبینی از دستت رفته) 2024, نوامبر
Anonim
چراغ های خیابانی فعال با انرژی کارآمد
چراغ های خیابانی فعال با انرژی کارآمد

هدف ما از این پروژه ایجاد چیزی بود که باعث صرفه جویی در انرژی و منابع مالی جوامع شود. چراغ های خیابانی فعال شده با حرکت هر دو کار را انجام می دهند. در سراسر کشور انرژی در چراغ های خیابانی که خیابان های خالی را روشن می کنند هدر می رود. سیستم چراغ خیابانی ما تضمین می کند که چراغ ها فقط در مواقع مورد نیاز روشن می شوند و باعث صرفه جویی در هزینه های بیشمار برای جوامع می شوند. با استفاده از سنسورهای حرکتی ، چراغها تنها در مواقع حضور خودروها روشن می شوند. همچنین برای ایمنی عابران پیاده ، ما یک دکمه لغو را اجرا کردیم که تمام چراغ های خیابان را روشن می کند. مراحل زیر به شما نشان می دهد که چگونه ما مدل کوچک پروژه خود را با استفاده از Vivado و تخته Basys 3 طراحی و ساخته ایم.

مرحله 1: جعبه سیاه سیستم

جعبه سیاه سیستم
جعبه سیاه سیستم

ما این پروژه را با ترسیم نمودار جعبه سیاه ساده آغاز کردیم. نمودار جعبه سیاه به سادگی ورودی ها و خروجی هایی را نشان می دهد که سیستم ما برای تکمیل کلیه فرایندهای لازم نیاز دارد. ما سعی کردیم طراحی خود را تا حد امکان ساده و اساسی نگه داریم. سه ورودی سیستم ما شامل یک گذرگاه سنسورهای حرکت (4 برای مدل کوچک شده ما) ، یک دکمه لغو عابر پیاده و ورودی ساعت بود. در طرف دیگر خروجی واحد ما یک اتوبوس از چراغ های LED است که چراغ های خیابان ما را نشان می دهد. برای این مدل ما از سناریوی 16 چراغ خیابانی استفاده کردیم فقط به این دلیل که حداکثر تعداد خروجی LED در برد Basys 3 است. در نهایت ، با استفاده از این نمودار ما توانستیم پروژه ، منبع و فایلهای محدودیت Vivado خود را با ورودی و خروجی مناسب ایجاد کنیم.

مرحله 2: اجزاء

اجزاء
اجزاء
اجزاء
اجزاء

در این مرحله ما با بررسی اجزای تشکیل دهنده نمودار جعبه سیاه خود عمیق تر وارد می شویم. اولین جزء ما یک فایل منبع VHDL است که شامل فلیپ فلاپ های D است. فلیپ فلاپ های D به سادگی هرگونه سیگنالی را که از سنسورهای لبه رو به افزایش ساعت به آنها وارد می شود ، گرفته و این داده ها را تا لبه بالارونده بعدی قفل می کند. این باعث می شود که حسگرهای حرکت حساس ما مانع از سوسو زدن LED های خروجی شوند. همچنین ، ما یک فلیپ فلاپ D تک روی سیگنال ورودی دکمه قرار می دهیم تا بعد از فشار دادن دکمه ، 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'؛ begin my_div: process (clk، tmp_clk) متغیر div_cnt: integer: = 0؛ اگر (افزایش_دانه (clk)) سپس if (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 Flip-Flops

د فلیپ فلاپ
د فلیپ فلاپ

چهار فلیپ فلاپ متصل به سیگنال های ورودی برای عملکرد سیستم ما ضروری هستند. همانطور که قبلاً گفته شد ، با سنسورهای حرکت حساس و یک دکمه لغو ، فلیپ فلاپ ها از قفل ها برای خروجی سیگنال ورودی ما فقط در لبه رو به بالا ساعت استفاده می کنند. این منطق پی در پی به این معناست که چراغ های خیابان ما می توانند برای مدت زمان مشخصی پس از فعال شدن با حرکت سریع روشن بمانند. کدگذاری برای D-Flip Flop بسیار ساده است:

beginprocess (CLK) در صورت افزایش_په (CLK) و سپس Q <= D؛ پایان اگر؛ پایان فرایند ؛

کل مورد را می توان در یک دستور if کامپایل کرد. هنگامی که این قطعه را در اختیار داشتیم ، یک فایل منبع ساختاری 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 <= "111111111111111111"؛ مورد نهایی ؛

مرحله 5: محدودیت ها

برای اینکه بتوانید ورودی و خروجی خود را با استفاده از Vivado به درستی بیان کنید ، باید یک فایل محدودیت را اجرا کنید که تمام پورت ها ، دکمه ها ، LED ها و ساعت های مورد استفاده را مشخص می کند.

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

set_property PACKAGE_PIN U16 [دریافت_پورتها {LED [0]}] set_property IOSTANDARD LVCMOS33 [دریافت_پورتها {LED [0]}] set_property PACKAGE_PIN E19 [دریافت_پورتها {LED [1]}] set_property IOSTANDARD LVCMOS33 [دریافت] پورت {LED} U19 [دریافت_پورت {LED [2]}] set_property IOSTANDARD LVCMOS33 [دریافت_پورت {LED [2]}] set_property PACKAGE_PIN V19 [دریافت_پورت {LED [3]}] set_property IOSTANDARD LVCMOS33 [دریافت_پورت {LED [3]}] set_property PAC get_ports {LED [4]}] set_property IOSTANDARD LVCMOS33 [دریافت_پورت {LED [4]}] set_property PACKAGE_PIN U15 [دریافت_پورتها {LED [5]}] set_property IOSTANDARD LVCMOS33 [دریافت_پورتها {LED [5]}] set_property PACKAGE LED [6]}] set_property IOSTANDARD LVCMOS33 [دریافت_پورت {LED [6]}] set_property PACKAGE_PIN V14 [دریافت_پورت {LED [7]}] set_property IOSTANDARD LVCMOS33 [دریافت_پورت {LED [7]}] set_property PACKAGE_PIN V13 [8]}] set_property IOSTANDARD LVCMOS33 [دریافت_پورت {LED [8]}] set_property PACKAGE_PIN V3 [دریافت_پورت {LED [9]}] set_property IO STANDARD LVCMOS33 [دریافت_پورتها {LED [9]}] set_property PACKAGE_PIN W3 [get_ports {LED [10]}] set_property IOSTANDARD LVCMOS33 [دریافت_پورتها {LED [10]}] set_property PACKAGE_PIN U3 [دریافت_پورتها] IOS_ARD [LED] [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 [دریافت_پورت {LED [14]}] set_property IOSTANDARD LVCMOS33 [دریافت_پورت {LED [14]}] set_property PACKAGE_PIN L1 [دریافت_پورت ها {LED [15]}] set_property IOSTANDARD LVCMOS [15]}]

set_property PACKAGE_PIN U18 [get_ports BTN] set_property IOSTANDARD LVCMOS33 [دریافت_پورت 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 LVCMOS33 [دریافت] پورت {sp} 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 [دریافت_پورت {MS [3]}]

مرحله 6: فایل منبع اصلی

در این فایل اصلی ما تمام فایلهای منبع جزء که قبلاً ذکر شد را گرد هم می آوریم. این فایل به عنوان کد ساختاری عمل می کند و اجزای مختلف را گرد هم می آورد.

موجودیت Master_Final_Project Port است (BTN: در STD_LOGIC ؛ CLK: در STD_LOGIC ؛ MS: در STD_LOGIC_VECTOR (3 پایین 0) ؛ LED: خروجی STD_LOGIC_VECTOR (15 پایین 0)) ؛ پایان دادن به پروژه اصلی_فینال ؛

معماری رفتار Master_Final_Project است

جزء final_project پورت است (--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_Vektor (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. سنسورهای حرکت ارزان که می توانید در آمازون در اینجا پیدا کنید. (4)

3. هدایت مرد به زن (4)

مونتاژ:

1. 4 سر نر را به درگاههای JB سربرگ PMod 1-4 وصل کنید (شکل را ببینید).

2. انتهای زن را به هر پین خروجی سنسور حرکت وصل کنید.

مرحله 8: بارگیری برنامه

اکنون آماده ایم که فایل اصلی منبع VHDL را در برد Basys 3 بارگذاری کنیم. اطمینان حاصل کنید که ترکیب ، پیاده سازی و ایجاد بررسی جریان بیت برای خطاهای احتمالی را انجام دهید. اگر همه با موفقیت اجرا شدند ، مدیر سخت افزار را باز کرده و دستگاه Basys 3 را برنامه ریزی کنید. پروژه شما اکنون به پایان رسیده است!

توصیه شده: