Мазмұны:
- 1 -қадам: Қара жәшіктің диаграммасы
- 2 -қадам: Мемлекеттік машиналар
- 3 -қадам: Мемлекеттік шындық кестелері, қозу теңдеулері және шығыс теңдеулері
- 4 -қадам: орауыш, қосалқы модульдер және шектеу
- 5 -қадам: Жарық диодты енгізу/шығару порттары
Бейне: L I G H T S: 5 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:26
Бұл соңғы жобаның мақсаты-тұрақтылыққа бағытталған және цифрлық дизайн тұжырымдамаларын жүзеге асыратын нәрсе жасау, мен бұл үшін vhdl көмегімен масштабталатын қуатты үнемдеу жүйесін жобалауды шештім және Basys 3 Board (Artix-7 35T сериясы) үшін жасадым.). Масштабты, себебі сенсорлардың кез келген санын бөлмеге қоюға болады және бұл жүйелердің кез келген санын ғимараттың немесе үйдің айналасына қоюға болады. Бұл жүйе теориялық тұрғыдан коммерциялық ғимаратта мыңдаған доллар үнемдеуге және жеті сегментті дисплейде көрсетілген белсенді және пассивті басқарылатын шамдардың, қозғалыс детекторларының, таймерлердің қосылған жүйесін енгізу арқылы шағын тұрғын үйлерде энергия тұтынудың үлкен пайызын азайтады. басқару қосқыштары. Бұл мысалда үш қозғалыс детекторы, басты қосқыш, қолмен/қалыпты қосқыш, төрт жеті сегментті дисплей және бір басқару жүйесі бар бір жүйе бар.
Мысалы, таңдалған бөлмеде бірнеше қозғалыс детекторлары орналастырылады (бұл үлгіде үшеуі бар) және олардың әрқайсысы сигналды (1) жібереді, егер ол қозғалысты анықтаса (0). Егер қозғалыс детекторларының кем дегенде біреуі қозғалысты анықтаса, шамдар әлі қосылмаса қосылады және қосулы болса да қосылады. Кез келген уақытта барлық қозғалыс детекторлары ештеңені анықтамайды, таймер белгіленген уақытқа кері санай бастайды (кодпен реттеледі), ал таймер санау кезінде шамдар жанып тұрады. Таймер кері санауды аяқтағаннан кейін таймер тоқтайды, ал шамдар сөнеді. Егер таймер кері санағанда кем дегенде бір қозғалыс детекторы қозғалысты анықтаса, таймер тоқтап, қалпына келеді. Ал егер кем дегенде бір қозғалыс детекторы шамдар сөніп тұрғанда қозғалысты анықтаса, шамдар бірден қосылады.
Бұл жүйеде екі режим бар, олардың біреуі жоғарыда көрсетілген таймермен, екіншісі - шамдарды қолмен басқаратын қосқыш бар (сенсорларды елемей). Негізгі қосқыш бар, ол пайдаланушыға қай режимді пайдаланғысы келетінін таңдауға мүмкіндік береді, олардың қайсысы энергияны үнемдейді деп ойлайды. Мысалы Дәліз сияқты бөлме пассивті таймер режимінен пайда көруі мүмкін- пайдаланушылар адамдардың қашан өтетінін білмейді, бірақ кірген және шыққан сайын шамдарды қосу мен өшіру ыңғайсыздық туғызады. бір адамға арналған жатын бөлмені қолмен басқарған дұрыс. Негізгі коммутатор жатын бөлмесінде тұратын адам ұзақ уақытқа кететін болса, көмекші сөндіргішті өшіруге болады, ал таймер режимі энергияны үнемдеу үшін жұмыс істейтін болады.
Сонымен, бұл жүйеде екі күй машинасы бар, бірі - негізгі күй машинасы, екіншісі - кері санау таймері. Негізгі күй машинасында бес күй бар: 1. «шамдар қосылды, қозғалыс анықталды» (id = 000), 2. «шамдар қосылды, қозғалыс анықталмады» (id = 001), 3. «шамдар сөнді, қозғалыс жоқ анықталды «(id = 010), 4.» қолмен қосылды «(id = 011) және 5.» қолмен өшірілді «(id = 100). Бұл негізгі күй машинасында төрт кіріс бар: негізгі қосқыш (мс), қолмен/қалыпты қосқыш (ns), кем дегенде бір коммутатор қозғалысты анықтағанда жоғары болатын сигнал, ал басқаша төмен (orx) сигнал және таймер аяқталғаннан кейін жоғары, ал басқаша төмен (td). Негізгі мемлекеттік машинаның екі шығысы бар: шамдар (шамдар) және кері санау таймерін (таймер) немесе (t) қашан қосу керектігін көрсететін сигнал (екеуі де бір -бірінің орнына қолданылады).
Екінші күй машинасында, кері санау таймерінде 12 күй бар: олардың 10-ында жеті сегмент көрсететін нөмірге байланысты идентификаторлары бар- «сегмент 10» (id = 1010), «сегмент 9» (id = 1001), […], «Seg 2» (id = 0010), «seg 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) байланысты жүйенің қандай жалпы күйде екенін бақылайды және ол (sm) көрсетілген ағымдағы күйді шығарады, ол екі сигналмен (таймер мен шамдар) жеңілдетілген түрде көрсетілген.
- (таймер) - бұл fsm төмен санауышына оның кірісі ретінде жіберілетін және негізгі fsm ағымдағы күйімен басқарылатын орауыш сигнал. Ол таймерді қашан қосу керектігін көрсетеді.
- (шамдар) - бұл светодиодты басқару үшін қолданылатын және негізгі fsm ағымдағы күйімен басқарылатын орауыш сигнал.
-
Төменгі есептегіш fsm кіріске (таймерге) байланысты жеті сегменттің не көрсететінін басқарады және (td және bin) үшін қолданылатын екі сигналмен оңайлатылған (sd) ағымдағы күйді шығарады.
- (td) - бұл негізгі fsm -ге кіріс ретінде жіберілетін және fsm -дің төмендегі санауышымен басқарылатын орауыш сигнал. Ол таймердің қашан аяқталғанын көрсететін кері байланыс сигналы ретінде қызмет етеді.
- (бин) - бұл төрт бит нөлмен (“0000” & бин) біріктірілген төрт биттік орауыш сигнал және біріктірілген сегіз бит (q) -қа жіберіледі, сегіз биттік орауыш сигнал, ол жетіге жіберіледі сегмент декодері (ALU_VAL) астында.
-
Жеті сегментті модуль Polylearn модулімен бірдей; оның негізгі кірістері (ALU_VAL) 8 биттік нөмірді (ALU_VAL) қабылдайды, сигналды сегменттерге (SEGMENTS) және (DISP_EN) орауышқа (disp_en) шығару арқылы сегіз түрлі сегіз дисплейде көрсету үшін.
- Екі немесе одан да көп жеті сегментті дисплей әр түрлі цифрларды бір мезгілде көрсете алмайтындықтан, төрт сегс бойынша айналу үшін сағат қажет, әрбір қосылатын сигналдың жеке қосылуы үшін сәйкес цифр бір уақытта көрсетіледі, ал велосипед жылдамдығы жеткілікті жылдамдықты қамтамасыз етеді. ssegs бірден қосылатын сияқты.
- (белгі және жарамды) бұл бағдарлама бойынша тұрақты болып табылады, сондықтан (белгісі) тұрақты төмен, ал (жарамды) мәңгілік жоғары болып орнатылады.
- (ALU_VAL) орауыш сигналды (q) кіріс ретінде қабылдайды, ол екілік сегіз сегментті дисплейде көрсетілетін нөмірді білдіреді.
- Шығару (SEGMENTS) сегіз биттік орауыш сигналға (сегм) және (DISP_EN) төрт разрядты орауыш сигналына (disp_en) жіберіледі.
-
Диаграммада нақты көрсетілмеген, бірақ қос модуль үшін субмодуль ретінде қажет және синхронды күйге өтуге көмектесетін D флип -флоп модулі бар.
- (3) олардың негізгі fsm үшін қажет, себебі кодтау үшін 2^(3) = 8> 5 күйі
- (4) бұлар кодтау үшін 2^4 = 16> 12 күйден тұратын fsm төмен есептегіші үшін қажет
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 -ге бұл санау аяқталғанын айтқаннан кейін санауды тоқтатуды айтады.
- Шығу: шамдар = 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)
Шамдар қосылды, қозғалыс детекторлары маңызды емес, сондықтан мс өшірілді, ал ns қосылды.
- Шығу: шамдар = 1 және таймер = 0.
- Ms = 0 және ns = 1 болғанда осы күйде қалады.
- Ms = 0 және ns = 0 болса, «қолмен өшірілген» күйге өтеді.
- «Жарық сөнеді, ms = 1 болса ешқандай қозғалыс анықталмайды.
«Қолмен өшірілген» (id = 100)
Жарық сөндірулі, қозғалыс детекторлары маңызды емес, сондықтан мс өшіріледі, ал ns өшіріледі.
- Шығу: шамдар = 0 және таймер = 0.
- Ms = 0 және ns = 0 болғанда осы күйде қалады.
- Ms = 0 және ns = 1 болса, «қолмен қосылады» күйіне өтеді.
- «Жарық сөнеді, ms = 1 болса ешқандай қозғалыс анықталмайды.
Төмен есептегіште былай делінген:
«10 -бөлім» (id = 1010)
Жеті сегментті дисплейде 10 көрсетіледі.
- Шығу: bin = “1010” және td = 0.
- Таймер = 1 болса, «сегіз 9» күйіне өтеді.
- Таймер = 0 болса, «бос 2» күйіне өтеді.
«9 -бөлім» (id = 1001)
Жеті сегментті дисплейде 9 көрсетіледі.
- Шығу: bin = “1001” және td = 0.
- Таймер = 1 болса, «сегіз сегіздік» күйіне өтеді.
- Таймер = 0 болса, «бос 2» күйіне өтеді.
(«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.
- Таймер = 1 болса, «сегмент 10» күйіне өтеді.
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) ')
Негізгі 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)]
Негізгі 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» деп аталатын шектеу файлы барлық орауыштың кірістері мен шығуларын коммутаторларға, жеті сегментке және Basys 3 тақтасындағы енгізу -шығару порттарына байланыстыру үшін қолданылады. Негізгі қосқыш тақтадағы сымдар қосылған жаққа жақын қосқыш болуы керек, қалыпты/қолмен қосқыш - екінші жақын, ал үш қозғалыс сенсорын білдіретін үш қосқыш - қалыпты қосалқы қосқыштың жанындағы үш қосқыш.. Барлық кодтар (логикалық теңдеулер, модульдік декларациялар және т.
5 -қадам: Жарық диодты енгізу/шығару порттары
Бұл жобаның соңғы қадамы (шамдардың) шынымен қосылатынын немесе өшірілмейтінін көрсету үшін светодиодты пайдалану. Сымдар екі суретте көрсетілген. Өткізгішті күйдірмеу үшін сымды (кемінде 330 Ом) резистордың бар екеніне көз жеткізіңіз және сымның ұзын түйреуішінің қызыл сым көрсетілгендей базис тақтасындағы сол әйел затына қосылғанын тексеріңіз (жоғарыдан) оң жақта) және қысқа түйреуіш жерге қосылған, қара сыммен бірдей әйел тақырыбы (жоғарғы, солдан екінші).
Ұсынылған:
Arduino басқарылатын робот - екі қадам: 13 қадам (суреттермен)
Arduino басқарылатын роботты екіжақты: Мен әрқашан роботтарға қызығатынмын, әсіресе адамның іс -әрекетіне еліктеуге тырысатын. Бұл қызығушылық мені жаяу жүруге және жүгіруге еліктей алатын екіжақты робот құрастыруға және дамытуға талпындырды. Бұл нұсқаулықта мен сізге көрсетемін
Arduino Uno көмегімен акустикалық левитация Қадамдық қадам (8 қадам): 8 қадам
Акустикалық левитация Arduino Uno Қадамдық қадаммен (8-қадам): ультрадыбыстық дыбыс түрлендіргіштері L298N Dc әйелдер адаптерінің ток көзі еркек тоқ сымымен Arduino UNOBreadboard Бұл қалай жұмыс істейді: Біріншіден, сіз кодты Arduino Uno-ға жүктейсіз (бұл сандық жүйемен жабдықталған микроконтроллер) және кодты түрлендіру үшін аналогтық порттар (C ++)
Түймені іске қосатын қадам реттегіші: 4 қадам
Түймені іске қосатын қадам реттегіші:
Тікелей 4G/5G HD бейне ағыны DJI Drone -ден төмен кідірісте [3 қадам]: 3 қадам
Тікелей 4G/5G HD бейне ағыны DJI Drone-ден төмен кідірісте [3 қадам]: Келесі нұсқаулық кез-келген DJI дронынан HD сапалы бейне ағындарын алуға көмектеседі. FlytOS мобильді қосымшасы мен FlytNow веб -қосымшасының көмегімен сіз дроннан бейне ағынды бастай аласыз
Болт - DIY сымсыз зарядтау түнгі сағаты (6 қадам): 6 қадам (суреттермен)
Болт - DIY сымсыз зарядтау түнгі сағаты (6 қадам): Индуктивті зарядтау (сымсыз зарядтау немесе сымсыз зарядтау деп те аталады) - сымсыз қуат беру түрі. Ол портативті құрылғыларды электрмен қамтамасыз ету үшін электромагниттік индукцияны қолданады. Ең көп таралған қолданба - Qi сымсыз зарядтау