Агуулгын хүснэгт:
- Алхам 1: Хар хайрцагны диаграм
- Алхам 2: Төрийн машин
- Алхам 3: Улсын машины үнэний хүснэгт, өдөөх тэгшитгэл, гаралтын тэгшитгэл
- Алхам 4: Боолт, дэд модуль, хязгаарлалт
- Алхам 5: LED -ийн I/O портууд
Видео: L I G H T S: 5 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:04
Энэхүү эцсийн төслийн зорилго нь тогтвортой байдалд анхаарлаа төвлөрүүлж, дижитал дизайны үзэл баримтлалыг хэрэгжүүлэх зорилготой зүйлийг бий болгох явдал байсан бөгөөд үүний тулд би 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 нь долоон сегментийн харуулсан дугаартай холбоотой id-тай байдаг- "сегмент 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 дээрхтэй ижил; Түүний үндсэн оролтууд нь 8 битийн тооноос (ALU_VAL) авах ба дөрвөн өөр долоон сегментийн дэлгэц дээр харуулахын тулд гаралтыг (SEGMENTS) боож боох (seg), (DISP_EN) боож (disp_en) болгоно.
- Хоёр ба түүнээс дээш долоон сегментийн дэлгэц нь өөр өөр цифрүүдийг нэгэн зэрэг харуулах боломжгүй тул дөрвөн сегсийг тойроход цаг хэрэгтэй бөгөөд тус бүрийг тус тусад нь асаахад тохирох цифрийг харуулдаг бөгөөд дугуй унах нь хангалттай хурдан болгодог. ssegs бүгд нэгэн зэрэг ассан бололтой.
- (тэмдэг ба хүчинтэй) нь энэ програмын туршид тогтмол байдаг тул (тэмдгийг) бүрмөсөн бага, (хүчинтэй) -ийг өндөр болгоно.
- (ALU_VAL) нь боолт дохиог (q) оролт болгон авдаг бөгөөд энэ нь долоон сегментийн дэлгэц дээр хоёртын хэлбэрээр харуулах тоог илэрхийлдэг.
- Гаралт (SEGMENTS) нь найман битийн боодлын дохио (seg) болон (DISP_EN) дөрвөн битийн боодлын дохио (disp_en) руу илгээгддэг.
-
Диаграммд тодорхой харуулаагүй D төлөвт флип модуль байдаг бөгөөд энэ нь хоёр төрийн машинд дэд модуль хэлбэрээр шаардлагатай бөгөөд мужийг дамжин өнгөрөхөд синхрон байдлаар тусалдаг.
- (3) эдгээр нь 2^(3) = 8> 5 төлөвт кодчилох тул үндсэн fsm -д хэрэгтэй болно.
- (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)
Гэрэл асаалттай, хөдөлгөөн мэдрэгч нь хамааралгүй тул 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.
- Таймер = 1 бол "сегмент 9" төлөвт орно.
- Таймер = 0 бол "хоосон 2" төлөвт орно.
"9 -р анги" (id = 1001)
Долоон сегментийн дэлгэц нь 9 -ийг харуулдаг.
- Гаралт: bin = “1001” ба td = 0.
- Таймер = 1 бол "сегмент 8" төлөвт орно.
- Таймер = 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 самбар дээрх I/O портуудтай холбоход ашигладаг. Мастер унтраалга нь утаснууд ассан талд хамгийн ойр байрлах самбар дээрх унтраалга байх ёстой, ердийн/гарын унтраалга нь хоёр дахь хамгийн ойр, гурван хөдөлгөөн мэдрэгчийг төлөөлж буй гурван унтраалга нь ердийн/гарын унтраалгын хажууд байрладаг гурван унтраалга байх ёстой.. Бүх кодыг (логик тэгшитгэл, модулийн мэдэгдэл гэх мэт) файлд аль хэдийн бичсэн байгаа тул үүнийг ажиллуулахын тулд өөр зүйл бичих шаардлагагүй болно.
Алхам 5: LED -ийн I/O портууд
Энэхүү төслийн хамгийн сүүлийн алхам бол гэрлийг асаах, унтраах эсэхийг харуулахын тулд LED ашиглах явдал юм. Утасны холболтыг хоёр зураг дээр харуулав. Утасыг шатаахгүйн тулд 3 -аас доошгүй ом -ийн эсэргүүцэлтэй резистор байгаа эсэхийг шалгаарай, улаан утсыг харуулсан тул урт зүү нь үндсэн самбар дээрх ижил эмэгтэй толгойтой холбогдсон эсэхийг шалгаарай. хамгийн баруун талд) ба богино зүү нь хар утсан дээрх ижил эмэгтэй толгойтой (дээд, зүүнээс хоёр дахь) газарт холбогдсон байна.
Зөвлөмж болгож буй:
Ухаалаг мотоциклийн HUD прототип (алхам алхмаар навигаци хийх гэх мэт): 9 алхам
Ухаалаг мотоциклийн HUD прототип (ээлжлэн навигаци хийх гэх мэт): Сайн байна уу! Энэхүү зааварчилгаа нь миний мотоциклийн дуулга дээр суурилуулах зориулалттай HUD (Heads-Up Display) платформыг хэрхэн бүтээж, бүтээсэн тухай түүх юм. Үүнийг " газрын зураг " уралдааны хүрээнд бичсэн болно. Харамсалтай нь би үүнийг бүрэн дуусгаж чадаагүй
Arduino машины урвуу зогсоолын дохиоллын систем - Алхам алхамаар: 4 алхам
Arduino машины урвуу зогсоолын дохиоллын систем | Алхам алхамаар: Энэ төсөлд би Arduino UNO болон HC-SR04 хэт авианы мэдрэгч ашиглан Arduino автомашины урвуу зогсоолын мэдрэгчийн энгийн хэлхээг зохион бүтээнэ. Энэхүү Arduino дээр суурилсан Автомашины Урвуу дохиоллын системийг бие даасан навигаци, роботын хүрээ болон бусад хүрээний зориулалтаар ашиглаж болно
Алхам алхамаар PC -ийн барилга: 9 алхам
Алхам алхамаар PC барилга: хангамж: хангамж: техник хангамж: MotherboardCPU & CPU хөргөгч PSU (Цахилгаан хангамжийн хэсэг) Хадгалалт (HDD/SSD) RAMGPU (шаардлагагүй) Кейс Хэрэгсэл: Халив ESD бугуйвч/матстермал оо
Arduino Uno ашиглан акустик левитаци Алхам алхам (8 алхам): 8 алхам
Arduino Uno-тай акустик Levitation Алхам алхамаар (8 алхам): хэт авианы дууны дамжуулагч L298N Dc эмэгтэй адаптерийн эрэгтэй тэжээлийн тэжээлийн хангамж Arduino UNOBreadboard Энэ нь хэрхэн ажилладаг вэ: Нэгдүгээрт, та кодыг Arduino Uno-д байршуулдаг (энэ нь дижитал төхөөрөмжөөр тоноглогдсон микроконтроллер юм. кодыг хөрвүүлэх аналог портууд (C ++)
DIY Arduino робот гар, Алхам алхам: 9 алхам
DIY Arduino робот гар, алхам алхмаар: Эдгээр заавар нь танд робот гарыг хэрхэн яаж хийхийг зааж өгөх болно