Акселерометры и гироскопы: как выбрать и подключить IMU
Инерциальный модуль (IMU) — акселерометр и гироскоп, иногда с магнитометром, в одном корпусе. По нему определяют наклон, повороты, удары и шаги. Разбираем по даташитам Bosch Sensortec, чем отличаются популярные IMU, почему угол по гироскопу «уплывает» и зачем нужно слияние данных.
Обновлено Редакция GAW
Инерциальный модуль, IMU (inertial measurement unit), объединяет в одном корпусе акселерометр и гироскоп, а в 9-осевых модулях ещё и магнитометр. Акселерометр измеряет ускорение по трём осям — в покое это проекции силы тяжести, по ним определяют наклон. Гироскоп измеряет угловую скорость — по нему отслеживают повороты. Магнитометр показывает направление магнитного поля Земли — курс. Подключают IMU по I²C или SPI.
Сравнение
По даташитам Bosch Sensortec:
| Параметр | BMI160 | BMI270 | BMI323 | BNO055 |
|---|---|---|---|---|
| Оси | 6 | 6 | 6 | 9, со слиянием данных |
| Акселерометр | 16 бит | ±2–±16 g, 16 бит | ±2–±16 g, 16 бит | ±2–±16 g, 14 бит |
| Гироскоп | 16 бит | ±125–±2000 °/с | ±125–±2000 °/с | 16 бит |
| Шум гироскопа | 0,007 °/с/√Гц | 0,007 °/с/√Гц | 0,007 °/с/√Гц | — |
| Ток в работе | 925 мкА | 685 мкА | 790 мкА | до 12,3 мА |
| Питание VDD | 1,71–3,6 В | 1,71–3,6 В | 1,71–3,63 В | 2,4–3,6 В |
| Интерфейсы | I²C до 1 МГц, SPI | I²C, SPI 10 МГц | I²C до 1 МГц, I3C 12,5 МГц, SPI 10 МГц | I²C, HID-I²C, UART |
| Адрес I²C | 0x68 / 0x69 | 0x68 / 0x69 | 0x68 | 0x29 / 0x28 |
| Корпус | 2,5 × 3,0 мм | LGA-14, 2,5 × 3,0 мм | LGA-14, 2,5 × 3 мм | LGA-28, 3,8 × 5,2 мм |
Адрес I²C у BMI задаёт вывод SDO: на общем проводе — 0x68, на питании VDDIO — 0x69. У BNO055 его выбирает вывод COM3. Датчики питаются от 1,7–3,6 В: к микроконтроллеру с логикой 5 В их подключают через преобразователь уровней.
Шум и дрейф
Шум в даташите задан плотностью — на корень из герца полосы. Реальный шум зависит от полосы фильтра: у BMI160 по даташиту при плотности 0,007 °/с/√Гц и фильтре 74,6 Гц шум гироскопа — 0,07 °/с среднеквадратично. Чем уже полоса, тем меньше шум, но тем медленнее датчик реагирует.
Главная беда гироскопа — не шум, а смещение нуля: в покое он показывает не ноль, а небольшую скорость поворота. У BMI160 по даташиту это до ±3 °/с при 25 °C без компенсации, у BMI270 — ±0,5 °/с за срок службы после пайки. Угол поворота получают интегрированием скорости, и смещение интегрируется вместе с ней: 0,5 °/с за минуту дают 30° ошибки. Поэтому:
- смещение измеряют в покое при старте и вычитают;
- угол наклона корректируют по акселерометру, который в покое видит направление силы тяжести;
- курс корректируют по магнитометру — акселерометр поворот вокруг вертикали не видит.
Такое объединение показаний называют слиянием данных (sensor fusion). Его считает либо микроконтроллер — для BMI160, BMI270 и BMI323, — либо сам датчик.
BNO055: слияние внутри датчика
BNO055 — 9-осевой модуль со своим процессором. По даташиту он объединяет показания гироскопа, акселерометра и магнитометра и выдаёт готовые величины: кватернион, углы Эйлера, вектор поворота, линейное ускорение без гравитации, вектор гравитации и курс — 100 раз в секунду. Микроконтроллеру остаётся прочитать регистры.
Цена — потребление и время запуска: до 12,3 мА в нормальном режиме против долей миллиампера у BMI, 400 мс от включения до режима настройки и 650 мс после сброса. Ещё одна особенность из даташита: интерфейс I²C BNO055 использует растягивание такта — ведущий должен его поддерживать.
BMI270: запуск через конфигурационный файл
У BMI270 есть особенность, о которой узнают, когда датчик «не работает». По даташиту после включения нужно выполнить последовательность инициализации: отключить расширенное энергосбережение, подождать не меньше 450 мкс, загрузить в регистр INIT_DATA конфигурационный файл из репозитория Bosch BMI270-Sensor-API и через 20 мс проверить, что инициализация прошла. Без этого функции датчика не запускаются. Поэтому BMI270 почти всегда подключают через библиотеку Bosch или её обёртку, а не «вручную» через регистры.
BMI160 и BMI323 такого шага не требуют, а BMI323 по даташиту умеет работать и по новой шине I3C.
Как выбрать
- Нужна готовая ориентация, питание не критично — BNO055: углы и кватернион без расчётов на микроконтроллере.
- Батарейное устройство, шагомер, жесты — BMI270 или BMI323: ток 685–790 мкА и встроенные функции распознавания движений.
- Высокая частота отсчётов — BMI270 и BMI323: до 6,4 кГц у гироскопа.
Другие датчики — давление и высота в статье «Датчики давления», общий обзор — в разделе «Датчики».
Частые вопросы
Какой акселерометр-гироскоп выбрать для Arduino?
Зависит от задачи. Если нужна готовая ориентация в пространстве — BNO055: по даташиту Bosch он сам объединяет данные трёх датчиков и выдаёт углы и кватернион 100 раз в секунду. Если важны малое потребление и сырые данные — BMI270 или BMI323 с током 685–790 мкА; слияние тогда считает микроконтроллер. BMI160 — предшественник, по даташиту 925 мкА.
Почему угол по гироскопу постепенно уплывает?
Гироскоп измеряет скорость поворота, а угол получают интегрированием, и вместе с ней интегрируется смещение нуля. По даташиту BMI270 оно до ±0,5 °/с за срок службы: за минуту без коррекции это до 30° ошибки. Поэтому угол гироскопа корректируют по акселерометру, который видит направление гравитации, и по магнитометру для курса.
Какой адрес I²C у BMI160 и BMI270?
По даташитам Bosch — 0x68, если вывод SDO соединён с общим проводом, и 0x69, если SDO подтянут к питанию VDDIO. У BNO055 адрес другой: 0x29 по умолчанию и 0x28 при низком уровне на выводе COM3.
Почему BMI270 не отвечает после включения?
Скорее всего, не загружен конфигурационный файл. По даташиту после включения BMI270 нужно отключить энергосбережение, загрузить в регистр INIT_DATA файл конфигурации из Bosch BMI270-Sensor-API и через 20 мс проверить статус инициализации. Без этого шага акселерометр и гироскоп не работают как надо — поэтому для BMI270 почти всегда используют библиотеку Bosch.
Источники
- Bosch Sensortec. BMI160 Data Sheet (BST-BMI160-DS000-09, Revision 1.0, November 2020) — акселерометр и гироскоп с аппаратной синхронизацией; 925 мкА в полной работе; шагомер 5 мкА; питание 1,71–3,6 В; FIFO 1024 байта; I²C до 1 МГц и SPI; корпус 2,5 × 3,0 мм; шум акселерометра 180, до 300 мкg/√Гц при ±8 g; смещение нуля гироскопа ±3 °/с при 25 °C без компенсации; шум гироскопа 0,007 °/с/√Гц, 0,07 °/с ср. кв. при фильтре 74,6 Гц; I²C-адрес 0x68 при SDO на GND, 0x69 — на VDDIO
- Bosch Sensortec. BMI270 Data Sheet (BST-BMI270-DS000-08, Revision 1.6) — 16-разрядные акселерометр ±2–±16 g и гироскоп ±125–±2000 °/с; ODR гироскопа 25 Гц–6,4 кГц, акселерометра 0,78 Гц–1,6 кГц; питание VDD 1,71–3,6 В, VDDIO 1,2–3,6 В; 685 мкА; шум гироскопа 0,007 °/с/√Гц в режиме производительности, акселерометра 0,16 мg/√Гц; смещение нуля гироскопа ±0,5 °/с за срок службы; SPI до 10 МГц, I²C, вспомогательный I²C для магнитометра; LGA-14 2,5 × 3,0 мм; запуск: загрузка конфигурационного файла в регистр INIT_DATA (0x5E) из Bosch BMI270-Sensor-API, проверка INTERNAL_STATUS через 20 мс; I²C-адрес 0x68 или 0x69 по SDO
- Bosch Sensortec. BMI323 Data Sheet (BST-BMI323-DS000-13, Revision 1.7) — 16-разрядные акселерометр ±2–±16 g и гироскоп ±125–±2000 °/с, датчик температуры; ODR 0,78125 Гц–6,4 кГц; SPI 10 МГц, I3C 12,5 МГц, I²C до 1 МГц; VDD 1,71–3,63 В, VDDIO 1,08–3,63 В; 790 мкА; шум гироскопа 0,007 °/с/√Гц; LGA-14 2,5 × 3 мм; I²C-адрес 0x68 при SDO на GND
- Bosch Sensortec. BNO055 Data Sheet (BST-BNO055-DS000-18, Revision 1.8, October 2021) — 9 осей: 16-разрядный гироскоп, 14-разрядный акселерометр ±2–±16 g, магнитометр; встроенное слияние данных — кватернион, углы Эйлера, вектор поворота, линейное ускорение, гравитация, курс, 100 Гц; VDD 2,4–3,6 В, VDDIO 1,7–3,6 В; до 12,3 мА в нормальном режиме при 9DOF 100 Гц; запуск 400 мс, после сброса 650 мс; интерфейсы I²C, HID-I²C, UART; I²C-адрес 0x29 по умолчанию, 0x28 при низком COM3; растягивание такта I²C; LGA-28 3,8 × 5,2 мм
Нашли ошибку?
Смотрите также
- ДатчикиТок и температура: шунты, датчики Холла, термисторы, термопары — подключение и расчёт
- Датчики давления BMP280, BME280, BMP390Точность, подключение по I²C и SPI, режимы, фильтр, компенсация, высота по давлению
- I²CSDA и SCL, START/STOP, ACK, адреса, скорости, расчёт подтяжек
- SPISCLK, MOSI, MISO, CS, режимы 0–3, daisy chain, частота, SPI в AVR
- Адрес I²C7-битный адрес ведомого и байт адреса с битом R/W
- Растягивание такта I²CВедомое держит SCL в нуле: зачем, ограничения SMBus, совместимость