Агуулгын хүснэгт:

3-р хэсэг: GPIO: ARM-ийн угсралт: мөр дагагч: TI-RSLK: 6 алхам
3-р хэсэг: GPIO: ARM-ийн угсралт: мөр дагагч: TI-RSLK: 6 алхам

Видео: 3-р хэсэг: GPIO: ARM-ийн угсралт: мөр дагагч: TI-RSLK: 6 алхам

Видео: 3-р хэсэг: GPIO: ARM-ийн угсралт: мөр дагагч: TI-RSLK: 6 алхам
Видео: ПОЧЕМУ Я ЖДУ L4D3 2024, Долдугаар сарын
Anonim
Image
Image
Тоног төхөөрөмж
Тоног төхөөрөмж

Сайн уу. Энэ бол ARM угсралтыг үргэлжлүүлэн ашиглах дараагийн хэсэг юм (дээд түвшний хэлний оронд). Энэхүү зааварчилгааны сэдэл бол Texas Instruments Robotics System Learning Kit 6-р лаборатори буюу TI-RSLK юм.

Бид иж бүрдэл болох MSP432 LaunchPad -ийн хөгжүүлэлтийн самбараас микроконтроллерийг ашиглах болно, гэхдээ та LaunchPad -ийг ашиглаагүй эсвэл T. I -г дагаж мөрдөөгүй байсан ч гэсэн энэхүү зааварчилгаанаас авах хэрэгтэй зүйлийг олж магадгүй юм. сургалтын хөтөлбөр.

Бид гарын авлагын ассемблей, хөгжлийн орчин, төсөл хэрхэн хийх талаар танилцуулахаас эхэллээ.

Дараагийн гарын авлагын талаархи зааварчилгаа нь оролт/гаралттай (GPIO) хэрхэн харьцах талаар танилцуулав.

Дараа нь бид мэдлэгээ өргөжүүлж, LED болон унтраалгыг хянах функцуудыг нэвтрүүлсэн.

Энэхүү зааварчилгааны тусламжтайгаар бид сурч мэдсэн зүйлээ ашиглан илүү хөгжилтэй, илүү ашигтай зүйлийг хийж болно: шугамыг илрүүлэх.

Энэ нь дараа нь шугам дагагч робот бүтээхэд бидэнд туслах болно.

Сургалтын хөтөлбөрт ихэнх програмчлал нь C эсвэл C ++ хэл дээр хийгддэг боловч дээд түвшний хэл, номын сангаас хамаарч эхлэхээсээ өмнө угсрах ажилтай танилцах нь тустай байдаг.

Алхам 1: Тоног төхөөрөмж

Тоног төхөөрөмж
Тоног төхөөрөмж
Тоног төхөөрөмж
Тоног төхөөрөмж
Тоног төхөөрөмж
Тоног төхөөрөмж

Тоног төхөөрөмжийг нарийвчлан сэргээмээргүй байна, учир нь аль хэдийн эх сурвалжууд байгаа боловч шаардлагатай бол бид тайлбарыг нэмж оруулах болно.

Энэхүү зааварчилгааны хувьд бид Tolo-RSLK (роботын иж бүрдэл) -ийн нэг хэсэг тул Полулугийн тусгал мэдрэгчийн массивыг ашиглах болно. Энэ нь сургалтын хөтөлбөрийн 6 -р лабораторид хэрэглэгддэг хичээл юм.

Хэрэв танд ийм зүйл байхгүй бол та байхгүй эсвэл байхгүй тохиолдолд дижитал дохио болох HIGH эсвэл LOW -ийг гаргадаг IR мэдрэгч (эсвэл тэдгээрийн цуврал) ашиглаж болно.

Массив мэдрэгч нь хамгийн сайн арга юм, учир нь энэ нь бид шугамын төвд эсвэл нэг талдаа байгаа эсэхийг тодорхойлоход тусална. Үүнээс гадна, энэ нь роботыг шугамын өнцгийг тодорхойлоход бидэнд туслах болно.

Цацруулагч массив нь детекторуудтай маш ойрхон байрладаг. Энэ нь мэдээж шугамын зузаанаас хамааран олон илрүүлэх дохиог авах ёстой гэсэн үг юм.

Хэрэв тийм бол, хэрэв робот шугамтай шууд холбогдоогүй бол шугам нь байх ёстой хэмжээнээсээ илүү өргөнтэй гаралтыг буцааж өгөх ёстой (учир нь бид өнцөгт байгаа).

Дээрх зүйлсийг илүү сайн тайлбарлахын тулд Lab 6 баримт бичгийг үзнэ үү.

Мэдрэгчийг MSP432 LaunchPad хөгжүүлэлтийн самбарт холбох / холбох талаар тусламж авахын тулд зарим хэрэгтэй зааврыг энд оруулав.

Би энэ алхамд ижил (ижил төстэй) pdf зааврыг нэмж оруулсан болно.

Хэрэв та Pololu -ийн баримт бичгийг анхааралтай уншвал тэд "3.3V тойрог зам" -ын шалтгааныг тайлбарлаж байгаа бөгөөд хэрэв та 5V -ийн оронд 3.3V ашигладаг бол та үсрэх хэрэгтэй болно.

Бид роботыг хараахан бүтээгээгүй байгаа боловч оронд нь бид зөвхөн ARM -ийн угсралт, роботын хэсгүүдтэй (дэд системүүд) хэрхэн харьцах талаар сурч байгаа тул дээрх зааврыг дагаж мөрдөх шаардлагагүй болно.

Одоогийн байдлаар шугамын мэдрэгчийн массивыг холбох нь дараах байдлаар буурч байна.

  • 3.3V ба GND -ийг MSP432 самбараас мэдрэгчийн массивт холбоно уу.
  • MSP432 -аас порт мэдрэгчийг (би P5.3 санал болгож байна) шугам мэдрэгчийн массив дээрх LED идэвхжүүлэх зүү рүү холбоно уу. Мэдрэгч дээрх зүү нь 3.3V ба GND хооронд байна.
  • Нэг портын бүх найман зүү/битийг (P7.0 -ээс P7.7 хүртэл санал болгож байна) "1" -ээс "8" хүртэл тэмдэглэгдсэн мэдрэгчийн массивын найман зүү рүү холбоно уу. Эдгээр нь юу мэдэрч байгаагаасаа хамааран өндөр эсвэл доогуур байх шугамууд юм.

Энэ алхам болон видеон дээрх зургуудаас харахад би мэдрэгчийг роботын явах эд анги руу залгаагүй, учир нь би програмчлах, дибаг хийх, турших, сурахад хялбар байхыг хүсч байсан.

Тиймээс бүх зүйл холбогдсон тул бид програм хангамж руу ороход бэлэн байна.

Алхам 2: мөрийг дагах

Мөр дагаж байна
Мөр дагаж байна
Мөр дагаж байна
Мөр дагаж байна

Цацруулагч массив мэдрэгч нь маш гоёмсог, учир нь энэ нь дор хаяж хоёр аргаар туслах боломжтой юм.

  • Тодорхойлох нь робот нь шугам дээр төвлөрч эсвэл нэг тал руугаа хазайж байгааг тодорхойлно.
  • Робот шугамын чиглэлд зэрэгцсэн үү, эсвэл өнцгөөр үү?

Массивын детектор бүр үндсэндээ HIGH эсвэл LOW гэсэн нэг л мэдээллийг өгдөг.

Гол санаа бол эдгээр бүх битүүдийг нэг тоо эсвэл ганц битийн загвар болгон нэгтгэж, энэ загварыг ашиглан шийдвэр гаргахад (зөв хөдөлөхийн тулд) ашиглах явдал юм.

Алхам 3: Бид үнэхээр эхлэхээс өмнө…

.. бид ARM угсрах програмчлалын талаар шинэ зүйл сурах хэрэгтэй. Би зүгээр л өөр зааварчилгаа хэлээд байгаа юм биш. Эдгээр нь насанд хүрээгүй байх хандлагатай байдаг.

Өнөөг хүртэл бид програмууддаа "стек" -ийг ашиглаагүй байна.

Дэлхий даяар өөр өөр дэд програмуудын ихэнх cpu бүртгэлийг ашиглахад бид найдаж байна.

Бидний хийсэн цорын ганц зүйл бол LR (холбоосын бүртгэл) хаягийг өөр функцийг дуудаж хадгалж, сэргээх явдал байв. (Би энд "функц" ба "дэд програм" -ыг хооронд нь сольж хэрэглэдэг).

Бидний хийж байсан зүйл тийм ч сайн биш байна. Хэрэв бид бусад функцийг үүрлэхийг хүсч байвал яах вэ? Хэрэв бид нэгээс илүү түвшний үүрлэх бол яах вэ?

Өмнөх жишээнүүдэд бид R6 регистрийг LR эсвэл буцах хаягийн хадгалах сан болгон ашиглахаар сонгосон. Гэхдээ хэрэв бид илүү гүнзгий үүрлэхийг хүсч байвал R6 -ийн утгыг үргэлжлүүлэн өөрчлөх боломжгүй болно. Бид өөр бүртгэлийг сонгох шаардлагатай болно. Бас өөр. Тэгээд дараа нь ямар үндсэн cpu бүртгэлд аль LR функцийг сэргээхийг хянах шаардлагатай болно.

Тиймээс одоо бид "стек" -ийг авч үзье.

Алхам 4: Стек

Стекийг тайлбарласан зарим унших материалыг энд оруулав.

Би хэд хэдэн санааг томоор дэмжиж байна.

  • зөвхөн онолын хувьд шаардлагатай бол практик дээр хурдан очоорой
  • Шаардлагатай бол сурч, зүгээр л зорилгогүй дасгал, жишээгээр бус харин ямар нэгэн зүйл хийхэд анхаарлаа төвлөрүүл.

Утасны талаар ярьдаг олон тооны ARM болон MSP432 баримтууд байдаг тул бүгдийг дахин сэргээхгүй. Би энд стекийн хэрэглээг хамгийн бага хэмжээнд байлгах болно - буцах хаягийг хадгалах (Холболтын бүртгэл).

Үндсэндээ бидэнд зөвхөн зааварчилгаа өгөх шаардлагатай байна.

PUSH {бүртгэлийн жагсаалт}

POP {бүртгэлийн жагсаалт}

Эсвэл манай тохиолдолд, ялангуяа:

{LR} ДАРАХ

POP {LR}

Тиймээс угсрах функц/дэд програм дараах байдлаар харагдах болно.

funcLabel:.asmfunc

PUSH {LR}; энэ нь нэвтрэх анхны зааврын нэг байх ёстой.; энд илүү их код бичээрэй..; бла бла бла…; За, бид функцийг дуусгав, POP {LR} дуудлагын функц руу буцаж очиход бэлэн байна; энэ нь зөв буцах хаягийг дуудлага руу буцаана; функц. BX LR; буцах.endasmfunc

Видео нь хэд хэдэн үүртэй функцүүдийн амьд жишээгээр дамждаг.

Алхам 5: Програм хангамж

"MSP432_Chapter …" гэсэн хавсаргасан файл нь MSP432 портуудын талаар маш сайн мэдээлэл агуулдаг бөгөөд энэ баримт бичгээс бид дараах портууд, регистрүүд, хаяг гэх мэтийг олж авдаг. Гэсэн хэдий ч, Порт 5 ба түүнээс дээш тооны нарийвчилсан хаягийг би хараагүй. (зөвхөн "өөр функцууд"). Гэхдээ энэ нь ашигтай хэвээр байна.

Бид хоёр портыг ашиглах гэж байна. P5, P7, P1, P2.

P5.3 (нэг бит) гаралт нь мэдрэгч дээрх IR LED идэвхжүүлэлтийг хянах болно. Бид P5.3 -ийг ашиглаж байна, учир нь энэ нь мэдрэгчийн массив руу орох бусад MSP432 холболттой ижил толгой дээрх зүү юм.

P7.0 - P7.7 нь мэдрэгчээс мэдээлэл цуглуулдаг найман оролт байх болно; юу "хардаг" вэ.

P1.0 бол цорын ганц улаан LED бөгөөд бид үүнийг ашиглан өгөгдлийн зарим заалтыг өгч болно.

P2.0, P2.1, P2.2 бол RGB LED бөгөөд бид үүнийг өөр өөр өнгөний сонголттойгоор мэдрэгчийн өгөгдлийг зааж өгөх боломжтой.

Хэрэв та энэ бүхэнтэй холбоотой өмнөх зааварчилгааг үзсэн бол та програмыг хэрхэн тохируулахаа аль хэдийн мэддэг болсон.

