Оглавление:

Часть 3: GPIO: Сборка ARM: Последователь линии: TI-RSLK: 6 шагов
Часть 3: GPIO: Сборка ARM: Последователь линии: TI-RSLK: 6 шагов

Видео: Часть 3: GPIO: Сборка ARM: Последователь линии: TI-RSLK: 6 шагов

Видео: Часть 3: GPIO: Сборка ARM: Последователь линии: TI-RSLK: 6 шагов
Видео: ▶️ Пишем драйвер Linux для символьного устройства chardev – Разработка модулей ядра Linux [Kernel] 2024, Ноябрь
Anonim
Image
Image
Аппаратное обеспечение
Аппаратное обеспечение

Привет. Это следующий выпуск, в котором мы продолжаем использовать сборку ARM (вместо языка более высокого уровня). Вдохновением для этого учебного пособия послужила Лаборатория 6 из набора для обучения робототехническим системам Texas Instruments, или TI-RSLK.

Мы будем использовать микроконтроллер из комплекта, плату разработки MSP432 LaunchPad, но, возможно, вы найдете что-то полезное для извлечения из этого руководства, даже если вы не используете LaunchPad или следуете T. I. учебный план.

Мы начали с инструкции по сборке ARM, среде разработки и способам создания проекта.

Следующая инструкция по сборке ARM представила, как взаимодействовать с вводом / выводом (GPIO).

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

Теперь с помощью этого Instructable мы можем использовать то, что мы узнали, для чего-то более интересного и полезного: обнаружения линии.

Это может помочь нам позже, когда мы создадим робота-следящего за линией.

В учебной программе большая часть программирования выполняется на C или C ++, но полезно познакомиться с ассемблером, прежде чем мы начнем полагаться на языки более высокого уровня и библиотеки.

Шаг 1. Аппаратное обеспечение

Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение

Я не хочу подробно перекраивать оборудование, так как исходники уже есть, но мы добавим пояснения, где это необходимо.

Для этого руководства мы будем использовать массив датчиков отражения от Pololu, поскольку он входит в состав TI-RSLK (роботизированный комплект). Он используется в курсе и в лабораторной работе 6 учебной программы.

Если у вас его нет, вы можете использовать любой ИК-детектор (или серию из них), который выводит цифровой сигнал, ВЫСОКИЙ или НИЗКИЙ, для присутствия и отсутствия.

Лучше всего использовать матричный датчик, потому что он может помочь определить, находимся ли мы прямо в центре линии или в стороне. Кроме того, как мы увидим позже, это может помочь нам определить угол поворота робота по отношению к линии.

В матрице отражательной способности есть детекторы, расположенные очень близко друг к другу. Это означает, что мы должны получить несколько сигналов обнаружения, конечно, в зависимости от толщины линии.

Если это так, то, если робот не находится прямо на линии, он должен вернуть вывод, что линия шире, чем должна быть (потому что мы находимся под углом).

Для лучшего объяснения вышеизложенного взгляните на документ лабораторной работы 6.

Чтобы получить помощь в подключении / подключении датчика к плате разработки MSP432 LaunchPad, вот несколько полезных инструкций.

Я также добавил те же (похожие?) Инструкции в формате pdf на этот шаг.

Если вы внимательно прочитаете документы Pololu, они объясняют причину «обхода 3,3 В», которую вы захотите установить перемычкой, если вы используете 3,3 В вместо 5 В.

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

На данный момент подключение линейного массива датчиков сводится к следующему:

  • подключите 3.3V и GND от платы MSP432 к матрице датчиков.
  • подключите контакт порта (я предлагаю P5.3) от MSP432 к контакту включения светодиода на массиве линейных датчиков. Этот вывод на датчике находится между 3,3 В и GND.
  • подключите все восемь контактов / битов одного порта (я предлагаю от P7.0 до P7.7) к восьми контактам матрицы датчиков, помеченным от «1» до «8». Это линии, которые будут ВЫСОКИМ или НИЗКИМ, в зависимости от того, что они ощущают.

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

Итак, со всем, что связано, мы готовы перейти к программному обеспечению.

Шаг 2: Следование по строке

Следование по строке
Следование по строке
Следование по строке
Следование по строке

Матричный датчик отражательной способности довольно хорош, потому что он может помочь как минимум двумя способами.

  • Определите, центрирован ли робот на линии или уходит в сторону.
  • Выровнен ли робот по направлению линии или под углом.

Каждый из детекторов массива по существу выдает один бит информации, ВЫСОКИЙ или НИЗКИЙ.

Идея состоит в том, чтобы объединить все эти биты в единое число или единый битовый шаблон и использовать этот шаблон для принятия решений (чтобы двигаться правильно).

Шаг 3: Прежде чем мы действительно сможем начать…

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

До сих пор мы не использовали «стек» в наших программах.

Мы полагались на использование большинства регистров ядра процессора во всем мире в различных подпрограммах.

