Съдържание:

Част 3: GPIO: ARM Монтаж: Line Follower: TI-RSLK: 6 стъпки
Част 3: GPIO: ARM Монтаж: Line Follower: TI-RSLK: 6 стъпки

Видео: Част 3: GPIO: ARM Монтаж: Line Follower: TI-RSLK: 6 стъпки

Видео: Част 3: GPIO: ARM Монтаж: Line Follower: TI-RSLK: 6 стъпки
Видео: Raspberry Pi 3 Model B +. Часть 3. Установка OS. 2024, Юли
Anonim
Image
Image
Хардуерът
Хардуерът

Здравейте. Това е следващата вноска, в която продължаваме да използваме ARM монтаж (вместо език от по-високо ниво). Вдъхновението за този Instructable е Lab 6 от Комплектът за обучение по роботика на Texas Instruments, или TI-RSLK.

Ще използваме микроконтролера от комплекта, платката за разработка на MSP432 LaunchPad, но може би ще намерите нещо полезно за извличане от тази инструкция, дори ако не използвате LaunchPad или следвате T. I. учебна програма.

Започнахме с Instructable, представящ ARM Assembly, средата за развитие и как да направим проект.

Следващият Instructable на ARM Assembly въведе как да взаимодейства с вход/изход (GPIO).

След това разширихме знанията си и въведохме функции, управляващи светодиоди и ключове.

Сега с този Instructable можем да използваме наученото, за да направим нещо по -забавно, по -полезно: откриване на линия.

Това може да ни помогне по-късно, когато изградим робот за последователи на линии.

В учебната програма по-голямата част от програмирането се извършва на C или C ++, но е полезно да се запознаете с асемблирането, преди да започнем в зависимост от езиците от по-високо ниво и библиотеките.

Стъпка 1: Хардуерът

Хардуерът
Хардуерът
Хардуерът
Хардуерът
Хардуерът
Хардуерът

Не искам да преразглеждам хардуера в детайли, тъй като вече има източници, но ще добавим обяснения, където е необходимо.

За този Instructable ще използваме матрица от сензори за отражение от Pololu, тъй като идва като част от TI-RSLK (комплектът за роботи). Той е този, който се използва в курса и в Лаборатория 6 от учебната програма.

Ако нямате това, можете да използвате всеки IR детектор (или серия от тях), който извежда цифров сигнал, ВИСОК или НИСКИ, за присъствие и отсъствие.

Сензорът за масива е най -добрият, защото може да помогне за откриване дали сме точно в центъра на линията или сме на една страна. Освен това, както ще видим по -късно, може да ни помогне да открием ъгъла на робота по отношение на линията.

Рефлекторната решетка има детектори много близо един до друг. Това означава, че трябва да получим множество сигнали за откриване, в зависимост разбира се от дебелината на линията.

Ако е така, тогава ако роботът не е директно в линия с линията, тогава той трябва да върне изход, че линията е по -широка, отколкото трябва да бъде (защото сме под ъгъл).

За по -добро обяснение на горното, погледнете документа Lab 6.

За помощ при свързването / свързването на сензора към платката за разработка на MSP432 LaunchPad, ето няколко полезни инструкции.

Също така добавих същите (подобни?) Pdf инструкции към тази стъпка.

Ако внимателно прочетете документите на Pololu, те обясняват причината за "3.3V байпас", че ще искате да прекъснете, ако използвате 3.3V вместо 5V.

Тъй като все още не изграждаме робота, а само учим за сглобяването на ARM и също как да взаимодействаме с части (подсистеми) на робота, не е нужно да следваме горните инструкции.

Засега свързването на линейния сензорен масив просто се вари/намалява до следното:

  • свържете 3.3V и GND от платката MSP432 към сензорния масив.
  • свържете порт -щифт (предлагам P5.3) от MSP432 към щифта за активиране на LED на масива от линейни сензори. Този щифт на сензора е между 3.3V и GND.
  • свържете всички осем пина/бита на един порт (предлагам P7.0 до P7.7) към осемте пина на сензорния масив, обозначен с "1" до "8". Това са линиите, които ще отидат ВИСОКИ или НИСКИ в зависимост от това, което усещат.

Както можете да видите в изображенията на тази стъпка и във видеото, не прикрепих сензора към шасито на робота, защото исках лекота на програмиране, отстраняване на грешки, тестване, учене.

