Клиенту требовалось разработать компактный автономный хедтрекер для определения положения головы и беспроводной передачи данных системе управления в реальном времени.
Устройство должно было измерять углы поворота и движения с помощью инерциального датчика, обрабатывать данные на микроконтроллере STM32F405 и передавать их по радиоканалу 2,4 ГГц с минимальной задержкой. Для радиосвязи требовалось применить микросхему Semtech SX1281 с собственным согласованным RF-трактом вместо готового радиомодуля.
Необходимо было переработать существующий работоспособный макет в компактную интегрированную плату, сохранив совместимость с разработанной прошивкой. В составе устройства предусматривались основной IMU-модуль BNO055, дополнительный малопотребляющий акселерометр BMA400 для пробуждения, USB-C, аккумуляторное питание и возможность работы устройства во время зарядки.
Отдельными требованиями были контроль заряда и состояния Li-Ion аккумулятора, измерение тока потребления, управление питанием радиотракта и датчиков, защита USB, возможность загрузки прошивки через USB DFU, звуковая индикация и наличие сервисных площадок для диагностики.
Плату требовалось разместить в заданных габаритах с учётом аккумулятора, корпуса, положения USB-C и антенны. Для высокоскоростных цепей USB и радиотракта необходимо было соблюдать требования к дифференциальной и контролируемой трассировке, опорным слоям, развязке питания и зонам запрета меди.
Цель проекта — получить автономное, компактное и энергоэффективное устройство, подготовленное для дальнейшего изготовления, испытаний и применения в системах дистанционного управления.
Для решения задачи я разработал аппаратную часть устройства, печатную плату и встроенное программное обеспечение на STM32F405.
На этапе прототипирования собрал и запустил рабочий макет на базе STM32F405, инерциального датчика BNO055 и радиомодуля семейства SX128x. Это позволило проверить алгоритмы определения ориентации, обмен по радиоканалу и взаимодействие всех основных компонентов до разработки новой интегрированной версии платы.
В KiCad разработал принципиальную схему и компактную многослойную PCB. В новой версии радиотракт построен непосредственно на микросхеме Semtech SX1281 вместо готового радиомодуля. Выполнил разводку RF-тракта, USB 2.0, цепей питания и управления, предусмотрел согласующие и фильтрующие цепи, защиту USB, разъём USB-C и зоны ограничения меди возле антенны.
Реализовал питание от Li-Ion аккумулятора, работу устройства во время зарядки, контроль напряжения и состояния аккумулятора, измерение потребляемого тока и раздельное управление питанием радиотракта и датчиков. Добавил BMA400 для пробуждения устройства, звуковую индикацию и сервисные площадки для программирования и диагностики.
Разработал модульную прошивку для STM32F405 в Keil MDK. Реализовал:
инициализацию и диагностику аппаратных узлов при включении;
обмен с BNO055 по I²C и чтение углов Эйлера и кватернионов;
работу BNO055 в режиме IMUPLUS для устойчивого отслеживания относительных движений без влияния магнитных помех;
вычисление относительных углов yaw, pitch и roll;
корректную обработку перехода угла через границу 359/0 градусов;
программную центровку текущего положения кнопкой или удалённой командой;
настройку чувствительности, экспоненты, мёртвой зоны, инверсии осей и диапазонов;
измерение напряжения аккумулятора и аварийные состояния;
сохранение настроек и калибровочных данных BNO055 во внешней EEPROM с проверкой CRC;
восстановление параметров после перезапуска и возврат к заводским настройкам.
Для связи с пультом разработал драйвер радиомодуля SX128x по SPI и настроил низколатентный режим FLRC. Создал собственный бинарный протокол с пакетами положения, состояния, конфигурации, команд и подтверждений. Данные ориентации передаются с частотой до 100 Гц; предусмотрены нумерация пакетов, временные метки, контроль состояния IMU и безопасные значения выходов при потере или устаревании данных датчика.
После изготовления выполнил запуск и аппаратную отладку платы. Проверил тактирование STM32, обмен с BNO055, работу SX128x по SPI, сохранение параметров и калибровки в EEPROM, центровку, обработку движения и передачу данных по радиоканалу. В результате хедтрекер заработал и корректно отслеживает движения головы.
В результате создан полностью работоспособный беспроводной хедтрекер на базе STM32F405, BNO055 и радиочипа семейства SX128x.
Устройство успешно прошло аппаратный запуск и функциональные испытания. Хедтрекер в реальном времени определяет повороты и наклоны головы по трём осям, выполняет программную обработку ориентации и передаёт управляющие данные по радиоканалу с частотой до 100 Гц.
На практике пользователь может в любой момент принять текущее положение головы за центральное с помощью кнопки или удалённой команды. Реализованы настройка чувствительности, экспоненты, мёртвой зоны, инверсия осей и ограничение выходных диапазонов. Параметры и калибровочные данные сохраняются в EEPROM и автоматически восстанавливаются после выключения питания.
Проверена стабильная работа инерциального датчика BNO055, радиоканала SX128x, энергонезависимой памяти и системы контроля аккумулятора. При ошибке датчика или устаревании данных прошивка автоматически переводит выходные значения в безопасное состояние.
Хедтрекер работает автономно от Li-Ion аккумулятора и может использоваться для управления поворотным подвесом камеры, направлением обзора и другими исполнительными механизмами. Основное применение — управление камерой дрона движениями головы оператора без использования дополнительных органов управления на пульте.
Рабочий прототип подтвердил правильность выбранной схемотехники, алгоритмов и радиопротокола. На его основе разработана новая компактная интегрированная плата с USB-C и радиотрактом непосредственно на SX1281, подготовленная для изготовления и дальнейших испытаний.