Оглавление:
- Шаг 1: Схема черного ящика
- Шаг 2: конечные автоматы
- Шаг 3. Таблицы истинности конечного автомата, уравнения возбуждения и выходные уравнения
- Шаг 4: оболочка, подмодули и ограничение
- Шаг 5: Порты ввода-вывода для светодиода
Видео: L I G H T S: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
Целью этого финального проекта было создание чего-то, что сфокусировалось бы на устойчивости и реализации концепций цифрового дизайна, и для этого я решил спроектировать масштабируемую систему энергосбережения с использованием vhdl и сделать ее для платы Basys 3 (серия Artix-7 35T). Масштабируемость, потому что любое количество датчиков можно разместить в комнате, и любое количество этих систем можно разместить вокруг здания или дома. Эта система теоретически сэкономит тысячи долларов на коммерческом строительстве и снизит большой процент потребления энергии в небольших жилых районах за счет реализации подключенной системы активного и пассивного управления освещением, детекторами движения, таймерами, отображаемыми на семи сегментных дисплеях, и переключатели управления. В этом примере рассматривается одиночная система с тремя датчиками движения, главным переключателем, переключателем ручного / обычного режима, четырьмя семисегментными дисплеями и одним источником света, которым управляет система.
Например, в выбранной комнате несколько детекторов движения будут размещены вокруг (в этом примере дизайна их три), и каждый будет отправлять сигнал (1), если он обнаруживает движение, и (0), если нет. Если хотя бы один из детекторов движения обнаруживает движение, свет включается, если он еще не включен, и остается включенным, если он уже включен. В любой момент все датчики движения ничего не обнаруживают, таймер начинает обратный отсчет в течение установленного периода времени (настраивается в коде), и свет остается включенным, пока таймер отсчитывает обратный отсчет. Когда таймер заканчивает обратный отсчет, таймер останавливается, и свет выключается. Если хотя бы один детектор движения обнаруживает движение во время обратного отсчета таймера, таймер останавливается и сбрасывается. И если хотя бы один датчик движения обнаруживает движение при выключенном свете, он сразу включается.
Эта система имеет два режима: один с таймером, как указано выше, и второй, где есть переключатель, который управляет освещением вручную (без учета датчиков). Существует главный переключатель, который позволяет пользователю выбирать, какой режим он хочет использовать, в зависимости от того, какой, по его мнению, позволит сэкономить больше энергии в целом. Бывший. Помещение, такое как коридор, может выиграть от режима пассивного таймера - пользователи не уверены, когда люди собираются проходить через них, но включение и выключение света каждый раз, когда они входят и выходят, было бы неудобно, в то время как такая комната поскольку спальней с одним пользователем лучше управлять вручную. И главный выключатель был бы полезен в таких случаях, как если бы человек, живущий в спальне, должен был уйти на длительный период времени, тогда главный выключатель мог бы быть выключен, и режим таймера работал бы для более эффективного энергосбережения.
Итак, в этой системе есть два конечных автомата, один из которых является главным конечным автоматом, а другой - для таймера обратного отсчета. Главный конечный автомат имеет пять состояний, определенных как таковые: 1. «свет включен, движение обнаружено» (id = 000), 2. «свет включен, движение не обнаружено» (id = 001), 3. «свет выключен, движение отсутствует. обнаружен »(id = 010), 4.« вручную включен »(id = 011) и 5.« вручную выключен »(id = 100). Этот главный конечный автомат имеет четыре входа: главный переключатель (мс), ручной / нормальный переключатель (нс), сигнал высокого уровня, когда хотя бы один переключатель обнаруживает движение, и низкий уровень в противном случае (orx), и сигнал, который высокий, когда таймер закончился, и низкий в противном случае (td). Главный конечный автомат имеет два выхода: индикаторы (индикаторы) и сигнал, указывающий, когда включать таймер обратного отсчета (таймер) или (t) (оба используются взаимозаменяемо).
Второй конечный автомат, таймер обратного отсчета, имеет 12 состояний: 10 из них имеют идентификаторы, связанные с числом, отображаемым седьмым сегментом - «сегмент 10» (идентификатор = 1010), «сегмент 9» (идентификатор = 1001), […], «Сегмент 2» (id = 0010), «сегмент 1» (id = 0001), а в двух других состояниях отображается ноль, что означает, что таймер выключен - поэтому есть первый пробел «пустой 1» (id = 1111) и второй пробел «бланк 2» (id = 0000). Таймер обратного отсчета имеет один вход: таймер (t) и три выхода: число, отображаемое в двоичном формате с четырьмя битами (bin), и сигнал, указывающий, что таймер завершен (td).
Шаг 1: Схема черного ящика
Это обзор того, как вся система должна работать, и он описан схемой черного ящика.
- Часы используются для тактирования главного конечного автомата и семисегментного декодера; более медленные часы необходимы для обратного счетчика, поэтому есть модуль делителя тактовых импульсов, который принимает тактовый вход и выдает более медленные часы для обратного счетчика.
- Промежуточная переменная (orx) в оболочке привязана к датчикам движения и будет высокой, если хотя бы один из датчиков что-то обнаруживает, и низкой в противном случае; логическое уравнение для этого просто orx = s (2), s (1) или s (0).
-
Главный fsm контролирует, в каком общем состоянии находится система, в зависимости от входов (orx, ms, ns, td) и выводит текущее состояние, в котором она находится (sm), показанное упрощенно с двумя сигналами, для которых она используется (таймер и свет).
- (таймер) - это сигнал оболочки, который отправляется на счетчик обратного отсчета fsm в качестве его входа и управляется текущим состоянием основного fsm. Указывает, когда включать таймер.
- (lights) - это сигнал оболочки, который используется для управления светодиодом и управляется текущим состоянием основного fsm.
-
Обратный счетчик fsm контролирует то, что отображает семь сегментов в зависимости от входа (таймера), и выводит текущее состояние, в котором он находится (sd), показанный упрощенно с двумя сигналами, которые он использует для (td и bin).
- (td) - это сигнал обертки, который отправляется на главный fsm в качестве входа и контролируется текущим состоянием fsm обратного счетчика. Он функционирует как сигнал обратной связи, который указывает, когда таймер закончил работу.
- (bin) - это четырехбитовый сигнал оболочки, который объединяется с четырьмя битами нуля («0000» и bin), и объединенные восемь битов отправляются в (q), восьмибитный сигнал оболочки, который, в свою очередь, отправляется семи декодер сегмента под (ALU_VAL).
-
Семисегментный модуль такой же, как и на Polylearn; его основные входы принимают 8-битное число от (bin) до (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.
На нижнем счетчике указано:
«Сегмент 10» (id = 1010)
Семисегментный дисплей показывает 10.
- Выходы: bin = «1010» и td = 0.
- Переходит в состояние «сегмент 9», если таймер = 1.
- Переходит в состояние «пусто 2», если таймер = 0.
«Сегмент 9» (id = 1001)
Семисегментный дисплей показывает 9.
- Выходы: bin = «1001» и td = 0.
- Переходит в состояние «сегмент 8», если таймер = 1.
- Переходит в состояние «пусто 2», если таймер = 0.
(Состояния от «сегментов 8» до «сегментов 2» опускаются, потому что они следуют той же схеме, что и «сегменты 10» и «сегменты 9», и не являются необходимыми для объяснения)
«Сегмент 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) = (мс) '(нс)
- qn (1) = (ms) '(ns)' + (ms) (orx) '[(td) (001) + (010)] + (ms) [(011) + (100)]
- qn (0) = (мс) '(нс)' + (мс) (orx) '[(000) + (td)' (001)]
Выходные уравнения для основного ПСМ:
- огни = (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)
- bin (3) = (1010) + (1001) + (1000) + (1111) + (0000)
- bin (2) = (0111) + (0110) + (0101) + (0100) + (1111) + (0000)
- bin (1) = (1010) + (0111) + (0110) + (0011) + (0010) + (1111) + (0000)
- bin (0) = (1001) + (0111) + (0101) + (0011) + (0001) + (1111) + (0000)
Шаг 4: оболочка, подмодули и ограничение
Как уже объяснялось в шаге 1, эти модули необходимы для этого проекта и связаны вместе с модулем оболочки под названием «final_proj.vhd». Файл ограничений под названием «Basys3_Master.xdc» используется для связывания всех входов и выходов оболочки с коммутаторами, семью сегментами и портами ввода / вывода на плате Basys 3. Главный переключатель должен быть переключателем на плате, ближайшим к стороне, к которой подключены провода, переключатель нормального / ручного режима - вторым, а три переключателя, представляющие три датчика движения, - это три переключателя, расположенные непосредственно рядом с переключателем нормального / ручного режима.. Весь код (логические уравнения, объявления модулей и т. Д.) Уже записан в файлы, поэтому вам не нужно ничего писать, чтобы это работало.
Шаг 5: Порты ввода-вывода для светодиода
Последний шаг в этом проекте - использование светодиода, чтобы показать, действительно ли (свет) включается и выключается. Схема подключения показана на двух рисунках. Убедитесь, что резистор включен последовательно со светодиодом (не менее 330 Ом), чтобы не пережечь светодиод, и убедитесь, что длинный контакт светодиода подключен к тому же гнезду на плате Basys, что и показано красным проводом (вверху крайний правый), а более короткий штырь соединен с землей, тот же гнездовой разъем, что и показанный черный провод (вверху, второй слева).
Рекомендуемые:
Дизайн игры в Flick за 5 шагов: 5 шагов
Дизайн игры в Flick за 5 шагов: Flick - это действительно простой способ создания игры, особенно чего-то вроде головоломки, визуального романа или приключенческой игры
Счетчик шагов - Micro: Bit: 12 шагов (с изображениями)
Счетчик шагов - Микро: Бит: Этот проект будет счетчиком шагов. Мы будем использовать датчик акселерометра, встроенный в Micro: Bit, для измерения наших шагов. Каждый раз, когда Micro: Bit трясется, мы добавляем 2 к счетчику и отображаем его на экране
Играйте в Doom на своем IPod за 5 простых шагов !: 5 шагов
Играйте в Doom на своем IPod за 5 простых шагов!: Пошаговое руководство по двойной загрузке Rockbox на iPod, чтобы играть в Doom и десятки других игр. Это действительно легко сделать, но многие люди до сих пор удивляются, когда видят, как я играю дум на своем iPod, и путаются с инструкциями
Кормушка для рыбы Arduino Uno за 6 простых и простых шагов !: 6 шагов
Arduino Uno Fish Feeder за 6 простых и дешевых шагов !: Итак, для этого проекта может потребоваться немного предыстории. Людям с домашними рыбками, вероятно, приходилось сталкиваться с той же проблемой, что и мне: отпуск и забывчивость. Я постоянно забывала покормить рыбу и всегда старалась это сделать, пока она не упала
Акустическая левитация с Arduino Uno, шаг за шагом (8 шагов): 8 шагов
Акустическая левитация с Arduino Uno Пошаговая инструкция (8 шагов): ультразвуковые преобразователи звука L298N Женский адаптер питания постоянного тока с штыревым контактом постоянного тока Arduino UNOBreadboard Как это работает: сначала вы загружаете код в Arduino Uno (это микроконтроллер, оснащенный цифровым и аналоговые порты для преобразования кода (C ++)