Мазмуну:

3-бөлүк: GPIO: ARM Ассамблеясы: Line Follower: TI-RSLK: 6 Steps
3-бөлүк: GPIO: ARM Ассамблеясы: Line Follower: TI-RSLK: 6 Steps

Video: 3-бөлүк: GPIO: ARM Ассамблеясы: Line Follower: TI-RSLK: 6 Steps

Video: 3-бөлүк: GPIO: ARM Ассамблеясы: Line Follower: TI-RSLK: 6 Steps
Video: Raspberry Pi 3: обзор, первое включение, настройка – Часть 1 2024, Ноябрь
Anonim
Image
Image
Аппараттык
Аппараттык

Салам. Бул ARM курамын колдонууну улантуучу кийинки бөлүк (жогорку деңгээлдеги тилдин ордуна). Бул көрсөтмө үчүн илхам Техас инструменттери робототехника системасынын окуу лабораториясынын 6-лабораториясы же TI-RSLK болуп саналат.

Биз комплекттен, MSP432 LaunchPad өнүктүрүү тактасынан микроконтроллерди колдонобуз, бирок, балким, сиз LaunchPadты колдонбосоңуз да, же TIге баш ийбесеңиз да, бул Нускамадан пайдалуу нерсени таба аласыз. окуу планы.

Биз ARM Ассамблеясын, өнүгүү чөйрөсүн жана долбоорду кантип жасоону Инструктивдүү киргизүү менен баштадык.

Кийинки ARM Ассамблеясынын Инструкциясы кирүү/чыгаруу (GPIO) менен кантип өз ара аракеттенүүнү тааныштырды.

Андан кийин биз билимибизди кеңейтип, функцияларды киргиздик, светодиоддорду жана өчүргүчтөрдү башкардык.

Эми бул Instructable менен биз үйрөнгөн нерселерибизди колдонуп, кызыктуу жана пайдалуу нерселерди жасай алабыз: сызыкты аныктоо.

Бул бизге кийинчерээк линияны ээрчиген роботту курууга жардам берет.

Окуу программасында программалоонун көбү C же C ++ тилинде жүргүзүлөт, бирок биз жогорку деңгээлдеги тилдерге жана китепканаларга жараша баштоо алдында монтаж менен таанышуу пайдалуу.

1 -кадам: Аппараттык

Аппараттык
Аппараттык
Аппараттык
Аппараттык
Аппараттык
Аппараттык

Аппаратты деталдуу түрдө кайра калыбына келтиргим келбейт, анткени булактары бар, бирок биз зарыл болгон жерде түшүндүрмөлөрдү кошобуз.

Бул көрсөтмө үчүн, биз Полулудагы чагылтуу сенсорунун массивин колдонобуз, анткени ал TI-RSLK (робот комплект) бир бөлүгү катары келет. Бул сабакта жана окуу программасынын 6 -лабораториясында колдонулат.

Эгер сизде андай жок болсо, анда сиз бар же жок үчүн санариптик сигналды ЖОК же ТӨМ чыгаруучу IR детекторун (же алардын сериясын) колдоно аласыз.

Массив сенсору эң жакшы, анткени ал сызыктын так ортосунда экенибизди же бир тарапка кеткенибизди аныктоого жардам берет. Андан тышкары, кийинчерээк көрө турганыбыздай, бул роботтун линияга карата бурчун аныктоого жардам берет.

Чагылтуу массивинде детекторлор бири -бирине абдан жакын. Бул, албетте, линиянын жоондугуна жараша, биз бир нече аныктоочу сигналдарды алышыбыз керек дегенди билдирет.

Эгер ошондой болсо, анда эгер робот түз сызыкка кирбесе, анда ал сызыктын кененирээк болушун кайтарышы керек (анткени биз бурчта турабыз).

Жогорудагыларды жакшыраак түшүндүрүү үчүн Lab 6 документин карап көрүңүз.

Сенсорду MSP432 LaunchPad өнүктүрүү тактасына туташтырууда / туташтырууда жардам алуу үчүн бул жерде кээ бир пайдалуу көрсөтмөлөр бар.

Мен дагы ушул кадамга окшош (окшош?) Pdf көрсөтмөлөрүн коштум.

Эгерде сиз Pololu документтерин кунт коюп окусаңыз, алар "3.3V айланып өтүүнүн" себебин түшүндүрүшөт, эгер сиз 5V эмес, 3.3V колдонуп жатсаңыз, секиргиңиз келет.

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

Азырынча линия сенсорунун массивин туташтыруу төмөндөгүдөй төмөндөйт:

  • 3.3V жана GNDди MSP432 тактасынан сенсор массивине туташтырыңыз.
  • порттун пинин (мен P5.3 сунуштайм) MSP432ден сызык сенсорунун массивиндеги LED иштетүүчү пинге туташтырыңыз. Бул сенсордогу пин 3.3V менен GND ортосунда.
  • бир порттун бардык сегиз казыгын/битин туташтырыңыз (мен P7.0ден P7.7ге чейин сунуштайм) "1" ден "8" ге чейин белгиленген сенсор массивинин сегиз казыгына туташтырыңыз. Бул сезгенине жараша БИЙИК же ТӨМӨН бара турган саптар.