Порт, бит гэх мэт мэдүүлгийн хэсэгтэй байхад л болно.

Танд "үндсэн" хэсэг байх болно.

Бид P7 -ийн өгөгдлийг тасралтгүй уншиж, тухайн өгөгдлийг шийдвэрлэж, хоёр LED -ийг гэрэлтүүлж байх ёстой.

Боомтын бүртгэлийн хаягууд энд байна.

  • GPIO P1: 0x4000 4C00 + 0 (тэгш хаяг)
  • GPIO P2: 0x4000 4C00 + 1 (сондгой хаяг)
  • GPIO P3: 0x4000 4C00 + 20 (тэгш хаяг)
  • GPIO P4: 0x4000 4C00 + 21 (сондгой хаяг)
  • GPIO P5: 0x4000 4C00 + 40 (тэгш хаяг)
  • GPIO P6: 0x4000 4C00 + 41 (сондгой хаяг)
  • GPIO P7: 0x4000 4C00 + 60 (тэгш хаяг)
  • GPIO P8: 0x4000 4C00 + 61 (сондгой хаяг)
  • GPIO P9: 0x4000 4C00 + 80 (тэгш хаяг)
  • GPIO P10: 0x4000 4C00 + 81 (сондгой хаяг)

Зоригтой зүйл бол энэ зааварчилгаанд бид ашиглах болно.

IR детекторыг унших програмын алхамууд

Дараахь програмыг C хэл дээр бичихэд зориулагдсан psuedo-код боловч энэ нь ашиг тустай хэвээр байгаа бөгөөд бид үүнийг програмын угсралтын хувилбарт маш нарийн дагаж мөрдөх болно.

үндсэн програм 0) // портуудыг эхлүүлэх үед (1) {1) P5.3 -ийг өндөр болгох (IR LED -ийг асаах) 2) P7.0 -ийг гаралт болгож өндөр болгож тохируулах (конденсаторыг цэнэглэх) 3) 10 биднийг хүлээж байгаарай, Clock_Delay1us (10); 4) P7.0 -ийг оролт болгох 5) Энэ хүрдийг 10 000 удаа ажиллуулах a) P7.0 -ийг унших (P7.0 дээрх хүчдэлийг хоёртын формат руу хөрвүүлэх) b) Хоёртын гаралтыг P1.0 болгох (хоёртын файлыг бодит цаг хугацаанд харах боломжийг танд олгоно)) 6) P5.3 -ийг бага байлгах (IR LED -ийг унтрааж, эрчим хүч хэмнэх) 7) 10 ms хүлээнэ үү, Clock_Delay1ms (10); } // давтах (while руу буцах ())

Алхам 6: Кодоо сайжруулъя

Pololu IR LED массивын зорилго эсвэл хэрэглээ нь шугамыг илрүүлэх, робот (ирээдүй) шууд шугам дээр төвлөрсөн эсвэл нэг талдаа байгаа эсэхийг мэдэх явдал юм. Түүнчлэн, шугам нь тодорхой зузаантай тул мэдрэгчийн массив нь шугаманд шууд перпендикуляр байвал N тооны мэдрэгч нь бусад хэсгээс өөр уншилттай байх болно, харин IR LED массив нь ямар нэгэн өнцөгт (перпендикуляр биш) байвал N+1 эсвэл N+2 IR LED/детекторын хосууд одоо өөр уншилт өгөх ёстой.

Тиймээс, хичнээн олон мэдрэгч нь шугам байгааг харуулж байгаагаас хамааран бид төвд байгаа эсэх, бид өнцөгт байгаа эсэхээ мэдэх ёстой.

Энэхүү эцсийн туршилтыг хийхийн тулд улаан LED болон RGB LED -ийг авч мэдрэгчийн массив бидэнд юу хэлж байгаа талаар илүү их мэдээлэл өгөх боломжтой эсэхийг харцгаая.

Видео бичлэг дээр бүх нарийн ширийн зүйлийг оруулсан болно. Эцсийн кодыг мөн хавсаргасан болно.

Энэ нь GPIO -той холбоотой ARM Assembly цувралыг дуусгасан болно. Хожим нь илүү олон ARM Ассамблейтай буцаж ирнэ гэж найдаж байна.

Баярлалаа.

Зөвлөмж болгож буй: