Система инерциальной навигации IMU-U1

Система инерциальной навигации или inertial measurement unit в сокращении IMU. Это система которая определяет своё положение в пространстве используя свойства инерции тел. т.е. она определяет на какой угол и по какой оси она была повёрнута и была смещена относительно начальной точки. Данные системы используют датчики гироскопы, акселерометры, магнитометры, барометры в различной их комбинации, чем больше датчиков используется в системе — тем она точнее работает, т.к. у каждого датчика по отдельности есть свои недостатки.

IMU-U1

IMU-U1

В этой статье предлагаю ознакомится с одним своим старым проектом, которому не нашел применения — модуль инерциальной навигации IMU-U1. Модуль построен на основе двух датчиков микросхем MPU9150, который включает в себя гироскоп, акселерометр, магнитометр и BMP180 — барометр. На борту установлен микроконтроллер STM32F103T8U6, который обрабатывает показания датчиков и отправляет по последовательному порту рассчитанные значения, которые может использовать контроллер более высокого ранга в системе. Так же можно заставить контролер отдавать данные не только через последовательной порт, а по Bluetooth или Wi-Fi радиоканалу. Или возложить на контроллер не только обработку показаний датчиков, но и основные вычислений, тем самым можно, например, на базе данной платы построить небольшой летательный аппарат.

Что можно построить на базе данной платы:

  • блок инерциальной навигации с обработкой показаний датчиков и получением на выходе рассчитанных углов поворотов и векторов смещения;
  • блок с гироскопом, акселерометром, магнитометром и барометром с интерфейсом UART, с возможностью передачи данных по радиоканалу;
  • контроллер летательного аппарата (квадрокоптер, вертолёт, самолёт…), гиростабилизированной платформы… у платы есть выходы UART, SPI, 4 ШИМ выхода, которые можно использовать для формирования PPM сигнала;
  • любой другой блок, который будет выдавать требуемые сигналы или сигнал по состоянию МЕМС датчиков (датчик высоты, падения, удара, смещения с заданной точки…)

Всё это и не только можно сделать с использованием 2-х микросхем, содержащих в себе 4 датчика, которые дают 10 осей или свобод и вычислитель на борту, всё зависит от исходного кода/прошивки бортового камня. Так же плату можно оснастить одним из двух беспроводных модулей Bluetooth или Wi-Fi.

Технические характеристики

    MPU9150

  • Рабочий диапазон гироскопа +-250, 500, 1000, 2000 °/с
  • Чувствительно гироскопа 131, 65.5, 32.8, 16.4 LCD/°/с
  • Рабочий диапазон акселерометра +-2, +-4, +-8, +-16 g
  • Рабочий диапазон магнитометра +-1200мкТл
  • BMP180

  • Давление от 300 до 110гПА
  • Высота -500 + 9000м над уровнем моря
  • Чувствительность барометра 0,02гПА (0,2м)
  • Интерфейсы 2x UART, I2C, SPI, 4x PWM/PPM, 6x GPIO
  • Радиоканал Bluetooth или W-Fi ESP8266 ESP-03
  • Индикация питания и статус
  • Напряжение питания 3,5-5,5В
  • Ток 31мА (без радиоканалов и барометра, зависит от частоты, режима и используемой периферии)
    Дополнительное потребление тока bluetooth примерно +50мА или Wi-Fi +200мА
  • Размеры 30х30х8мм (с угловыми разъемами, без PLS разъёма для подключения программатора)
  • Вес 3,87г (с PLS для подключения программатора)

Принципиальная схема модуля:

Схема

Схема

Модуль построен на 2-х МЕМС датчиках MPU9150 (U4) и BMP180 (U3), которые подключены по I2C к микроконтроллеру STM32F103T8U6 (U6), так же с MPU9150 идёт к контроллеру настраиваемая линия прерывания MPU_INT. Есть возможность установки одного из 2-х беспроводных модулей: Bluetooth HC04, HC05, 06, 07, 08, 09 (U1), который подключается к UART1 микроконтроллера или W-Fi ESP8266 ESP-03 (U5), подключается к UART2, при установки Wi-Fi модуля придётся пожертвовать 8-ми контактным дополнительным разъёмом. На плате предусмотрены 2 светодиода индикации: питания и статуса, управляемого микроконтроллером. Питание выполнено в виде 5-ти выводного SOT23-5 линейного стабилизатор TPS73633DBVR с током 350мА, которого хватить для работы Wi-Fi модуля, если использовать bluetooth или не использовать радиоканал то можно ограничится 150мА стабилизатором TPS73133DBVT или его аналогами, например: LP3985IM5-3.3, LP2985A-33DBVR, LD3985M33R (у некоторых стабилизаторов диапазон входного напряжения может отличатся).

Сборочный чертёж (не классический с обозначением порядковых номеров компонентов, а с номиналами) будет выглядеть следующим образом:

Сборочный чертёж

Сборочный чертёж

Как видно, на нижней стороне платы предусмотрена возможность установки модулей Bluetooth U1 или Wi-Fi U5. На плату можно установить только один модуль связи, т.к. установка одного блокирует установку другого. При этом следует обратить внимание, что для установки U1 необходимо установка блокировочного конденсатора C7, а для установки U5 конденсатор C9 и резистор R3, при этом для U1 установка С9 и R3 заблокирована, они не нужны, а для U5 установка C7 необязательна, так же U5 блокирует установку разъёма X2. Если U1 или U5 не устанавливать — элементы C7, C9 и R3 устанавливать нет необходимости.

3D вид платы: слева - сверху 3D вид платы: справа - снизу без радиоканалов

3D вид платы: слева — сверху, справа — снизу без радиоканалов

3D вид платы: слева - с Bluetooth (U1) 3D вид платы: справа - c Wi-Fi (U5)

3D вид: слева — с Bluetooth (U1), справа — c Wi-Fi (U5)

На фотографии в статье представлена 1 версия платы, на котором есть 2 ошибки: корпус BMP180 зеркалирован (не с того вида из PDF модельку нарисовал), вывод VLOGIC U4 забыл подтянуть к плюсу питания; на схеме, сборочном чертеже, 3D виде и файлах прикрепленных к статье ошибки исправлены.

Перечень компонентов:


Компонент
Обозначение
Корпус
Количество
Микросхемы
TPS73633DBVR U2 SOT23-5 1
BMP180 U3 1
MPU9150 U4 1
STM32F103T8U6 U6 VFQFPN-36 1
Модули
HC-05 U1 1
ESP8266 ESP-3 U5 ESP-3 1
Индикация
LED D2, D3 0603 2
Полупроводники
BAT54HT1 D1 SOD323 1
Резисторы
10K R1, R2, R3, R5 0402 4
470 R4, R6 0402 2
Конденсаторы
22uF C1 Tantal A 1
0,1uF 16V C2, C4, C5, C6, C8, C11, C13, C14, C15, C16, C17 0402 11
4,7uF 16V C3 Tantal A 1
0,1uF C7, C9 0603 2
10nF C10 0402 1
2,2nF C12 0603 1
Установочные
16MHz Y1 3213 ceramic 1
Разъёмы
PH2.0-4 X1 PH2.0MR-4 1
PH2.0-8 X2 PH2.0MR-8 1
PLS5 X3 PLS5 1

Резонатор Y1 применён не кварцевый, а керамический со встроенными конденсаторами в 3213 корпусе, например CSTCE16M0V53-R0 от Murata. Можно обойтись и без него, воспользоваться внутренней RC цепочкой, но точность модуля может снизится, главное схемотехническое изменение указать в коде — перенастроить систему тактирования микроконтроллера.

Работа с модулем

В прошивки на данный момент задействованы только 2 датчика: гироскоп и акселерометр. Контроллер с заданной частотой опрашивает их по I2C, вычисляет углы поворота и отправляет их по UART (115200 8N1). Для расчёта углов применён алгоритм — AHRS Себастиана Мажвика.

При подачи питания модуль приветствует:

Started
h — help
i2c init

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

По запросу h модуль предоставит описание своего функционала:

Test firmware IMU-U1 9dof. Alex_EXE
Help:
r<A>r<enter> — read byte, <A> — register address
R<A>r<enter> — read 2 byte, A — register address
v — switch mode view cmd R: hex or integer
w<A><B>r<enter> — write byte <B> for address <A>
t — read temperature
p — read INT pin
d — delay loop sensor read
i — init mpu-9150
n — set 0
s — loop sensor reads
1 — On reads& calck sensors
2 — Off reads& calck sensors
m — read magnetometr

Для начала работы можно установить задержку опроса контроллера однобайтовой командой d и инициализировать mpu-9150 командой — i, далее включаем алгоритм расчёта углов поворота — 1, теперь можно включить отправку рассчитанных значений — s.

Для работы с модулем используется программа AL Terminal, где есть возможность отправлять не только текстовые данные, но и произвольные байты, для передачи которых используется символ $, например $067 имеет вид 67int 43hex или символ C в ASCII. Описание команд:


Команда
Пример
Описание
r r$067
r00000067 00000255
Прочитать 1 байта из регистра <A>, номер регистра задаётся 1 байтом.
Команда вернёт номер прочитанного регистра и его значение.
R<A> R$067
R00000067 -000200
Прочитать 2 байта из регистра <A>, номер регистра задаётся 1 байтом.
Команда вернёт номер прочитанного регистра и его значение в HEX или целочисленном виде.
v R$067
R00000067 FDAE
v
mode view cmd R integer
R$067
R00000067 -000104
Переключения вида отображения прочитанного значения командой R: шестнадцатеричный или целочисленный
w<A><B> W$027$000 Передать в регистр <A> значение <B>, оба параметра задаются 1 байтом.
t t
temperature 000033
Прочитать температуру датчика температуры встроенного в mpu-9150
p p
pL
Прочитать состояние вывода MPU-INT
d d1
delay 00000049

d$20
delay 00000020

Установить скорость отправки рассчитанных значений в UART, значение задаётся байтом. Диапазон от 1 до 255. По умолчанию 200.
i i
init mpu-9150 ok
Инициализация mpu-9150
n Отцентровать/обнулить положение платы
s s
Sensor print: on
$00$0Fяю$03m$00

s
Sensor print: off

Включить/выключить вывод модулем в UART рассчитанных значений углов поворотов
1 Включить алгоритм расчёта углов поворота.
2 Выключить алгоритм расчёта углов поворота.
m m
011700 011700 011700
Отобразить положение магнитометра

Для проверки работы модуля была написана тестовая демонстрационная утилита:

Демонстрационная утилита для IMU-U1

Демонстрационная утилита для IMU-U1

Основные команды инициализации модуля вынесены на кнопки init, calc ON, value gets, set speed и установка 0 «=0=». Галочка Roll invert Attitude — инвертирует ось Roll, галочка Cube Z — включает поворот куба по оси Z. Возможно, что парсер программы может некоторые ответы от команд воспринимать как данные положения углов наклона, для сброса ошибки нужно переподключиться к COM порту.


Видео — первая демонстрация IMU-U1

Для захвата картинки с экрана использовал фотоаппарат ) , т.е. картинка на видео в реальном времени, модуль подключен по UART через USB-UART преобразователь к компьютеру, на котором запущена демонстрационная программа, которая выводит картинку на монитор, монитор и плату снимает камера.

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

Если кому проект интересен, то в наличии есть несколько не запаянных плат с 2-мя вышеописанными ошибками. Так же могут быть и некоторые компоненты (датчики, резонатор, разъёмы, обжатые провода). Обращаться через обратную связь, платы могу продать по (100р) через местный хакспейс MakeItLab (г. Екатеринубрг) или почтой.

Скачать схему в PDF и перечень
Скачать gerber файлы проекта
Скачать прошивку
Скачать исходный код
Скачать программу для ПК

3 комментария »

Alex_EXE | 16.04.2017 | Проекты | 1 776 просмотров

3 комментария на « Система инерциальной навигации IMU-U1»

  1. Alex_EXE пишет 06.05.2017 в 20:28 #

    К проекту добавил исходный код.

  2. Дмитрий пишет 01.10.2017 в 02:33 #

    Чота я не понял вот эта вот:

    ….предлагаю ознакомится с … старым проектом, которому не нашел применения.
    —-
    На форуме il2sturmovik овер 88 страниц обсуждений, как повесить на лоб смартфон, или на макушку фонарик или светодиоды, чтобы делать HeadTrack.

    Еще на форуме warthunder как минимум одна тема на 72 страницы с теми же страданиями.

    И автор не нашел применения?!?!

    В общем, готов купить MPU9150 если остались. Писать сюда же — зайду оставлю реальный адрес.

  3. Alex_EXE пишет 01.10.2017 в 15:20 #

    Сфера применения инерциальных систем навигации: летательные аппараты, в том числе полетные контроллеры квадрокоптеров; OSD (курсовая информация, авиагоризонт, добавляемая в видео поток с летательного аппарата); гиростабилизированные платформы (2-х колесные роботы, сигвеи, гироскутеры…); авиагоризонты, как самостоятельные приборы; HeadTrack’еры (устройства следящие за положением головы); определение столкновений, для авто; определение падения, например больных и/или пожилых людей, что бы вызвать помощь, так же полезно может быть для хрупких объектов; видео игры (пример нинтендо с его нунчаками); отслеживание перемещения объекта, при хорошей настройки и калибровки, можно отслеживать перемещение на небольших расстояниях, например, человека в здании; сигнализации: датчики удара, открытия, смещения, перемещения…. это только часть применений, которая сразу пришла в голову. Данные направления сейчас очень активно развиваются и существует множество контроллеров, в том числе и я спроектировал печатную плату.

    Почему данный проект стал на данный момент не актуален для меня. У меня есть свои (пока не коммерческие) определенные идеи, первым пунктом было желание разработать такой контроллер и получить с него корректные данные, что и сделал. Разработка немного затянулась в том числе из-за долгого ожидания изготовления плат в китае и ожидания деталей с taobao. Под конец работ я уже переключился на другие, более актуальные на тот момент, задачи. Так-как это были мои идеи, а не заказ, то дополнительного стимула для продолжения работ не было. Еще в начале разработки интерес к проекту был у местного хакспейса, но им более интересен полностью завершенный проект, так что им он то-же не актуален, там своих идей гора и тележка.

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

    Если кому платы интересны, могу часть остатков продать почти по себестоимости, пишите через обратную связь. Проект с кодами выложен здесь. В будущем к нему, наверно, вернусь, т.к. желание доделать начатое есть, но пока актуальны другие задачи.

Комментарии RSS

Оставьте отзыв