Бул кадамдын сүрөттөрүндө жана видеодо көрүнүп тургандай, мен сенсорду роботтун шассисине тиркеген жокмун, анткени мен программалоо, мүчүлүштүктөрдү оңдоо, тестирлөө, үйрөнүүнү кааладым.

Ошентип, баары туташкандыктан, биз программалык камсыздоого кирүүгө даярбыз.

2 -кадам: Линияны ээрчүү

Сызык ээрчийт
Сызык ээрчийт
Сызык ээрчийт
Сызык ээрчийт

Рефлексия массивинин сенсору абдан жарашыктуу, анткени ал жок дегенде эки жол менен жардам бере алат.

  • Аныктоо - бул роботтун борборунда же бир жакка кетип бара жатканында.
  • Робот сызыктын багытына туураланганбы же бурчтабы.

Массивдин детекторлорунун бардыгы бир же бир аз маалыматты камсыз кылат, же ЖОГОРУ же ТӨМӨН.

Идея ошол биттердин бардыгын бир санга же бирдиктүү үлгүгө бириктирүү жана ошол калыпты чечим кабыл алуу үчүн колдонуу (туура кыймылдоо үчүн).

3 -кадам: Чынында баштаардан мурун …

.. биз ARM монтаждоо программалоо жөнүндө жаңы нерсени үйрөнүшүбүз керек. Мен жөн эле башка көрсөтмө деген жокмун. Булар кичинекей болуп калышат.

Азырынча биз программаларыбызда "стекти" колдоно элекпиз.

Биз ар кандай чакан программалар боюнча дүйнө жүзү боюнча негизги CPU реестрлеринин көпчүлүгүн колдонууга таяндык.

Биз жасаган бир нерсе - LR (шилтеме регистр) дарегин бир функция үчүн сактоо жана калыбына келтирүү - бир нече башка функцияларды чакырган. (Мен бул жерде "функция" менен "подпрограмманы" алмаштырып колдоном).

Биз кылып жаткан нерсе жакшы эмес. Башка функцияларды уя кылгыбыз келсечи? Эгерде бизде бир нече деңгээлде уя салуу болсочу?

Мурунку мисалдарда, биз LR же кайтаруу дареги үчүн сактоочу катары R6 регистрин колдонууну чечтик. Бирок, эгер биз мындан ары/терең уя салууну кааласак, анда R6 баасын өзгөртүүнү уланта албайбыз. Биз дагы бир реестрди тандашыбыз керек. Жана башка. Анан кайсы негизги CPU реестри LR кайсы функцияга калыбына келерин көзөмөлдөп туруу оор болуп калат.

Эми биз "стекти" карап чыгабыз.

4 -кадам: Стек

Бул жерде стекти түшүндүргөн кээ бир окуу материалдары бар.

Мен бир нече идеялардын чоңураак жактоочусумун:

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

Интернетте стек жөнүндө сүйлөшкөн көптөгөн ARM жана MSP432 документтери бар, ошондуктан мунун бардыгын кайра калыбына келтирүүгө болбойт. Мен ошондой эле стекти колдонууну минимумга чейин сактап калам - кайтаруу дарегин сактоо (Шилтеме Реестри).

Негизи, бизге көрсөтмөлөр гана керек:

PUSH {регистр тизмеси}

POP {реестр тизмеси}

Же, биздин учурда, атап айтканда:

{LR} басуу

POP {LR}

Ошентип, чогултуу функциясы/подрограммасы мындай көрүнөт:

funcLabel:.asmfunc

PUSH {LR}; бул, балким, кирүү боюнча биринчи көрсөтмөлөрдүн бири болушу керек.; бул жерде көбүрөөк код жаса..; бла-бла-бла…; макул, биз функцияны бүттүк, кайра POP {LR} функциясына кайтууга даярбыз; бул туура кайтаруу дарегин кайра чалууга кайтарат; функция. BX LR; return.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 светодиод жана биз муну сенсордук маалыматтын көрсөтмөсүн берүү үчүн ар кандай түстүү мүмкүнчүлүктөрү менен колдоно алабыз.

Эгерде сиз буга чейинки бардык көрсөтмөлөрдөн өткөн болсоңуз, анда сиз программаны кантип орнотууну билесиз.

Порттор жана биттер үчүн декларация бөлүмү бар, ж.

Сизде "негизги" бөлүм бар.

Биз 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) Initialize // ports while (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 Ассамблеясынын сериясын аяктайт. Кийинчерээк дагы ARM Ассамблеясы менен кайтып келебиз деп үмүттөнөбүз.

Рахмат.

Сунушталууда: