Spisu treści:
- Krok 1: Schemat czarnej skrzynki
- Krok 2: Maszyny stanowe
- Krok 3: Tabele prawdy maszyny stanów, równania wzbudzenia i równania wyjściowe
- Krok 4: Opakowanie, podmoduły i ograniczenie
- Krok 5: Porty we/wy dla diody LED
Wideo: ŚWIATŁO: 5 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:32
Celem tego finalnego projektu było stworzenie czegoś, co skupiałoby się na zrównoważonym rozwoju i wdrażaniu koncepcji projektowania cyfrowego, i aby to zrobić, postanowiłem zaprojektować skalowalny system oszczędzania energii przy użyciu vhdl i wykonany dla płyty Basys 3 (seria Artix-7 35T). Skalowalny, ponieważ w pomieszczeniu można umieścić dowolną liczbę czujników i dowolną liczbę tych systemów można rozmieścić wokół budynku lub domu. To, co ten system mógłby zrobić, to teoretycznie zaoszczędzić tysiące dolarów w budynkach komercyjnych i zmniejszyć duży procent zużycia energii w mniejszych społecznościach mieszkaniowych poprzez wdrożenie połączonego systemu aktywnie i pasywnie sterowanych świateł, czujników ruchu, timerów wyświetlanych na wyświetlaczach siedmiosegmentowych i przełączniki sterujące. Ten przykład dotyczy pojedynczego systemu z trzema czujnikami ruchu, wyłącznikiem głównym, wyłącznikiem ręcznym/normalnym, czterema wyświetlaczami siedmiosegmentowymi i pojedynczym światłem, które kontroluje system.
Na przykład w wybranym pomieszczeniu kilka czujników ruchu zostałoby umieszczonych wokół (ta przykładowa konstrukcja ma trzy), a każdy z nich wyśle sygnał (1), jeśli wykryje ruch, i (0), jeśli nie. Jeśli co najmniej jeden z czujników ruchu wykryje ruch, światła włączą się, jeśli jeszcze nie są włączone, i pozostaną włączone, jeśli są już włączone. W dowolnym momencie wszystkie detektory ruchu niczego nie wykrywają, timer zaczyna odliczać przez określony czas (możliwy do ustawienia w kodzie), a światła pozostają włączone podczas odliczania czasu. Gdy timer zakończy odliczanie, stoper zatrzymuje się, a światła gasną. Jeśli co najmniej jeden czujnik ruchu wykryje ruch podczas odliczania czasu, zegar zatrzymuje się i resetuje. A jeśli przynajmniej jeden czujnik ruchu wykryje ruch, gdy światła są wyłączone, światła natychmiast się włączają.
Ten system ma dwa tryby, jeden z zegarem, jak wspomniano powyżej, a drugi, w którym znajduje się przełącznik, który steruje światłami ręcznie (ignorując czujniki). Istnieje główny przełącznik, który pozwala użytkownikowi wybrać tryb, z którego chce korzystać, w zależności od tego, który według niego pozwoli zaoszczędzić więcej energii. Były. Pomieszczenie takie jak korytarz może skorzystać z trybu pasywnego timera - użytkownicy nie są pewni, kiedy ludzie będą przechodzić, ale włączanie i wyłączanie światła za każdym razem, gdy wchodzą i wychodzą, byłoby niedogodnością, podczas gdy pokój taki jak korytarz jako sypialnia z jednym użytkownikiem byłaby lepiej obsługiwana ręcznie. A wyłącznik główny byłby pomocny w przypadkach, gdy osoba mieszkająca w sypialni miałaby wyjść na dłuższy czas, wówczas wyłącznik główny mógłby zostać wyłączony, a tryb timera działałby bardziej efektywnie oszczędzając energię.
Tak więc w tym systemie są dwie maszyny stanowe, jedna jest główną maszyną stanową, a druga dla licznika czasu. Główny automat stanów ma pięć stanów zdefiniowanych jako: 1. „Światła włączone, wykryto ruch” (id = 000), 2. „Światła włączone, nie wykryto ruchu” (id = 001), 3. „Światło wyłączone, brak ruchu wykryto” (id = 010), 4. „włączony ręcznie” (id = 011) oraz 5. „ręcznie wyłączony” (id = 100). Ta maszyna stanu głównego ma cztery wejścia: przełącznik główny (ms), przełącznik ręczny/normalny (ns), sygnał, który jest wysoki, gdy co najmniej jeden przełącznik wykryje ruch, a w przeciwnym razie jest niski (orx) oraz sygnał, który jest wysoki po zakończeniu timera i niski w przeciwnym razie (td). Automat główny posiada dwa wyjścia: światła (światła) oraz sygnał, który wskazuje, kiedy włączyć odliczanie (timer) lub (t) (oba używane zamiennie).
Druga maszyna stanów, licznik czasu, ma 12 stanów: 10 z nich ma identyfikatory powiązane z liczbą, na której wyświetlany jest siódemka – „seg 10” (id = 1010), „seg 9” (id = 1001), […], „seg 2” (id = 0010), „seg 1” (id = 0001), a pozostałe dwa stany wyświetlają zero, co oznacza, że timer jest wyłączony, więc jest pierwsze puste „puste 1” (id = 1111) i drugie puste "puste 2" (id = 0000). Timer odliczający posiada jedno wejście: timer (t) oraz trzy wyjścia: liczbę wyświetlaną binarnie z czterema bitami (bin) oraz sygnał informujący o wykonaniu timera (td).
Krok 1: Schemat czarnej skrzynki
Jest to przegląd tego, jak ma działać cały system, i jest opisany za pomocą diagramu czarnej skrzynki.
- Zegar jest używany do taktowania głównej maszyny stanu i dekodera siedmiosegmentowego; wolniejszy zegar jest potrzebny dla licznika w dół, więc istnieje moduł dzielnika zegara, który pobiera wejście zegara i wyprowadza wolniejszy zegar dla licznika w dół.
- Zmienna pośrednia (orx) w owijce jest powiązana z czujnikami ruchu i będzie wysoka, jeśli co najmniej jeden z czujników coś wykryje, a niska w przeciwnym razie; równanie logiczne to po prostu orx = s(2) lub s(1) lub s(0).
-
Główny fsm kontroluje, w jakim ogólnym stanie znajduje się system, w zależności od wejść (orx, ms, ns, td) i wyprowadza aktualny stan (sm) przedstawiony w uproszczeniu z dwoma sygnałami, do których jest używany (timer i światła).
- (timer) to sygnał opakowujący, który jest wysyłany do licznika fsm w dół jako jego wejście i jest kontrolowany przez bieżący stan głównego fsm. Wskazuje, kiedy włączyć timer.
- (światła) to sygnał opakowujący, który służy do sterowania diodą LED i jest kontrolowany przez bieżący stan głównego fsm.
-
Licznik w dół fsm kontroluje to, co wyświetla siedem segmentów w zależności od wejścia (timer) i wysyła aktualny stan, w którym się znajduje (sd), pokazany w uproszczeniu z dwoma sygnałami, do których jest używany (td i bin).
- (td) to sygnał opakowujący, który jest wysyłany do głównego fsm jako jego wejście i jest kontrolowany przez bieżący stan licznika fsm w dół. Działa jako sygnał zwrotny, który wskazuje, kiedy timer jest wykonany.
- (bin) to czterobitowy sygnał opakowania, który jest połączony z czterema bitami zera („0000” i bin), a połączone osiem bitów jest wysyłanych do (q), ośmiobitowego sygnału opakowania, który z kolei jest wysyłany do siedmiu dekoder segmentu pod (ALU_VAL).
-
Moduł siedmiosegmentowy jest taki sam jak w Polylearn; jego główne wejścia przyjmują 8-bitową liczbę (bin) do (ALU_VAL), która jest wyświetlana na czterech różnych wyświetlaczach siedmiosegmentowych, wykorzystując wyjścia (SEGMENTY) do sygnału opakowania (seg) i (DISP_EN) do opakowania (disp_en).
- Ponieważ dwa lub więcej wyświetlacze siedmiosegmentowe nie mogą wyświetlać różnych cyfr w tym samym czasie, potrzebny jest zegar, aby przechodzić przez cztery segmenty, wyświetlając odpowiednią cyfrę na raz dla każdego segmentu włączanego indywidualnie, a cyklowanie wystarczająco szybko sprawia, że segs wydają się być włączone naraz.
- (znak i ważny) są stałe w całym tym programie, więc (znak) jest na stałe ustawiony w stanie niskim, a (ważny) jest na stałe ustawiony na wysokim poziomie.
- (ALU_VAL) przyjmuje jako wejście sygnał opakowania (q), który reprezentuje liczbę, która będzie wyświetlana na siedmiosegmentowym wyświetlaczu w postaci binarnej.
- Wyjście (SEGMENTS) jest wysyłane do ośmiobitowego sygnału opakowującego (seg) i (DISP_EN) do czterobitowego sygnału opakowującego (disp_en).
-
Istnieje również moduł D flip flop, który nie jest wyraźnie pokazany na schemacie, ale jest potrzebny dla dwóch automatów stanowych jako podmoduły i pomaga synchronicznie przechodzić stany.
- (3) z nich są potrzebne do głównego fsm, ponieważ 2^(3) = 8 > 5 stanów do kodowania
- (4) z nich są potrzebne do licznika w dół fsm, ponieważ 2^4 = 16 > 12 stanów do kodowania
Krok 2: Maszyny stanowe
Aby właściwie zaprojektować dwie maszyny stanowe, poszczególne stany muszą być jasno zdefiniowane, wraz z ich wyjściami i stanem, do którego przechodzi w oparciu o różne możliwe dane wejściowe.
Główne stany fsm:
„Światła włączone, wykryto ruch” (id = 000)
Światła są włączone, co najmniej jeden z detektorów ruchu wykrywa ruch, więc orx musi być wysoki, a ms jest włączony.
- Wyjścia: światła = 1 i timer = 0
- Pozostaje w tym stanie, gdy ms = 1 i orx = 1.
- Przechodzi do stanu „światła włączone, nie wykryto ruchu”, jeśli ms = 1 i orx = 0.
- Przechodzi do stanu „ręcznie włączone”, jeśli ms = 0 i ns = 1.
- Przechodzi do stanu „ręcznie wyłączone”, jeśli ms = 0 i ns = 0.
„Światła włączone, nie wykryto ruchu” (id = 001)
Światła są włączone, żaden czujnik ruchu nie wykrył ruchu, więc orx musi być niski, a ms jest włączone. Również na początku tego stanu licznik czasu ustawiony na wysoki mówi fsm odliczanie, aby rozpocząć odliczanie w dół, kontynuuje odliczanie i przestaje odliczać, gdy odliczanie fsm mówi temu fsm, że odliczanie zostało zakończone.
- Wyjścia: światła = 1 i timer = 1.
- Pozostaje w tym stanie, gdy ms = 1 i orx = 0 i td (odliczanie czasu) = 0.
- Przechodzi do stanu „światła włączone, wykryto ruch”, jeśli ms = 1 i orx = 1.
- Przechodzi do stanu „światła wyłączone, nie wykryto ruchu”, jeśli ms = 1 i orx = 0 i td = 1.
- Przechodzi do stanu „ręcznie włączone”, jeśli ms = 0 i ns = 1.
- Przechodzi do stanu „ręcznie wyłączone”, jeśli ms = 0 i ns = 0.
„Światła wyłączone, nie wykryto ruchu” (id = 010)
Światła są wyłączone, żaden czujnik ruchu nie wykrył ruchu, a zegar zakończył odliczanie, więc orx musi być niski, ms jest włączone, a td jest wyłączone.
- Wyjścia: światła = 0 i timer = 0.
- Pozostaje w tym stanie, gdy ms = 1 i orx = 0.
- Przechodzi do stanu „światła włączone, wykryto ruch”, jeśli ms = 1 i orx =1.
- Przechodzi do stanu „ręcznie włączone”, jeśli ms = 0 i ns = 1.
- Przechodzi do stanu „ręcznie wyłączone”, jeśli ms = 0 i ns = 0.
„Włączony ręcznie” (id = 011)
Światła są włączone, czujniki ruchu nie mają znaczenia, więc ms jest wyłączone, a ns włączone.
- Wyjścia: światła = 1 i timer = 0.
- Pozostaje w tym stanie, gdy ms = 0 i ns = 1.
- Przechodzi do stanu „ręcznie wyłączone”, jeśli ms = 0 i ns = 0.
- Przechodzi do stanu „światła wyłączone, nie wykryto ruchu, jeśli ms = 1.
„Wyłączony ręcznie” (id = 100)
Światła są wyłączone, czujniki ruchu nie mają znaczenia, więc ms jest wyłączone, a ns wyłączone.
- Wyjścia: światła = 0 i timer = 0.
- Pozostaje w tym stanie, gdy ms = 0 i ns = 0.
- Przechodzi do stanu „ręcznie włączone”, jeśli ms = 0 i ns = 1.
- Przechodzi do stanu „światła wyłączone, nie wykryto ruchu, jeśli ms = 1.
Stan licznika w dół:
„Seg 10” (id = 1010)
Wyświetlacz siedmiosegmentowy pokazuje 10.
- Wyjścia: bin = „1010” i td = 0.
- Przechodzi do stanu „seg 9”, jeśli zegar = 1.
- Przechodzi do stanu „puste 2”, jeśli zegar = 0.
„Seg 9” (id = 1001)
Wyświetlacz siedmiosegmentowy pokazuje 9.
- Wyjścia: bin = „1001” i td = 0.
- Przechodzi do stanu „seg 8”, jeśli zegar = 1.
- Przechodzi do stanu „puste 2”, jeśli zegar = 0.
(Pominięto stany od „Seg 8” do „Seg 2”, ponieważ przebiegają według tego samego wzorca co „Seg 10” i „Seg 9” i nie są konieczne do wyjaśnienia)
„Seg 1” (id = 0001)
Wyświetlacz siedmiosegmentowy pokazuje 1.
- Wyjścia: bin = „0001” i td = 0.
- Przechodzi do stanu „puste 2” przy następnym narastającym zboczu zegara (wejście nie jest potrzebne).
„Puste 2” (id = 1111)
Wyświetlacz siedmiosegmentowy pokazuje 0. Celem drugiego stanu pustego jest to, że istnieje oddzielny stan, gdy td = 1 dla bezpieczeństwa.
- Wyjścia: bin = „1111” i td = 1.
- Przechodzi do stanu „puste 1” przy następnym narastającym zboczu zegara (wejście nie jest potrzebne).
„Puste 1” (id = 0000)
Wyświetlacz siedmiosegmentowy pokazuje 0. Jest to stan, w którym system pozostaje, gdy główny automat stanu jest w stanie „świeci się, nie wykryto ruchu”.
- Wyjścia: bin = „0000” i td = 0.
- Przechodzi do stanu „seg 10”, jeśli zegar = 1.
Krok 3: Tabele prawdy maszyny stanów, równania wzbudzenia i równania wyjściowe
Następnym krokiem jest utworzenie tabel prawdy dla dwóch maszyn stanowych oraz równań wzbudzenia i równań wyjściowych dla każdego fsm. Dla każdego równania wzbudzenia fsm muszą być równania dla każdego następnego zakodowanego bitu stanu w odniesieniu do bieżącego stanu i jego sygnałów wejściowych. Dla każdego równania wyjściowego fsm muszą istnieć równania dla każdego sygnału wyjściowego w odniesieniu do aktualnego stanu. Wszystkie cztery zestawy równań można wyciągnąć z przedstawionych tabel prawdy. (qn jest kolejnym zakodowanym bitem stanu dla każdego automatu stanów, a q jest stanem bieżącym)
(000) równoważne q(2)'q(1)'q(0)' i (0000) równoważne q(3)'q(2)'q(1)'q(0)'
(np. (0101) to q(3)'q(2)q(1)'q(0), a (110) to q(2)q(1)q(0)')
Równania wzbudzenia dla głównego fsm:
- 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)]
Równania wyjściowe dla głównego fsm:
- światła = (000) + (001) + (100)
- minutnik = (001)
Równania wzbudzenia dla licznika dolnego 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)]
Równania wyjściowe dla licznika dolnego fsm:
- td = (1111)
- kosz(3) = (1010) + (1001) + (1000) + (1111) + (0000)
- kosz(2) = (0111) + (0110) + (0101) + (0100) + (1111) + (0000)
- kosz(1) = (1010) + (0111) + (0110) + (0011) + (0010) + (1111) + (0000)
- bin(0) = (1001) + (0111) + (0101) + (0011) + (0001) + (1111) + (0000)
Krok 4: Opakowanie, podmoduły i ograniczenie
Jak wyjaśniono już w kroku 1, te moduły są potrzebne do tego projektu i wszystkie są powiązane z modułem opakowującym zatytułowanym „final_proj.vhd”. Plik ograniczenia zatytułowany "Basys3_Master.xdc" jest używany do łączenia wszystkich wejść i wyjść opakowujących z przełącznikami, siedmioma segmentami i portami we/wy na płycie Basys 3. Przełącznik główny powinien być przełącznikiem na płycie najbliżej strony, po której są przewody, przełącznik normalny/ręczny jest drugim najbliższym, a trzy przełączniki reprezentujące trzy czujniki ruchu to trzy przełączniki bezpośrednio obok przełącznika normalnego/ręcznego. Cały kod (równania logiczne, deklaracje modułów itp.) jest już zapisany w plikach, więc nie musisz nic więcej pisać, aby to zadziałało.
Krok 5: Porty we/wy dla diody LED
Ostatnim krokiem w tym projekcie jest użycie diody LED, aby pokazać, czy (światła) faktycznie włączają się i wyłączają. Okablowanie pokazano na dwóch zdjęciach. Upewnij się, że dioda LED jest połączony szeregowo z rezystorem (co najmniej 330 omów), aby nie przepalić diody LED i upewnij się, że długi pin diody LED jest podłączony do tego samego złącza żeńskiego na płycie podstawy, co pokazano na czerwonym przewodzie (góra najbardziej na prawo), a krótszy pin jest podłączony do uziemienia, ta sama żeńska główka, co pokazano na czarnym przewodzie (góra, druga od lewej).
Zalecana:
Jak zrobić światło słoneczne do ładowania: 8 kroków
Jak zrobić światło słoneczne do ładowania:
ŚWIATŁO LED DIY do kamery internetowej (C920): 10 kroków (ze zdjęciami)
OŚWIETLENIE LED DIY do kamery internetowej (C920): Oświetlenie jest niezbędne w przypadku kamery internetowej. Ten mały pierścień LED pomaga kamerze na twarzy bardzo dobrze. Możesz zrobić film bez światła, ale z tą diodą. Użyłem drukarki 3d i modułu LED WS2812b (kompatybilny z Neopixelem)
Światło rowerowe: 7 kroków
Światło rowerowe: W tym projekcie pokażę Ci, jak stworzyć własne światło rowerowe, które może oświetlać drogę w nocy, wskazywać, w którą stronę pójdziesz, w tym światło hamowania
Animowane światło nastrojowe i światło nocne: 6 kroków (ze zdjęciami)
Animated Mood Light & Night Light: Fascynacja, która graniczy z obsesją na punkcie światła, postanowiłem stworzyć wybór małych modułowych płytek drukowanych, które można wykorzystać do tworzenia wyświetlaczy świetlnych RGB o dowolnym rozmiarze. Po stworzeniu modułowej płytki PCB wpadłem na pomysł ułożenia ich w
Światło słoneczne bez baterii lub słoneczne światło dzienne Dlaczego nie?: 3 kroki
Światło słoneczne bez baterii lub słoneczne światło dzienne… Dlaczego nie?: Witamy. Przepraszam za mój englishDaylight? Słoneczny? Czemu? Mam nieco ciemny pokój w ciągu dnia i muszę włączać światła podczas użytkowania. Zainstaluj światło słoneczne na dzień i na noc (1 pokój): (w Chile) - Panel słoneczny 20 w: 42 USD - Bateria: 15 USD - Solar opłata kont