Съдържание:
- Стъпка 1: Диаграма на черна кутия
- Стъпка 2: Държавни машини
- Стъпка 3: Таблици на истината на състоянието на машината, уравнения за възбуждане и уравнения на изхода
- Стъпка 4: Опаковка, подмодули и ограничения
- Стъпка 5: I/O портове за LED
Видео: L I G H T S: 5 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
Целта на този последен проект беше да създаде нещо, което да се фокусира върху устойчивостта и да приложи концепции за дигитален дизайн, и за да направя това, реших да проектирам мащабируема система за пестене на енергия с помощта на vhdl и направена за Basys 3 Board (серия Artix-7 35T). Мащабируемо, тъй като в една стая могат да се поставят произволен брой сензори и произволен брой от тези системи могат да се поставят около сграда или къща. Това, което тази система би направила, е теоретично да спести хиляди долари в търговски сгради и да намали голям процент от консумацията на енергия в по -малките жилищни общности чрез внедряване на свързана система от активно и пасивно управлявани светлини, детектори за движение, таймери, показани на седем сегментни дисплея, и превключватели за управление. Този пример разглежда една система с три детектора за движение, главен превключвател, ръчен/нормален превключвател, четири седем сегментни дисплея и една светлина, която системата контролира.
Например, в избрана стая няколко детектора за движение ще бъдат поставени наоколо (този пример има три) и всеки ще изпрати сигнал (1), ако открие движение, и (0), ако не го направи. Ако поне един от детекторите на движение открие движение, светлините се включват, ако още не са включени, и остават включени, ако вече са включени. По всяко време всички детектори за движение не откриват нищо, таймерът започва да отброява за определен период от време (регулируем по код), а светлините остават включени, докато таймерът отброява. След като таймерът приключи отброяването, таймерът спира и светлините се изключват. Ако поне един детектор на движение открие движение, докато таймерът отброява, таймерът спира и се нулира. И ако поне един детектор на движение открие движение, докато светлините са изключени, светлините веднага се включват.
Тази система има два режима, един с таймера, както е посочено по -горе, и втори, където има превключвател, който управлява светлините ръчно (игнорирайки сензорите). Има главен превключвател, който позволява на потребителя да избере кой режим да използва въз основа на този, който смята, че ще спести повече енергия като цяло. Пр. Стая като коридор може да се възползва от режима на пасивен таймер- потребителите не са сигурни кога ще преминават хората, но включването и изключването на светлините всеки път, когато влизат и излизат, би било неудобство, докато стая като като спалня с един потребител би било по -добре ръчно да се управлява. Главният превключвател би бил полезен в случаи, като например ако човекът, който живее в спалнята, трябва да напусне за продължителен период от време, тогава главният превключвател може да бъде изключен и режимът на таймера ще работи, за да пести енергия по -ефективно.
Така че в тази система има две състоятелни машини, едната е основната машина на състоянието, а другата за таймера за обратно броене. Основната машина на състоянието има пет състояния, определени като такива: 1. "светлини включени, открито движение" (id = 000), 2. "светлини включени, не е открито движение" (id = 001), 3. "светлини изключени, няма движение" открит "(id = 010), 4." ръчно включен "(id = 011) и 5." ръчно изключен "(id = 100). Тази основна машина на състоянието има четири входа: главния превключвател (ms), ръчния/нормален превключвател (ns), сигнал, който е висок, когато поне един превключвател открива движение, и в противен случай е нисък (orx), и сигнал, който е висока, след като таймерът е свършен, и ниска в противен случай (td). Главният автомат има два изхода: светлини (светлини) и сигнал, който показва кога да се включи таймерът за обратно броене (таймер) или (t) (и двата се използват взаимозаменяемо).
Втората машина на състоянието, таймерът за обратно броене, има 12 състояния: 10 от тях имат идентификатори, свързани с числото, което седемте сегмента показват- „сегмент 10“(id = 1010), „сегмент 9“(id = 1001), […], „Сегмент 2“(id = 0010), „сегмент 1“(id = 0001), а другите две състояния и двете показват нула, представляваща изключения таймер- така че има първото празно „празно 1“(id = 1111) и второто празно „празно 2“(id = 0000). Таймерът за обратно броене има един вход: таймер (t) и три изхода: числото, показвано в двоичен формат с четири бита (бин) и сигнал, показващ, че таймерът е свършен (td).
Стъпка 1: Диаграма на черна кутия
Това е преглед на начина, по който трябва да работи цялата система, и е описан с диаграма в черно поле.
- Часовникът се използва за часовник на основната машина на състоянието и седем сегментния декодер; по -бавен часовник е необходим за брояча надолу, така че има модул за разделяне на часовник, който приема входа на часовника и извежда по -бавен часовник за брояча надолу.
- Междинната променлива (orx) в обвивката е обвързана със сензорите за движение и ще бъде висока, ако поне един от сензорите открие нещо, и ниска в противен случай; булевото уравнение за това е просто orx = s (2) или s (1) или s (0).
-
Основният fsm контролира в кое общо състояние е системата, в зависимост от входовете (orx, ms, ns, td) и извежда текущото състояние, в което е (см), показан опростен с двата сигнала, за които се използва (таймер и светлини).
- (таймер) е обвиващ сигнал, който се изпраща до надолу брояча fsm като негов вход и се контролира от текущото състояние на основния fsm. Той показва кога да се включва таймерът.
- (светлини) е сигнал за обвивка, който се използва за управление на светодиода и се контролира от текущото състояние на основния fsm.
-
Броячът надолу fsm контролира какво показва седемте сегмента в зависимост от входа (таймер) и извежда текущото състояние, в което е (sd), показан опростен с двата сигнала, за които се използва (td и bin).
- (td) е обвиващ сигнал, който се изпраща до главния fsm като негов вход и се контролира от текущото състояние на fsm на брояча надолу. Той функционира като сигнал за обратна връзка, който показва кога таймерът е свършен.
- (bin) е четирибитов обвивателен сигнал, който е свързан с четири бита нула ("0000" & bin) и комбинираните осем бита се изпращат до (q), осембитов обвивателен сигнал, който от своя страна се изпраща до седемте сегментен декодер под (ALU_VAL).
-
Модулът със седем сегмента е същият като този на Polylearn; основните му входове приемат 8 -битово число (бин) до (ALU_VAL) за показване на четири различни седем сегментни дисплея, използвайки изходите (SEGMENTS) към сигнала на обвивката (seg) и (DISP_EN) към обвивката (disp_en).
- Тъй като два или повече седем сегментни дисплея не могат да показват различни цифри едновременно, е необходим часовник за циклично преминаване през четирите sseg, показвайки съответната цифра наведнъж за всеки sseg, който се включва поотделно, а циклирането достатъчно бързо прави изглежда, че ssegs са включени наведнъж.
- (знак и валиден) са постоянни в цялата програма, така че (знак) е постоянно зададено ниско и (валидно) е трайно високо.
- (ALU_VAL) приема сигнала на обвивката (q) като вход, който представлява числото, което ще се показва на седем сегментния дисплей в двоичен формат.
- Изходът (SEGMENTS) се изпраща към осем битов обвивателен сигнал (seg) и (DISP_EN) към четирибитов обвивателен сигнал (disp_en).
-
Съществува и D флип флоп модул, който не е изрично показан на диаграмата, но е необходим за двете машини на състоянието като подмодули и помага за синхронното преминаване на състоянията.
- (3) от тях са необходими за основния fsm, тъй като 2^(3) = 8> 5 състояния за кодиране
- (4) от тях са необходими за брояча надолу fsm, тъй като 2^4 = 16> 12 състояния за кодиране
Стъпка 2: Държавни машини
За да се проектират правилно двете машини на състоянието, отделните състояния трябва да бъдат дефинирани ясно, с техните изходи и състоянието, към което преминава въз основа на различните възможни входове.
Основни състояния на fsm:
„Светлини включени, открито движение“(id = 000)
Светлините са включени, поне един от детекторите на движение засича движение, така че orx трябва да е високо и ms е включен.
- Изходи: светлини = 1 и таймер = 0
- Остава като това състояние, когато ms = 1 и orx = 1.
- Преминава към състояние „осветени лампи, не е открито движение“, ако ms = 1 и orx = 0.
- Преминава към състояние „ръчно включено“, ако ms = 0 и ns = 1.
- Преминава към състояние „ръчно изключено“, ако ms = 0 и ns = 0.
„Светлини включени, не е открито движение“(id = 001)
Светлините са включени, не се открива движение от детектор за движение, така че orx трябва да е ниско и ms е включен. Също така в началото на това състояние таймерът, който е настроен на високо, казва на fsm обратното броене да започне да отброява, продължава да отброява и спира обратното броене, след като fsm отброява fsm, че е свършил отброяването.
- Изходи: светлини = 1 и таймер = 1.
- Остава като това състояние, когато ms = 1 и orx = 0 и td (таймерът е готов) = 0.
- Преминава към състояние „осветени светлини, открито движение“, ако ms = 1 и orx = 1.
- Преминава към състояние „светлините са изключени, не е открито движение“, ако ms = 1 и orx = 0 и td = 1.
- Преминава към състояние „ръчно включено“, ако ms = 0 и ns = 1.
- Преминава към състояние „ръчно изключено“, ако ms = 0 и ns = 0.
„Изгасени светлини, не е открито движение“(id = 010)
Светлините са изключени, не е открито движение от сензор за движение и таймерът приключи отброяването, така че orx трябва да е ниско, ms е включено, а td е изключено.
- Изходи: светлини = 0 и таймер = 0.
- Остава като това състояние, когато ms = 1 и orx = 0.
- Преминава към състояние „осветени светлини, открито движение“, ако ms = 1 и orx = 1.
- Преминава към състояние „ръчно включено“, ако ms = 0 и ns = 1.
- Преминава към състояние „ръчно изключено“, ако ms = 0 и ns = 0.
„Ръчно включено“(id = 011)
Светлините са включени, детекторите за движение са без значение, така че ms се изключва и ns се включва.
- Изходи: светлини = 1 и таймер = 0.
- Остава като това състояние, когато ms = 0 и ns = 1.
- Преминава към състояние „ръчно изключено“, ако ms = 0 и ns = 0.
- Преминава към състояние „светлините са изключени, не е открито движение, ако ms = 1.
„Ръчно изключено“(id = 100)
Светлините са изключени, детекторите за движение са без значение, така че ms се изключва, а ns се изключва.
- Изходи: светлини = 0 и таймер = 0.
- Остава като това състояние, когато ms = 0 и ns = 0.
- Преминава към състояние „ръчно включено“, ако ms = 0 и ns = 1.
- Преминава към състояние „изключени светлини, не е открито движение, ако ms = 1.
Състояния на брояча надолу:
„Seg 10“(id = 1010)
Седем сегментният дисплей показва 10.
- Изходи: bin = “1010” и td = 0.
- Преминава към състояние „seg 9“, ако таймерът = 1.
- Преминава към състояние „празно 2“, ако таймерът = 0.
„Seg 9“(id = 1001)
Седем сегментният дисплей показва 9.
- Изходи: bin = “1001” и td = 0.
- Преминава към състояние „сегмент 8“, ако таймерът = 1.
- Преминава към състояние „празно 2“, ако таймерът = 0.
(Състоянията „Seg 8“до „Seg 2“са пропуснати, защото следват същия модел като „Seg 10“и „Seg 9“и не са необходими за обяснение)
„Seg 1“(id = 0001)
Седем сегментният дисплей показва 1.
- Изходи: bin = “0001” и td = 0.
- Преминава към състояние „празно 2“на следващия нарастващ ръб на часовника (не е необходимо въвеждане).
„Празно 2“(id = 1111)
Дисплеят със седем сегмента показва 0. Целта на второ празно състояние е да има отделно състояние, когато td = 1 за безопасност.
- Изходи: bin = “1111” и td = 1.
- Преминава към състояние „празно 1“на следващия нарастващ ръб на часовника (не е необходимо въвеждане).
„Празно 1“(id = 0000)
Дисплеят със седем сегмента показва 0. Това е състоянието, в което системата остава, когато машината на основното състояние е в състояние „светлините са изключени, не се открива движение“.
- Изходи: bin = “0000” и td = 0.
- Преминава към състояние „сегмент 10“, ако таймерът = 1.
Стъпка 3: Таблици на истината на състоянието на машината, уравнения за възбуждане и уравнения на изхода
Следващата стъпка е да се създадат таблици на истинността за двете машини на състоянието и уравнения на възбуждане и изходни уравнения за всеки fsm. За всяко уравнение за възбуждане на fsm трябва да има уравнения за всеки бит за следващо състояние, кодиран по отношение на текущото състояние и неговите входни сигнали. За всяко fsm изходно уравнение трябва да има уравнения за всеки изходен сигнал по отношение на текущото състояние. И четирите комплекта уравнения могат да бъдат извлечени от изобразените таблици на истината. (qn е следващият кодиран бит за всяко състояние машина, а q е текущото състояние)
(000) еквивалентно на q (2) 'q (1)' q (0) 'и (0000) еквивалентно на q (3)' q (2) 'q (1)' q (0) '
(напр. (0101) е q (3) 'q (2) q (1)' q (0) и (110) е q (2) q (1) q (0) ')
Уравнения за възбуждане за основния фсм:
- 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)]
Изходни уравнения за основния fsm:
- светлини = (000) + (001) + (100)
- таймер = (001)
Уравнения за възбуждане за брояча надолу 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)]
Изходни уравнения за брояча надолу fsm:
- td = (1111)
- кош (3) = (1010) + (1001) + (1000) + (1111) + (0000)
- кош (2) = (0111) + (0110) + (0101) + (0100) + (1111) + (0000)
- контейнер (1) = (1010) + (0111) + (0110) + (0011) + (0010) + (1111) + (0000)
- кош (0) = (1001) + (0111) + (0101) + (0011) + (0001) + (1111) + (0000)
Стъпка 4: Опаковка, подмодули и ограничения
Както беше обяснено вече в Стъпка 1, тези модули са необходими за този проект и всички са свързани заедно с модула на обвивката, озаглавен "final_proj.vhd". Ограничителният файл, озаглавен "Basys3_Master.xdc", се използва за свързване на всички входове и изходи на обвивката с превключватели, седемте сегмента и I/O портовете на платката Basys 3. Главният превключвател трябва да бъде превключвателят на дъската, най -близо до страната на проводниците, нормалният/ръчен превключвател е вторият най -близък, а трите превключвателя, представляващи трите сензора за движение, са трите превключвателя непосредствено до нормалния/ръчния превключвател. Целият код (булеви уравнения, декларации на модули и т.н.) вече е записан във файловете, така че не е нужно да пишете нищо друго, за да работи това.
Стъпка 5: I/O портове за LED
Последната стъпка за този проект е да използвате светодиод, за да покажете дали (светлините) действително се включват и изключват. Окабеляването е показано на двете снимки. Уверете се, че има резистор последователно с LED (най -малко 330 ома), за да не изгорите светодиода и се уверете, че дългият щифт на светодиода е свързан към същата женска глава на базовата платка, както е показано на червения проводник (отгоре най -вдясно) и по -късият щифт е свързан към земята, същата женска глава като показания черен проводник (отгоре, втори отляво).
Препоръчано:
Първи стъпки с безжични сензори за температура и вибрации на дълги разстояния: 7 стъпки
Първи стъпки с безжични сензори за температура и вибрации на дълги разстояния: Понякога вибрациите са причина за сериозни проблеми в много приложения. От валове и лагери на машината до работа на твърдия диск, вибрациите причиняват повреда на машината, ранна подмяна, ниска производителност и нанасят сериозен удар върху точността. Мониторинг
Първи стъпки с STM32f767zi Cube IDE и качване на персонализирана скица: 3 стъпки
Първи стъпки с STM32f767zi Cube IDE и качване на персонализирана скица: КУПЕТЕ (щракнете върху теста, за да закупите/посетете уеб страницата) STM32F767ZISUPPORTED SOFTWARE · STM32CUBE IDE · KEIL MDK ARM µVISION · EWARM IAR EMBEDDED WORKBENCH използва се за програмиране на STM микроконтролери
Как да направите 4G LTE двойна BiQuade антена Лесни стъпки: 3 стъпки
Как да направя 4G LTE двойна BiQuade антена лесни стъпки: През повечето време, с което се сблъсквах, нямам добра сила на сигнала за ежедневните ми работи. Така. Търся и опитвам различни видове антени, но не работи. След загубено време намерих антена, която се надявам да направя и изпробвам, защото тя не градивен принцип
Дизайн на играта с бързо движение в 5 стъпки: 5 стъпки
Дизайн на игра с Flick в 5 стъпки: Flick е наистина прост начин да направите игра, особено нещо като пъзел, визуален роман или приключенска игра
Система за предупреждение за паркиране на автомобил Arduino - Стъпки по стъпка: 4 стъпки
Система за предупреждение за паркиране на автомобил Arduino | Стъпки по стъпка: В този проект ще проектирам обикновена верига за сензори за паркиране на автомобил Arduino, използвайки Arduino UNO и HC-SR04 ултразвуков сензор. Тази базирана на Arduino система за предупреждение за автомобил за заден ход може да се използва за автономна навигация, измерване на роботи и други обхвати