Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Ultra-WideBand Feather включает в себя модуль Decawave DWM1000 и ATSAMD21 ARM Cortex M0 в форм-факторе пера Adafruit. Модуль DWM1000 - это беспроводной модуль, соответствующий стандарту IEEE802.15.4-2011 UWB, способный выполнять точное позиционирование внутри помещений и обеспечивать высокую скорость передачи данных, что делает эту плату идеальной для проектов робототехники, где требуется локализация.
Особенности: - Decawave DWM1000 для точного отслеживания - ARM Cortex M0 для быстрых и мощных приложений - Совместимость с Adafruit Feather для интеграции с широкой существующей экосистемой - Интерфейс SWD для программирования и отладки приложений - Разъем USB-C - Встроенное зарядное устройство LiPo.
Для полного описания проекта и обновлений просмотрите этот проект на моем сайте Prototyping Corner по адресу prototypingcorner.io/projects/uwb-feather.
Исходное оборудование и программное обеспечение для этого проекта доступно в репозитории GitHub.
Шаг 1. Проектирование оборудования
Как упоминалось во введении, UWB Feather состоит из ATSAMD21 ARM Cortext M0 + для мозга и модуля Decawave DWM1000 для сверхширокополосной беспроводной связи в форм-факторе пера. Конструкция относительно проста, состоит из 20 элементов BoM на двухслойной печатной плате. Распиновка совместима с Adafruit M0 Feather.
Зарядка LiPo осуществляется одноэлементным полностью интегрированным контроллером управления зарядкой. Напряжение батареи можно контролировать на D9, однако, если требуется доступ ко всем вводам-выводам, JP1 можно разрезать, чтобы освободить этот вывод. Регулировка напряжения 3,3 В осуществляется линейным стабилизатором с малым падением напряжения AP2112K-3.3, обеспечивающим до 600 мА.
Распиновка полностью совместима с линейкой пера Adafruit M0, что упрощает перенос кода. Линии ввода-вывода DWM1000 подключены к шине SPI и цифровым контактам 2, 3 и 4 для RST, IRQ и SPI_CS соответственно (которые не отображаются через заголовок). D13 также подключен к встроенному светодиоду, что является стандартом для многих Arduino-совместимых плат.
Программирование может выполняться через заголовок SWD или через USB, если загружен соответствующий загрузчик, такой как uf2-samdx1 от Microsoft. Подробнее см. Прошивку.
Примечание о версии 1.0
Проблема с разъемом USB-C на версии 1 этой платы. Площадь, которую я использовал, не включает вырез, необходимый для метода монтажа этого компонента с вырезом.
Версия 1.1 будет включать исправление для этого, а также добавление разъема micro-b для тех, кто этого хочет. См. Рекомендации по версии 1.1 ниже.
Для ознакомления с конструктивными особенностями Bill of Materials и Hardware Version 1.1 см. Описание проекта.
Шаг 2: Сборка
С только 20 элементами BoM и большинством компонентов размером не менее 0603 (2 кварцевых конденсатора были 0402), ручная сборка этой платы была простой. У меня была печатная плата и трафарет для припоя производства JLCPCB в матовом черном цвете с обработкой поверхности ENIG.
Общая стоимость 5 досок (хотя 10 не имели разницы в цене) и трафарета составила 68 австралийских долларов, однако 42 доллара из этой суммы приходилось на доставку. Первый заказ у JLCPCB, и платы были очень высокого качества с красивой отделкой.
Шаг 3: Прошивка: программирование загрузчика
Прошивку можно загрузить через разъем SWD с помощью программатора, такого как J-Link от Segger. Выше показан J-Link EDU Mini. Чтобы начать программировать плату, нам нужно загрузить наш загрузчик, а затем настроить цепочку инструментов.
Я буду использовать Atmel Studio для прошивки загрузчика. Для этого подключите J-Link и откройте Atmel Studio. Затем выберите Инструменты> Программирование устройства. В разделе «Инструмент» выберите J-Link и установите «Устройство» на ATSAMD21G18A, затем нажмите «Применить».
Подключите J-Link к перьевому разъему SWD и подайте питание через USB или через аккумулятор. После подключения в разделе «Подпись устройства» нажмите «Читать». Текстовые поля «Подпись устройства» и «Целевое напряжение» должны отображаться соответствующим образом. Если они не проверяют соединения, попробуйте еще раз.
Чтобы прошить загрузчик, нам сначала нужно отключить предохранитель BOOTPROT. Для этого выберите Предохранители> USER_WORD_0. NVMCTRL_BOOTPROT и измените значение на 0 байт. Щелкните Программа, чтобы загрузить изменения.
Теперь мы можем прошить загрузчик, выбрав «Воспоминания»> «Флэш» и указав местоположение загрузчика. Перед выбором программирования убедитесь, что Erase Flash, и нажмите Program. Если все идет хорошо, D13 на плате должен начать пульсировать.
Теперь вам нужно установить предохранитель BOOTPROT на размер загрузчика 8 КБ. Для этого выберите Fuses> USER_WORD_0. NVMCTRL_BOOTPROT и измените значение на 8192 байта. Щелкните программу, чтобы загрузить изменения.
Теперь, когда загрузчик был прошит, D13 должен пульсировать, и при подключении через USB должно появиться запоминающее устройство. Здесь можно загрузить файлы UF2 для программирования платы.
Шаг 4: Прошивка: прошивка кода с помощью PlatformIO
Прошивка может быть загружена по протоколу UF2 или напрямую через интерфейс SWD. Здесь мы будем использовать PlatformIO из-за его простоты и простоты. Для начала создайте новый проект PIO и выберите Adafruit Feather M0 в качестве целевой доски. При загрузке через SWD с помощью J-Link установите upload_protocol в platformio.ini, как показано ниже.
[env: adafruit_feather_m0] platform = atmelsam board = adafruit_feather_m0 framework = arduino upload_protocol = jlink
Теперь вы можете программировать плату в простом фреймворке Arduino.
Шаг 5: Прошивка: прошиваем якорь
Модули DWM1000 можно настроить как якоря или теги. Обычно якоря хранятся в известных статических местоположениях, а теги используют якоря для определения их относительного положения. Чтобы протестировать модуль DWM1000, вы можете загрузить пример DW1000-Anchor из репозитория GitHub.
Чтобы запустить эту программу с помощью PlatformIO, в PIO Home выберите Open Project, затем найдите папку DW1000-Anchor в репозитории GitHub. Затем нажмите кнопку загрузки PIO, и он автоматически найдет подключенный датчик отладки (убедитесь, что он подключен и на плату подано питание).
Прошивку тега необходимо загрузить на другую плату. Затем результат можно будет просмотреть в последовательном терминале.
Шаг 6: Идем дальше
Дальнейшие улучшения этого проекта будут включать разработку новой библиотеки DW1000, плата V1.1 изменяет другие проекты, в которых используется эта технология определения дальности. Если будет достаточный интерес, я рассмотрю возможность производства и продажи этих плат.
Спасибо за прочтение. Оставляйте любые мысли или критические замечания в комментариях ниже и обязательно ознакомьтесь с проектом на Prototyping Corner.