Единственное, что мы сделали, - это сохранили и восстановили адрес LR (регистр ссылок) для одной функции - той, которая вызвала несколько других функций. (Здесь я использую «функцию» и «подпрограмму» как синонимы).

То, что мы делали, нехорошо. Что, если мы хотим вложить другие функции? Что, если у нас более одного уровня вложенности?

В предыдущих примерах мы решили использовать регистр R6 в качестве хранилища LR или адреса возврата. Но если мы хотим сделать дальнейшее / более глубокое вложение, мы не можем продолжать изменять значение R6. Придется выбрать еще один регистр. И другой. И тогда становится обременительным отслеживать, какой регистр ядра процессора содержит, какой LR для восстановления какой функции.

Итак, теперь посмотрим на «стек».

Шаг 4: Стек

Вот некоторые материалы для чтения, объясняющие стек.

Я более активный сторонник пары идей:

  • столько теории, сколько требуется, быстро переходите к практике
  • учитесь по мере необходимости, сосредоточьтесь на том, чтобы действительно что-то делать, а не только на бесцельных упражнениях или примерах.

В Интернете есть множество документации по ARM и MSP432, в которой говорится о стеке, так что не будем перефразировать все это. Я также собираюсь свести использование стека к минимуму - сохранив адрес возврата (регистр ссылок).

По сути, нам нужны только инструкции:

НАЖМИТЕ {список регистров}

POP {список регистров}

Или, в нашем случае, конкретно:

НАЖАТЬ {LR}

POP {LR}

Итак, функция / подпрограмма сборки будет выглядеть так:

funcLabel:.asmfunc

PUSH {LR}; вероятно, это будет одна из первых инструкций по входу.; сделайте больше кода здесь..; бла бла бла…; хорошо, мы закончили с функцией, готовы вернуться к вызову функции POP {LR}; это восстанавливает правильный адрес возврата обратно для вызова; функция. BX LR; вернуть.endasmfunc

В видео показан живой пример нескольких вложенных функций.

Шаг 5: Программное обеспечение

Прикрепленный файл с пометкой «MSP432_Chapter…» содержит много полезной информации о портах MSP432, и из этого документа мы получаем следующие порты, регистры, адреса и т. Д. Однако он немного устарел. Однако я не видел подробных адресов, перечисленных для порта 5 и выше. (только «альтернативные функции»). Но все равно полезно.

Мы собираемся использовать два порта. P5, P7, P1 и P2.

Выход P5.3 (однобитовый) предназначен для управления включением ИК-светодиода на датчике. Мы используем P5.3, потому что это открытый контакт на том же заголовке, что и другие соединения MSP432, идущие к массиву датчиков.

От P7.0 до P7.7 будут восемь входов, которые собирают данные с датчика; что он «видит».

P1.0 - это единственный красный светодиод, и мы могли бы использовать его для обозначения данных.

P2.0, P2.1, P2.2 - это светодиод RGB, и мы также можем использовать его с его различными цветовыми возможностями, чтобы отображать данные датчика.

Если вы прошли предыдущие инструкции, связанные со всем этим, то вы уже знаете, как настроить программу.

Просто имейте раздел объявлений для портов, битов и т. Д.

У вас будет «основной» раздел.

Должен быть цикл, в котором мы непрерывно считываем данные из P7, принимаем решение по этим данным и соответственно зажигаем два светодиода.

Вот и снова адреса регистров портов:

  • 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 (нечетные адреса)

Полужирным шрифтом выделено то, что мы будем использовать в этой инструкции.

Шаги программы для считывания ИК-детекторов

Ниже приводится псевдокод для написания программы на C, но он по-прежнему полезен, и мы будем внимательно следить за ним в сборочной версии программы.

основная программа 0) Инициализируйте // порты, пока (1) {1) Установите высокий уровень P5.3 (включите ИК-светодиод) 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 на низкий уровень (выключите ИК-светодиод, экономия энергии) 7) Подождите 10 мс, Clock_Delay1ms (10); } // повторяем (назад к while ())

Шаг 6. Давайте улучшим код

Назначение или использование массива ИК-светодиодов Pololu состоит в том, чтобы обнаружить линию и узнать, находится ли робот (в будущем) непосредственно по центру линии или сбоку. Кроме того, поскольку линия имеет определенную толщину, если матрица датчиков расположена прямо перпендикулярно линии, N датчиков будет иметь другое показание, чем остальные, тогда как если матрица ИК-светодиодов расположена под некоторым углом (не перпендикулярно), тогда N + 1 или N + 2 пары ИК-светодиод / детектор теперь должны давать разные показания.

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

В этом последнем эксперименте давайте просто посмотрим, сможем ли мы получить красный светодиод и светодиод RGB, чтобы дать нам больше информации о том, что нам сообщает матрица датчиков.

Видео раскрывает все детали. Окончательный код также прилагается.

На этом завершается серия сборок ARM, связанных с GPIO. Мы надеемся вернуться с другими сборками ARM позже.

Спасибо.

Рекомендуемые: