Система инерциальной навигации 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 файлы проекта
Скачать прошивку
Скачать исходный код
Скачать программу для ПК

1 комментарий »

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

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

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

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

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

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