Така че с всичко свързано, ние сме готови да влезем в софтуера.

Стъпка 2: Следване на реда

Следване на ред
Следване на ред
Следване на ред
Следване на ред

Сензорът за матрица на отразяване е доста изящен, защото може да помогне по поне два начина.

  • Определете дали роботът е центриран на линия или се отклонява на една страна.
  • Дали роботът е подравнен по посоката на линията или е под ъгъл.

Всеки от детекторите на масива по същество предоставя един бит информация, ВИСОК или НИСКИ.

Идеята е да комбинирате всички тези битове в едно число или единичен битов модел и да използвате този модел за вземане на решения (за да се движите правилно).

Стъпка 3: Преди да започнем наистина…

.. трябва да научим нещо ново за програмирането на ARM монтаж. И нямам предвид само друга инструкция. Те обикновено са незначителни.

Досега не сме използвали „стека“в нашите програми.

Ние разчитахме на използването на повечето от основните регистърни процесори в световен мащаб в различни подпрограми.

Единственото нещо, което направихме, беше да запазим и възстановим адреса на LR (регистър на връзката) за една функция - тази, която извика няколко други функции. (Тук използвам „функция“и „подпрограма“взаимозаменяемо).

Това, което правим, не е добро. Ами ако искаме да вложим други функции? Ами ако имаме повече от едно ниво на гнездене?

В предишните примери избрахме да използваме регистър R6 като място за съхранение на LR или адрес за връщане. Но ако искаме да направим по -нататъшно/по -дълбоко влагане, не можем да продължим да променяме стойността на R6. Ще трябва да изберем друг регистър. И друг. И тогава става натоварващо да се следи кой регистър на основния процесор притежава кой 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 е единичният червен светодиод и бихме могли да го използваме, за да ни даде някои индикации за данните.

P2.0, P2.1, P2.2 е RGB LED и можем да го използваме, с различните му възможности за цвят, за да ни даде индикация за данните от сензора.

Ако сте преминали през предишните инструкции, свързани с всичко това, тогава вече знаете как да настроите програмата.

Просто има раздел за декларация за портовете и битовете и т.н.

Ще имате "основна" секция.

Трябва да има цикъл, при който ние непрекъснато четем данните от P7, вземаме решение за тези данни и съответно светваме двата светодиода.

Тук отново са адресите на Port Register:

  • 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 детектори

По-долу е psuedo-код за писане на програмата на C, но все още е полезен и ще го следваме доста внимателно в асемблерната версия на програмата.

основна програма0) Инициализирайте // портове, докато (1) {1) Задайте P5.3 високо (включете IR LED) 2) Направете P7.0 изход и го настройте високо (зареждане на кондензатора) 3) Изчакайте 10 us, Clock_Delay1us (10); 4) Направете P7.0 вход 5) Изпълнете този цикъл 10 000 пъти а) Прочетете P7.0 (преобразува напрежението на P7.0 в двоично)) 6) Задайте нисък P5.3 (изключете IR LED, пестете енергия) 7) Изчакайте 10 ms, Clock_Delay1ms (10); } // повторение (обратно към while ())

Стъпка 6: Нека подобрим кода

Целта или употребата на Pololu IR LED матрицата е да открие линия и да разбере дали роботът (бъдещето) е директно центриран по линията или на една страна. Също така, тъй като линията има определена дебелина, ако сензорният масив е директно перпендикулярен на линията, N брой сензори ще имат различно отчитане от останалите, докато ако инфрачервеният светодиоден масив е под някакъв ъгъл (не перпендикулярен), тогава Двойките N+1 или N+2 IR LED/детектор сега трябва да дадат различно отчитане.

По този начин, в зависимост от това колко сензори показват наличието на линията, трябва да знаем дали сме центрирани и дали сме под ъгъл или не.

За този последен експеримент, нека просто видим дали можем да получим червения светодиод и RGB светодиода, за да ни даде повече информация за това какво ни казва сензорният масив.

Видеото навлиза във всички подробности. Окончателният код също е приложен.

Това завършва поредицата от ARM Assembly, свързана с GPIO. Надяваме се да се върнем с още ARM монтаж по -късно.

Благодаря ти.

Препоръчано: