Вы находитесь на странице: 1из 73

1

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ


федеральное государственное автономное образовательное учреждение высшего образования
«Санкт-Петербургский государственный университет аэрокосмического приборостроения»

ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА

на тему
Разработка лабораторного стенда и методики исследования датчиков
ориентации беспилотных летательных аппаратов

выполнена Губаевом Робертом Эмилевичем


фамилия, имя, отчество студента в творительном падеже

по направлению подготовки/
15.03.06 Мехатроника и робототехника
специальности
код наименование направления подготовки/ специальности

наименование направления подготовки/ специальности


направленности Робототехника
наименование направленности

наименование направленности

Студент группы № 3621к Губаев Р. Э.


подпись, дата инициалы, фамилия

Санкт-Петербург 2020
2

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ


федеральное государственное автономное образовательное учреждение высшего образования
«Санкт-Петербургский государственный университет аэрокосмического приборостроения»

ЗАДАНИЕ НА ВЫПОЛНЕНИЕ
ВЫПУСКНОЙ КВАЛИФИКАЦИОННОЙ РАБОТЫ БАКАЛАВРА

студенту группы
номер фамилия, имя, отчество

на тему

утвержденную приказом ГУАП от №

Цель работы:

Задачи, подлежащие решению:

Содержание работы (основные разделы):

Срок сдачи работы « » 2020

Задание принял(а) к исполнению


студент группы №
подпись, дата инициалы, фамилия
3

Аннотация
Данная работа посвящена исследованию задачи инерциальной
навигации, ориентирования и реализации метода оценки точности движения,
используемого в беспилотных летательных аппаратах, в реальном времени.
В ходе работы были решены следующие задачи:
- Реализация подхода к использованию автономной инерциальной
системы навигации, с помощью встроенных инерциальных
датчиков навигации и ориентирования;
- Анализ и устранение возможных ошибок в определении
местоположения с использованием инерциальных систем;
- Описание ошибок и негативных факторов, которые свойственны
данному виду навигационных систем;
- Оценка точности определения координат с помощью
поворотного стенда СИО-1;
Ключевые слова: система инерциальной навигации, беспилотные
летательные аппараты, локальная навигация, глобальная навигация,
микроэлектрические системы, инерциальные датчики, акселерометр,
гироскоп, магнитометр
4

Список сокращений
ЛН – Локальная навигация
АИС – Автономная инерциальная система
ГН – Глобальная навигация
ГСК – Глобальная система координат
СКУ – Система координат устройства
МЭМС – Микроэлектрические системы
БИНС – Бесплатформенная система
БЛА – беспилотные летательные аппараты
Vdd - Voltage drain drain
SPI – Serial Peripheral Interface
I2C – Inter-Integrated Circuit
АЦП – Аналогово-цифровой преобразователь
ФНЧ – Фильтр нижних частот
ФВЧ – Фильтр верхних частот
LGA – Land Grid Array
QFN - Quad Flat No-leads
LSB - Least Significant Bit (младший значимый бит)
ГУ – Главное устройство
ПУ – Подчинённое усройство
5

ОГЛАВЛЕНИЕ
1 Существующие методы навигации ........................................................... 7
1.1 Используемый в данной работе метод ориентации посредством
МЭМС сенсоров............................................................................................... 8
2. Используемые датчики ............................................................................. 10
2.1 Принцип работы акселерометров ..................................................... 11
2.1.1 МЭМС-акселерометр ADXL345: обзор устройства, технические
характеристики .......................................................................................... 14
2.1.2 МЭМС-акселерометр ADXL345: описание регистров ................. 16
2.2 Принцип работы гироскопов ................................................................ 28
2.2.1 МЭМС-гироскоп ITG-3200: обзор устройства, технические
характеристики .......................................................................................... 29
2.2.2 МЭМС-гироскоп ITG-3200: обзор регистров ................................ 31
2.3 Принцип работы магнитометров .......................................................... 38
2.3.1 Магнитометр HMC5883L: обзор устройства, технические
характеристики .......................................................................................... 39
2.3.3 Магнитометр HMC5883L: обзор регистров................................... 40
3. Определение ориентации с помощью МЭМС датчиков ........................ 48
3.1 Определение ориентации устройства по показаниям акселерометра
и магнитометра.............................................................................................. 48
3.2 Определение ориентации по показаниям гироскопа ......................... 50
4. Алгоритм реализации эксперимента ........................................................ 51
4.1 Обзор модуля HW-579 ............................................................................. 51
4.2 Обзор микроконтроллера Arduino Uno ................................................ 52
4.3. Обзор одноосного поворотного стенда СИО-1 ................................... 55
4.4 Протокол передачи данных I2C ............................................................ 56
5. Результаты .................................................................................................... 64
5.1 Листинг программы акселерометра ADXL345 ................................... 64
5.2 Листинг программы гироскопа ITG-3200 ........................................... 66
5.3 Листинг программы магнетометра HMC5883L ................................. 69
6

Введение
Область применения современных автономных и мобильных РТС в наше
время становится всё более обширной. Данные устройства используются, как
в военных или медицинских целях, так и в повседневном быту. Требования к
данным системам становятся всё строже, и один из наиболее важных вопросов
в соответствующих целях – обеспечение РТС совершенными навигационными
средствами для точной оценки координат положения физического тела в
пространстве.
В конкретных задачах оценка перемещения и ориентации при помощи
внешних датчиков и источников сигнала (например: GPS, ГЛОНАСС)
становится невозможной, поэтому, чтобы обеспечить устройство
навигационными возможностями, требуется использовать соответствующие
навигационные средства для решения вопросов комплексирования и
обработки информации, учёта особенностей кинематики, динамики
устройства и т.д. В таком случае становится необходимо создание
универсального навигационного комплекса, способного решить
соответствующие задачи для устройств любых размеров.
В данной работе использовался метод локальной навигации, в основе
которого лежат показания датчиков, встроенных в сам объект исследования.
Целью данной работы является исследование существующих задач АИС,
методов оценки перемещения исследуемого объекта в реальном времени, а так
же методов устранения систематических и случайных ошибок показаний,
закреплённого на исследуемом объекте модуля HW-579, включающий в себя
комплекс микроэлектромеханических датчиков: акселерометра, гироскопа,
магнитометра. Все исследования будут проведены посредством одноосного
поворотного стенда СИО-1.
7

1 Существующие методы навигации


В автономных мобильных устройствах, в работе которых необходимо
определять положение объекта в пространстве используется один из двух
возможных методов навигации: глобальный (ГН), либо локальный (ЛН)
методы навигации и ориентирования.
Метод ГН используется по большей части в морской и транспортной
навигации, и подразумевает формирование плана перемещения на основании
заранее заданной карты. Системы ЛН, в свою очередь, используются, как
правило, для планирования маршрутов и дальнейших манёвров. Они
используют показания собственных инерциальных датчиков, показывающих
изменения параметров объекта в инерциальной системе координат. Сферы
использования этого метода крайне обширны, и чаще всего метод
инерциальной навигации используется в мобильных устройствах РТС,
например, в беспилотных летательных аппаратах (БЛА), смартфонах или при
создании устройств виртуальной реальности, где точная оценка ориентации и
перемещения устройства крайне важна для корректного отображения
виртуальных объектов относительно наблюдателя.
Реализовать автономную инерциальную систему ЛК можно одним из двух
существующих способов: при помощи активных либо пассивных сенсоров.
- В первом случае используются датчики, которые излучают
определенный сигнал и вычисляют расстояние до объектов, от которых
излученный сигнал отразился и вернулся обратно на устройство. К
преимуществу данного метода можно отнести точность и простоту
вычислений в удобных условиях, но работа датчика сильно зависит от
внешних факторов, которые могут сильно влиять на его показания.
- Во втором случае используются пассивные датчики. Они независимы
от окружающих его объектов, и считывают положение, как правило, в
глобальной системе координат (например, используя вектор ускорения
свободного падения или магнитное поле Земли). Преимуществом
данного метода является практически полная невосприимчивость к
внешним факторам. К недостаткам относятся возникающие при
вычислении координат датчиком систематические и случайные
погрешности, которые необходимо устранять, что усложняет написание
программного кода устройства.
8

1.1 Используемый в данной работе метод ориентации посредством


МЭМС сенсоров
В данной работе будет изучена возможность применения инерциальных
систем навигации методом, использующим пассивные инерциальные датчики
навигации и ориентирования в пространстве. Будет рассмотрен реальный
подход к автономным системам навигации, а также метод уменьшения
систематических и случайных погрешностей вычисления местоположения
устройства с использованием инерциальной системы навигации. Будут
рассмотрены различные типы и виды датчиков, для углубления знаний в
области их работы и внедрения в разработку автономных навигационных
систем.
На основе показаний нескольких датчиков и реализуемого метода
устранения ошибок, наше устройство должно отслеживать перемещение
объекта, максимально точно и с минимальными погрешностями моделируя
маршрут движения в пространстве.
В производстве современных АИС, в основном, используются
бесплатформенные системы (БИНС). Гироскопы и акселерометры в данных
системах жестко закреплены к корпусу устройства. Выходные параметры
гироскопов попадают в микроконтроллер, вычисляющий изменения
положения акселерометров в опорной системе координат и, затем
формирующий нужные сигналы, которые в дальнейшем компенсируют
влияние гравитации Земли.
БИНС включают в себя многоосевые сенсоры, которые выдают данные
измерений для установления направления, пространственных позиций, углов,
поворотов в различных плоскостях БЛА или других объектов исследования.
Отдельным случаем использования БИНС являются курсовертикали (системы
определения курса и пространственного положения (англ. – Attitude and
Heading Reference System)). Курсовертикали пришли на замену традиционным
механическим гироскопическим АИС, чтобы снабдить устройства более
высокой точностью вычислений и надежностью. БИНС, обычно, включают в
себя трёхосевые МЭМС-гироскопы, МЭМС-акселерометры и магнитометры.
Иногда курсовертикали используют вместе с приемниками GPS, чтобы
предоставить более долгую стабильность гироскопов.
9

Работа БИНС основана на базе программной обработки данных от


датчиков и особенностей конструкции современных датчиков локальной
навигации. Преимущество этой системы достигнуто во многом благодаря
замене традиционных датчиков, имеющих в своей конструкции вращающиеся
части, на современные инерционные датчики, не имеющие в своём составе
таковых. Использование такой технологии сильно удешевило и упростило
процесс производства АИС.
Главное преимущество всех локальных систем навигации – это
автономность. АИС не подвержены влиянию таких внешних факторов, как
электромагнитные излучения или погодные явления. Также, такой метод
навигации не требует обязательного обеспечения обмена данными между БЛА
и пользователем.
Для ориентации нашего инерциального измерительного устройства в
трехмерном пространстве будет плату Arduino UNO, в состав которого входит
микроконтроллер ATmega328P. К плате будет подключен модуль HW-579,
который включает в себя комплекс из трёх МЭМС сенсоров: акселерометра,
гироскопа и магнитометра.
В нашем случае, с помощью имеющихся датчиков мы будем
рассчитывать вектор углов Эйлера или матрицу поворота устройства в
трехмерном пространстве.
10

2. Используемые датчики

– Трёхосевой цифровой магнитометр (компас) HMC5883L;

– МЭМС-акселерометр ADXL345;

– Трёхосевой МЭМС-гироскоп ITG-3200.

В датчиках, которые измеряют пространственное перемещение, как


правило, подвижные массы используются в роли чувствительных элементов.
При сдвигании подвижных масс в датчике под действием силы инерции во
время перемещения объекта, полученные изменённые параметры
чувствительного элемента преобразуются в электронный вид и отправляются
в микроконтроллер для дальнейшей обработки.
Ускорение – векторная величина, которая имеет численное значение и
направление. Для получения точных сведений об ускорении, требуются
измерительные преобразователи, которые измеряют оба этих показателя. В
качестве сенсоров в инерционных системах беспилотных летательных
аппаратах применяются комплексы датчиков, состоящих из акселерометров,
гироскопов и магнитометров. Первые измеряют параметр ускорения, вторые
рассчитывают параметр угловой скорости, по которой определяется
наклонность, третьи рассчитывают направление параллельных плоскости
осей, относительно магнитного поля Земли.
В типичных АИС с гироскопами опорная система координат
реализовывалась путём установки акселерометров и гироскопов на
устойчивой платформе в кардановом подвесе.

Рисунок 1.1.1 - Кардановый подвес


11

Описанный выше механизм позволяет изолировать сенсоры от влияния


поворотов БЛА, позволяя пространственному расположению акселерометров
оставаться постоянным относительно Земли при перемещении исследуемого
объекта.
Микроэлектромеханические датчики обычно изготавливают на
кремниевой подложке при помощи технологии микрообработки. Стандартные
размеры элементов МЭМС - устройств находятся в диапазоне от 1 мкм до 100
мкм, в то время как размер кристалла микросхемы имеет размеры от 20 мкм
до 1 мм.

2.1 Принцип работы акселерометров


Акселерометр – устройство, измеряющее кажущиеся ускорение. Прибор
измеряет отдельную пробную массу для каждой из осей. При возникновении
ускорений вдоль оси, пробная масса отклоняется, и данное отклонение
считывается соответствующим ёмкостным датчиком.

Рисунок 2.1.1 - Условная схема акселерометра


Однако, МЭМС – акселерометры используют несколько иные
принципы, нежели конденсаторные акселерометры.
12

Рисунок 2.1.2 - Внешний вид МЭМС акселерометра.


При условии, что устройство располагается на горизонтальной
поверхности, МЭМС акселерометр выведет ускорение в 0g на двух
параллельных плоскости осях X, Z и +1g на перпендикулярной плоскости оси
Y.

Рисунок 2.1.3 - Калибровка 3-ёх осевого акселерометра


13

Существуют различные типы акселерометров, такие как:


1) Акселерометры, основанные на пьезоэффекте
В данных сенсорах происходит давление грузика на
пьезокристалл, которое преобразуется в зависящий от давления
электрических ток. Зная параметры системы и используя значения
напряжения, мы можем найти силу, с которой грузик оказывает
давление на кристалл – и, следовательно, рассчитать искомое
ускорение.

Рисунок 2.1.4 - Электрическая схема акселерометра с пьезоэлементом с


емкостным делителем напряжения.
П1 – пьезоэлемент, C1, C2 – конденсаторы делителя.

Рисунок 2.1.5 - Условное изображение акселерометра, основанного на


пьезоэффекте
14

2) Термальные акселерометры.
Архитектура данных типов МЭМС-акселерометров
подразумевает использование пузырька воздуха, которое при
ускорении отклоняется от своего первоначального положения, что
фиксируется датчиками, а затем используется при расчёте ускорения.

Рисунок 2.1.6 - Условное изображение термального акселерометра.

2.1.1 МЭМС-акселерометр ADXL345: обзор устройства, технические


характеристики
ADXL345 способен измерять ускорение величиной, не превышающей
±16 g, с максимальным разрешением 13 бит, частота измерения способно
достигать 3200 Гц. Обладает низким энергопотреблением до 140 мкА, а
требуемое напряжение питания находится в диапазоне от 2 до 3,6 В. Данный
акселерометр поддерживает две интерфейсные шины связи SPI и I2C, имеет
два выхода прерываний, а также встроенный буфер для хранения данных.

Рисунок 2.1.1.1 - МЭМС-акселерометр ADXL345


Технические характеристики:
- Сверхнизкое энергопотребление: от 25 до 130 мкА
- Потребляемая мощность автоматически регулируется в зависимости от
полосы пропускания
- Выбираемое пользователем фиксированное разрешение (от 10
до 13 бит при ускорении ± 16 g)
15

- Минимизированная нагрузка на хост-процессор, при помощи


принципа организации данных FIFO с 32 уровнями выходных данных
- Диапазон напряжения питания и ввода-вывода: от 1,8 В до 3,6 В
- Цифровые интерфейсы SPI (3-х и 4-х проводные) и I2C
- Гибкие режимы прерывания
- Диапазоны измерений выбираются с помощью последовательной
команды
- Пропускная способность выбирается с помощью последовательной
команды
- Широкий температурный диапазон (от -40 до + 85 ° C)
- LGA-корпус (3 × 5 × 1 мм)
Встроенные функции:
• Обнаружение касания / двойного касания
• Мониторинг активности / неактивности
• Обнаружение свободного падения

Рисунок 2.1.1.2 - Функциональная блок-схема акселерометра ADXL345

Рисунок 2.1.1.3 - Подключение ADXL345 к Arduino UNO


16

2.1.2 МЭМС-акселерометр ADXL345: описание регистров


Акселерометр ADXL345 имеет достаточно много регистров настройки и
управления, перечень которых представлен в следующей таблице:

Таблица 2.1.2.1 - Список регистров ADXL345


Адрес Название Тип Состояние Описание
после
сброса
0 DEVID R 11100101 Номер ID
(0x00)
1-28 Reserved Зарезервировано
(0x01-
0x1C)
29 THRESH_TAP R/W 00000000 Значение уставки для
(0x1D) толчка
30 OFSX R/W 00000000 Смещение для оси X
(0x1E)
31 OFSY R/W 00000000 Смещение для оси Y
(0x1F)
32 OFSZ R/W 00000000 Смещение для оси Z
(0x20)
33 DUR R/W 00000000 Продолжительность
(0x21) нажатия
34 Latent R/W 00000000 Задержка перед
(0x22) повторным нажатием
35 Window R/W 00000000 Время для обнаружения
(0x23) второго нажатия
36 THRESH_ACT R/W 00000000 Порог активности
(0x24)
37 THRESH_INACT R/W 00000000 Порог неактивности
(0x25)
38 TIME_INACT R/W 00000000 Время бездействия
(0x26)
39 ACT_INACT_CTL R/W 00000000 Обнаружение
(0x27) активности/бездействия
40 THRESH_FF R/W 00000000 Значение порога
(0x28) свободного падения
41 TIME_FF R/W 00000000 Время свободного
(0x29) падения
42 TAP_AXES R/W 00000000 Привязка событий
(0x2A) толчка на оси
43 ACT_TAP_STATUS R 00000000 Регистр флагов событий
(0x2B) нажатий
44 BW_RATE R/W 00001010 Настройка частоты
(0x2C) дискретизации
45 POWER_CTL R/W 00000000 Настройка режима
(0x2D) энергосбережения
17

Продолжение таблицы 2.1.2.1


Адрес Название Тип Состояние Описание
после
сброса
46 INT_ENABLE R/W 00000000 Управление
(0x2E) прерываниями
47 INT_MAP R/W 00000000 Назначение выходных
(0x2F) линий для прерываний
48 INT_SOURCE R 00000010 Регистр флагов
(0x30) прерываний
49 DATA_FORMAT R/W 00000000 Настройка формата
(0x31) выходных данных
50 DATAX0 R 00000000 Выходные данные для
(0x32) оси X (младший байт)
51 DATAX1 R 00000000 Выходные данные для
(0x33) оси X (старший байт)
52 DATAY0 R 00000000 Выходные данные для
(0x34) оси Y (младший байт)
53 DATAY1 R 00000000 Выходные данные для
(0x35) оси Y (старший байт)
54 DATAZ0 R 00000000 Выходные данные для
(0x36) оси Z (младший байт)
55 DATAZ1 R 00000000 Выходные данные для
(0x37) оси Z (старший байт)
56 FIFO_CTL R/W 00000000 Настройка буфера FIFO
(0x38)
57 FIFO_STATUS R 00000000 Регистр состояния
(0x39) буфера FIFO
Тип: R – только чтение, R/W – чтение и запись

Регистр DEVID содержит ID номер акселерометра, значение которого


равно 0xE5. Каждый из регистров OFSX, OFSY и OFSZ состоит из восьми
битов и предлагает пользовательские настройки смещения по осям X, Y, Z.
Младшему значимому биту присвоен коэффициентом ускорения в 15,6 mg /
LSB (то есть 0x7F = 2g). Значение, сохраненное в регистрах смещения,
автоматически добавляется к данным ускорения, а результирующее значение
сохраняется в регистрах выходных данных.
Регистр THRESH_TAP имеет восемь битов и содержит пороговое значение
параметра ускорения. Это значение используется при обнаружении
кратковременного воздействия (толчка) на датчик. Коэффициент
масштабирования составляет 62,5 мг / LSB (то есть 0xFF = 16 г). Значение 0
может привести к нежелательному поведению, если включены прерывания
одним или двойным касанием.
18

Регистр DUR содержит значение, представляющее максимальное время, в


течение которого значение ускорения должно быть выше порога регистра
THRESH_TAP, чтобы считаться событием толчка. Расчётный коэффициент
составляет 625 мкс / LSB. Значение 0 отключает функции обнаружения
единого или двойного толчка.
Регистр LATENT содержит параметр, представляющий время ожидания от
обнаружения события толчка до начала ожидания второго толчка
(определяемого регистром Window). Расчётный коэффициент составляет 1,25
мс / мс. Значение 0 отключает функцию двойного толчка.

Таблица 2.1.2.2 - Биты регистра TAB_AXES

D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 Suppress TAP_X TAP_Y TAP_Z
enable enable enable
В регистре TAB_AXES можно задать оси X, Y, Z, по которым будут
отслеживаться толчки, для этого необходимо установить биты TAP_x enable.
Если бит TAP_x сброшен, то соответствующая ось не участвует в
обнаружении толчков. При установке бита Suppress, событие двойного толчка
не фиксируется, при условии, что время задержки (Latent) после обнаружения
первого толчка, возникает ускорение, превышающее значение уставки в
регистре THRESH_TAP.
Регистры THRESH_ACT и THRESH_INACT содержат пороговое значение
для обнаружения активности. Формат данных не подписан, поэтому величина
события активности сравнивается со значением в регистре THRESH_ACT.
Расчётный коэффициент составляет 62,5 мг / LSB. Значение 0 может привести
к нежелательному поведению, если включено прерывание активности.

Таблица 2.1.2.3 - Биты регистра ACT_INACT_CTL


D7 D6 D5 D4
ACT ac/dc ACT_X enable ACT_Y enable ACT_Z enable
D3 D2 D1 D0
INACT ac/dc INACT_X enable INACT_Y enable INACT_Z enable
Регистр ACT_INACT_CTL позволяет задать оси X, Y, Z, для которых будет
отслеживаться событие активности (биты ACT_x enable) или, наоборот,
бездействия (биты INACT_x enable). Для обеспечения возможности
19

отслеживания событий необходимо установить соответствующие биты. При


условии, что все биты обнулены, отслеживание активности отключается.
При отслеживании активности, сравнение ускорений по осям выполняется
с помощью логической функции “И”, то есть превышение порога, как
минимум по одной из трёх осей повлечёт обнаружение события активности.
Для бездействия используется функция “ИЛИ”, событие возникает, если
ускорение по все осям меньше уставки в течение времени, заданного
в регистре TIME_INACT. Кроме этого, можно задать режим сравнения
ускорений: если биты ACT ac/dc и INACT ac/dc сброшены, то используется
абсолютное сравнение, текущее значение сравнивается с уставкой. Если я
правильно понял, при установленных битах, с значением уставки сравнивается
результат разницы между двумя измерениями.
Регистр THRESH_FF содержит пороговое значение для обнаружения
свободного падения. Ускорение по всем осям сравнивается со значением в
THRESH_FF, чтобы определить, произошло ли событие свободного падения.
Расчётный коэффициент составляет 62,5 мг / LSB. Обратите внимание, что
значение 0 мг может привести к нежелательному поведению, если включено
прерывание свободного падения. Рекомендуются значения от 300 до 600 мг
(от 0x05 до 0x09).

Таблица 2.1.2.4 - Регистр ACT_TAP_STATUS

D7 D6 D5 D4 D3 D2 D1 D0
0 ACT_X ACT_Y ACT_Z Asleep TAP_X TAP_Y TAP_Z
source source source source source source
Биты ACT_x Source and TAP_x Source регистра ACT_TAP_STATUS
указывают первую ось, вовлеченную в событие касания или активности.
Значение 1 бита Asleep соответствует участию в событии, а значение 0
соответствует отсутствию участия. Когда новые данные доступны, эти биты
не очищаются, а перезаписываются новыми данными. Регистр
ACT_TAP_STATUS должен быть прочитан перед очисткой прерывания.
Отключение оси от участия очищает соответствующий бит источника, когда
происходит следующее действие или одно касание / двойное касание.
20

Таблица 2.1.2.5 - Регистр BW_RATE

D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 LOW_POWER Rate
Установка 0 в бите LOW_POWER регистра BW_RATE выбирает
нормальную работу, а установка 1 выбирает работу с пониженной мощностью,
которая имеет несколько более высокий уровень шума. Биты RATE регистра
BW_RATE выбирают полосу пропускания устройства и скорость передачи
данных (подробности см. В таблице 7 и таблице 8). Значение по умолчанию -
0x0A, что соответствует выходной скорости 100 Гц. Должна быть выбрана
скорость передачи данных, соответствующая выбранному протоколу связи и
частоте. Выбор слишком высокой скорости выходных данных с низкой
скоростью передачи данных приводит к отбрасыванию выборок.

Таблица 2.1.2.6 - Биты регистра POWER_CTL


D7 D6 D5 D4 D3 D2 D1 D0

0 0 Link AUTO_SLEEP Measure Sleep Wakeup


Регистр POWER_CTL обеспечивает возможностью управления
режимами энергосбережения. Значение 1 в бите LINK регистра POWER_CTL
соединения с включенными функциями активности и неактивности
задерживает запуск функции активности до тех пор, пока не будет обнаружена
неактивность. После обнаружения активности начинается обнаружение
неактивности, предотвращая обнаружение активности. Этот бит
последовательно связывает функции активности и неактивности. Когда этот
бит установлен в 0, функции неактивности и активности выполняются
одновременно. При очистке бита LINK рекомендуется перевести деталь в
режим ожидания, а затем вернуть ее в режим измерения с последующей
записью. Это сделано для того, чтобы обеспечить правильное смещение
устройства, если спящий режим отключен вручную; в противном случае
первые несколько выборок данных после сброса бита канала могут иметь
дополнительный шум, особенно если устройство было в спящем режиме,
когда бит был очищен.
Бит AUTO_SLEEP регистра POWER_CTL необходим для включения
функции автоматического перехода в спящий режим. Функция действенна
только при активном бите LINK. Этот режим способен автоматически
переводить акселерометр в спящий режим, если включена функция
бездействия и возникло данное событие. В случае, если дополнительно
21

включена функция активности, то при обнаружении данного события,


акселерометр автоматически просыпается и производит измерение в
нормальном режиме. Установка бита AUTO_SLEEP при сброшенном бите
LINK, не влияет на работу акселерометра. Сброс бита MEASURE переводит
акселерометр в режим ожидания с минимальным потреблением энергии, но
ускорение при этом не измеряется. Установка бита переводит акселерометр в
режим измерения.
Установка 0 в бите SLEEP переводит датчик в нормальный режим
работы, а установка 1 переводит деталь в режим ожидания. Спящий режим
подавляет DATA_READY, останавливает передачу данных в FIFO и
переключает частоту дискретизации ну, что указана в бит WAKEUP. В спящем
режиме можно использовать только функцию активности. Когда прерывание
DATA_READY подавляется, регистры выходных данных (регистр 0x32 -
регистр 0x37) по-прежнему обновляются с частотой дискретизации,
установленной битом WAKEUP (D1: D0).

Таблица 2.1.2.7 - Зависимость частоты обновления данных от битов Wakeup


Биты Частота
Wakeup обновления
данных
D1 D0 (измерения)

0 0 8 Гц

0 1 4 Гц

1 0 2 Гц

1 1 1 Гц

Таблица 2.1.2.8 - Биты регистров INT_ENABLE, INT_MAP, INT_SOURCE


D7 D6 D5 D4 D3 D2 D1 D0

DATA_RE SINGLE_ DOUBLE_ Activ Inactiv FREE_F Waterm Overr


ADY TAP TAP ity ity ALL ark un
Регистр INT_MAP, INT_ENABLE и INT_SOURSE имеют одни и те же биты.
С помощью них можно назначить прерывания на один из двух выходов
22

акселерометра. На выходе произойдёт изменение логического уровня через


функцию “ИЛИ”, если подать несколько прерываний на один вывод.
Эти регистры содержит биты разрешения различных прерываний.
Возможны прерывания по следующим событиям:
• обновление данных по измерению ускорения, бит DATA_READY;
• прерывание по событию толчка SINGLE_TAP;
• двойной толчок, бит DOUBLE_TAP;
• активность, бит Activity;
• бездействие, бит Inactivity;
• свободное падение, бит FREE_FALL;
• количество измерений достигло значения уставки, бит Watermark;
• переполнение буфера FIFO либо перезапись непрочитанных данных,
бит Overrun.
Установка битов в этом регистре в значение 1 позволяет их
соответствующим функциям генерировать прерывания, тогда как значение 0
предотвращает генерирование прерываний. Биты DATA_READY, Watermark,
Overrun разрешают только вывод прерывания; функции всегда включены.
Рекомендуется настроить прерывания перед включением.
Любые биты, которым присвоено значение 0, отправляют свои
соответствующие прерывания на вывод INT1, тогда как биты, которым
присвоено значение 1, отправляют свои соответствующие прерывания на
вывод INT2. Все выбранные прерывания для данного вывода работают через
логическую функцию “ИЛИ”.
Биты, установленные в 1 в этом регистре, указывают, что их
соответствующие функции вызвали соответствующие события, тогда как
значение 0 указывает, что событие не произошло. Биты DATA_READY,
Watermark и Overrun всегда устанавливаются, если происходят
соответствующие события, независимо от настроек регистра INT_ENABLE, и
очищаются путем чтения данных из регистров DATAX, DATAY и DATAZ.
Биты DATA_READY и Watermark могут требовать многократного чтения, как
указано в описаниях режимов FIFO в разделе FIFO. Другие биты и
соответствующие прерывания очищаются чтением регистра INT_SOURCE.
23

Таблица 2.1.2.9 - Регистр Data_Format


D7 D6 D5 D4 D3 D2 D1 D0
SELF_TEST SPI INT_INVERT 0 FULL_RES Justify Range
Регистр DATA_FORMAT управляет представлением данных в регистр
0x32 через регистр 0x37. Все данные, за исключением данных в диапазоне ±
16g, должны быть проигнорированы во избежание опрокидывания.
Значение 1 в бите SPI устанавливает устройство в режим 3-проводного
SPI, а значение 0 устанавливает устройство в режим 4-проводного SPI.
Значение 0 в бите INT_INVERT устанавливает прерывания на активный
высокий уровень, а значение 1 устанавливает прерывания на активный низкий
уровень.
Когда бит FULL_RES установлен в значение 1, устройство находится в
режиме полного разрешения, где выходное разрешение увеличивается с
диапазоном g, установленным битами Range, для поддержания расчётного
коэффициента в 4 mg / LSB. Когда бит FULL_RES установлен в 0, устройство
находится в 10-битном режиме, а биты диапазона определяют максимальный
диапазон g и расчётный коэффициент.
Бит Justify задает способ выравнивания результата измерения внутри
регистров DATAX, DATAY, DATAZ. Значение бита равное 1, устанавливает
левое выравнивание, 0 – правое.

Таблица 2.1.2.10 - Зависимость предельного значения измеряемого ускорения


от битов Range
Биты Range Предельное значение измеряемого ускорения

D1 D0

0 0 ±2 g

0 1 ±4 g

1 0 ±8 g

1 1 ±16 g
Регистры DATAX0, DATAX1, DATAY0, DATAY1, DATAZ0, DATAZ1
составляют восемь битов каждый и содержат выходные данные для каждой
оси. Регистр 0x32 и регистр 0x33 содержат выходные данные для оси x,
24

регистр 0x34 и регистр 0x35 содержат выходные данные для оси y, а регистр
0x36 и регистр 0x37 содержат выходные данные для оси z.
Выходные данные дополняются двумя, с DATAx0 в качестве младшего
значащего байта и DATAx1 в качестве старшего значащего байта, где x
представляет X, Y или Z. Регистр DATA_FORMAT (адрес 0x31) управляет
форматом данных. Рекомендуется выполнить многобайтовое чтение всех
регистров, чтобы предотвратить изменение данных между чтениями
последовательных регистров.

Таблица 2.1.2.11 - Биты регистра FIFO_CTL


D7 D6 D5 D4 D3 D2 D1 D0

FIFO_MODE Trigger Samples


Регистр FIFO_CTL управляет режимом работы кольцевого буфера
FIFO, это небольшая внутренняя память акселерометра, которая может
хранить результат 32-х измерений для каждой оси.

Таблица 2.1.2.12 - Режимы работы FIFO


Настройка
D7 D6 Режим Функция
0 0 Bypass FIFO обойдён.
0 1 FIFO FIFO собирает до 32 значений, а
затем прекращает сбор данных,
собирая новые данные только
тогда, когда FIFO не заполнен.
1 0 Stream FIFO содержит последние 32
значения. Когда FIFO заполнен,
самые старые данные
перезаписываются более новыми.
1 1 Trigger При запуске битом запуска FIFO
хранит последние выборки данных
перед триггером и затем
продолжает собирать данные до
полного заполнения. Новые
данные собираются только тогда,
когда FIFO не заполнен.
25

Значение 0 в бите Trigger регистра FIFO_CTL связывает событие запуска


режима Trigger с INT1, а значение 1 связывает событие запуска с INT2.
Функция битов Samples зависит от выбранного режима FIFO. Ввод
значения 0 в биты Samples немедленно устанавливает бит Watermark в
регистре INT_SOURCE независимо от того, какой режим FIFO выбран.
Нежелательная операция может возникнуть, если для битов выборок
используется значение 0, когда режим Trigger активен.

Таблица 2.1.2.13 - Функции битов Samples


Режим FIFO Функция Samples Bits
Bypass Нет
FIFO Указывает, сколько записей FIFO необходимо
для запуска прерывания Watermark.
Stream
Trigger Указывает, сколько выборок FIFO сохраняется в
буфере FIFO до события запуска.

Таблица 2.1.2.14 - Регистр FIFO_STATUS


D7 D6 D5 D4 D3 D2 D1 D0

FIFO_TRIG 0 Entries
Регистр FIFO_STATUS необходим для отображения состояния буфера.
Единица в бите FIFO_TRIG соответствует возникновению события
запуска, а 0 означает, что событие запуска FIFO не произошло.
Биты Entries сообщают, сколько значений данных хранится в FIFO.
Доступ к сбору данных из FIFO предоставляется через регистры
DATAX, DATAY и DATAZ. Чтения FIFO должны выполняться в пакетном
или многобайтовом режиме, поскольку каждый уровень FIFO очищается
после любого чтения (одного или нескольких байтов) FIFO. FIFO хранит
максимум 32 записи, что соответствует максимум 33 записям, доступным в
любой момент времени, потому что дополнительная запись доступна в
выходном фильтре устройства.
26

Формат выходных данных:


Конечные результаты измерений ускорения отправляются в регистры
выходных данных DATAX0, DATAX1, DATAY0, DATAY1, DATAZ0,
DATAZ1, по два байта на каждое ускорение. Формат выходных данных на
скоростях 3200 Гц и 1600 Гц изменяется в зависимости от режима работы
(полного разрешения или фиксированного 10-разрядного) и выбранного
диапазона вывода.
При использовании выходных скоростей передачи данных 3200 Гц или
1600 Гц в режиме FULL_SCREEN или 10-битной операции ± 2 g младший бит
выходного слова данных всегда равен 0. Когда данные выровнены по правому
краю, это соответствует биту D0 регистра DATAx0. Когда данные выровнены
по левому краю, а датчик работает в 10-битном режиме ± 2 g, младший
значимый бит (LSB) выходных данных — это бит D6 регистра DATAx0. В
режиме полного разрешения, когда данные выровнены по левому краю,
расположение LSB изменяется в соответствии с выбранным выходным
диапазоном.
Предел ±2 g в режиме расширенного расширения (FULL_SCREEN)
соответствует 10 бит D6 в регистре DATAx0, для ± 4 g - 11 бит D5 регистра
DATAx0; для ± 8 g - 12 бит D4 регистра DATAx0, и для ±16 g – 13 бит в
регистре DATAx0.
Использование 3200 Гц и 1600 Гц выходных скоростей передачи
данных для фиксированных 10-битных операций в выходных пределах ± 4 g,
± 8 g и ± 16 g обеспечивает младший бит, который действителен и
изменяется в зависимости от действующего на акселерометр ускорения.
Поэтому в этих режимах работы бит D0 не всегда равен 0, если выходные
данные выровнены по правому краю, а бит D6 не всегда равен 0, если
выходные данные выровнены по левому краю. Работа на любой скорости
передачи данных в 800 Гц или ниже также обеспечивает действительный
LSB во всех диапазонах и режимах, который изменяется в соответствии с
применяемым ускорением.
27

Рисунок 2.1.2.1 Форматирование данных в режиме расширенного разрешения

Результат измерения ускорения может принимать как положительные,


так и отрицательные значения, в зависимости от ориентации акселерометра.
Таблица 2.1.2.15 - Значения выходных данных в зависимости от величины
ускорения, разрешения, и предела измерения
Разрешение, Расчетный Величина Значение
предел коэффициент измеряемого выходных
измерения ускорения данных

10 бит, ±2 g 3,9 mg/LSB +1 g 256 (0x100)


Расширенное -1 g 768 (0x300)
разрешение:
±2 g

10 бит, ±4 g 7,8 mg/LSB +1 g 128 (0x80)

-1 g 896 (0x380)

10 бит, ±8 g 15,6 mg/LSB +1 g 64 (0x40)

-1 g 960 (0x3C0)
28

Продолжение таблицы 2.1.2.15


Разрешение, Расчетный Величина Значение
предел коэффициент измеряемого выходных
измерения ускорения данных
10 бит, ±16 g 31,2 mg/LSB +1 g 32 (0x20)

-1 g 992 (0x3E0)

Расширенное 3,9 mg/LSB +1 g 256 (0x100)


разрешение:
±4 g (11 бит) -1 g 1792 (0x700)

Расширенное 3,9 mg/LSB +1 g 256 (0x100)


разрешение:
±8 g (12 бит) -1 g 3840 (0xF00)

Расширенное 3,9 mg/LSB +1 g 256 (0x100)


разрешение:
±16 g (13 бит) -1 g 7936
(0x1F00)

2.2 Принцип работы гироскопов


МЭМС-гироскопы своём составе используют те же элементы, что МЭМС-
акселерометры, но их принципиальное отличие состоит в том, что из тех же
значений ускорений на оси вычисляются значения углов поворота устройства.
Гироскопические датчики отображают угловую скорость по трем осям в рад/с.
В том время, как акселерометры используют для ориентирования глобальную
систему координат, гироскопы используют систему координат самого
устройства, путём пересчитывания значений ускорения на проекции осей в
значения углов поворота исследуемого объекта.

Рисунок 2.2.1 - Внешний вид mems-гироскопа


29

2.2.1 МЭМС-гироскоп ITG-3200: обзор устройства, технические


характеристики
ITG-3200 – однокристальный 3-осевой MEMS-гироскоп с цифровым
выходом. Обеспечивает достаточно высокую производительность, невысокий
уровень шума и небольшую стоимость. Ударопрочность прибора позволяет
без последствий испытывать удары при ускорении до 10000g.
Помимо вывода для питания аналоговой части VDD, датчик имеет
отдельный вывод VLOGIC для питания интерфейса I2C. Напряжение на
выводе VLOGIC возможно в диапазоне 1,71 В…VDD. В спящем режиме
потребляемый ток составляет 5 мА и в рабочем режиме – 6,5 мкА.

Рисунок 2.2.1.1 - Ориентация осей чувствительности


гироскопа ITG-3200

Технические характеристики:
- Цифровой выход отсчетов по X-, Y- и Z-осям, при чувствительности
14,375 LSB на °/с и диапазоном измерения до ±2000 °/с;
- Три 16-разрядных АЦП обеспечивают непрерывное преобразование
без использования внешнего мультиплексора;
- Программируемый ФНЧ;
- Широкий диапазон напряжения питания аналоговой части (VDD):
2,1…3,6 В;
- Не требуются ФВЧ;
- Время готовности: 50 мс;
- Датчик температуры с цифровым выходом;
- Заводская калибровка;
- I2C-интерфейс (400 кГц);
- Генератор тактовой частоты со стабильностью ±2% во всем
температурном диапазоне;
- Дополнительные входы внешнего тактового сигнала частотой 32,768
кГц или 19,2 МГц;
корпус QFN-24 (4x4x0,9 мм).
30

Рисунок 2.2.1.2 - Функциональная блок-схема ITG-3200

Рисунок 2.2.1.3 - Схема включения ITG-3200


31

2.2.2 МЭМС-гироскоп ITG-3200: обзор регистров

Таблица 2.2.2.1 - Регистры МЭМС гироскопа ITG-3200


Расположение Десятичный Имя регистра Доступ
адреса адрес

0 0 WHO_AM_I R/W
15 21 SMPLRT_DIV R/W
16 22 DLPF_FS R/W
17 23 INT_CFG R/W
1A 26 INT_STATUS R
1B 27 TEMP_OUT_H R
1C 28 TEMP_OUT_L R
1D 29 GYRO_XOUT_H R
1E 30 GYRO_XOUT_L R
1F 31 GYRO_YOUT_H R
20 32 GYRO_YOUT_L R
21 33 GYRO_ZOUT_H R
22 34 GYRO_ZOUT_L R
3E 62 PWR_MGM R/W

Пространство регистров допускает однобайтовое чтение и запись, а


также пакетное чтение и запись. При выполнении пакетного чтения или
записи, указатель памяти будет увеличиваться до тех пор, пока чтение или
запись не прекратятся исполнителем, или пока указатель памяти не достигает
определенных зарезервированных регистров между регистрами 33 и 60.

Таблица 2.2.2.2 - Биты регистра WHO_AM_I


D7 D6 D5 D4 D3 D2 D1 D0
0 ID 0
Регистр WHO_AM_I используется для идентификации устройства.
Бит 0 зарезервирован и не задействован в начале работы.
32

Таблица 2.2.2.3 - Биты регистр SMPLRT_DIV


D7 D6 D5 D4 D3 D2 D1 D0
SMPLRT_DIV
Регистр SMPLRT_DIV определяет частоту дискретизации гироскопов
ITG-3200. Выходы гироскопов 1 кГц или 8 кГц, определяются настройкой
DLPF_CFG (см. регистр 22). Эта выборка затем фильтруется в цифровом
виде и доставляется в регистры датчика после числа циклов, определенных
этим регистром.
Частота дискретизации задается по следующей формуле:
𝐹𝑠𝑎𝑚𝑝𝑙𝑒 = 𝐹𝑖𝑛𝑡𝑒𝑟𝑛𝑎𝑙 /(𝑑𝑖𝑣𝑖𝑑𝑒𝑟 + 1), где Fsample = 1кГц или 8кГц.
Например, если внутренняя выборка имеет частоту 1 кГц, то установка
этого регистра в 7 даст следующее:
𝐹𝑠𝑎𝑚𝑝𝑙𝑒 = 1кГц/(7 + 1) = 125Гц
Параметры регистра SMPLRT_DIV (Делитель частоты дискретизации):
от 0 до 255

Таблица 2.2.2.4 - Биты регистра DLPF_FS


D7 D6 D5 D4 D3 D2 D1 D0
0 FS_SEL DLPF_CFG
Регистр DLPF_FS настраивает несколько параметров, связанных с
входным сигналом датчика.
Значение сброса при включении питания FS_SEL равно 00h. Для
правильной работы следует установить FS_SEL равным 03h.
Параметр FS_SEL позволяет настроить диапазон шкалы, как описано в
таблице ниже:

Таблица 2.2.2.5 - Параметр FS_SEL регистра DLPF_FS.


FS_SEL Гироскопический
диапазон
0 Зарезервировано
1 Зарезервировано
2 Зарезервировано
3 ±2000°/сек
33

Параметр DLPF_CFG устанавливает конфигурацию цифрового фильтра


нижних частот. Он также определяет внутреннюю частоту дискретизации,
используемую устройством, как показано в таблице ниже:

Таблица 2.2.2.6 - Внутренняя частота дискретизации параметра DLPF_CFG


DLPF_CFG Пропускная Частота
способность внутренней
фильтра низких выборки
частот
0 256 Гц 8 кГц
1 188 Гц 1 кГц
2 98 Гц 1 кГц
3 42 Гц 1 кГц
4 20 Гц 1 кГц
5 10 Гц 1 кГц
6 5 Гц 1 кГц
7 Зарезервировано Зарезервировано
Параметр FS_SEL – Полная выборка данных гироскопа.
Параметр DLPF_CFG - Конфигурация цифрового фильтра низких
частот и конфигурация внутренней частоты дискретизации
Характеристики DLPF: усиление и фазовые характеристики настроек
цифрового фильтра нижних частот (DLPF_CFG) показаны в рисунке ниже:
34

Рисунок 2.2.2.1 - Зависимость фазовых характеристик и усиления от частоты

Рисунок 2.2.2.2 - Параметры усиления и фазы в зависимости от настройки


цифрового фильтра

Таблица 2.2.2.7 - Биты регистра INT_CFG


D7 D6 D5 D4 D3 D2 D1 D0
INT_ RAW_
LATCH_ ITG_RDY
ACTL OPEN ANYRD_ - - RDY _
INT_EN _EN
2CLEAR EN
Регистр INT_CFG настраивает работу прерывания устройства. Могут
быть настроены: конфигурация выходного пина прерывания (INT), метод
фиксации/очистки прерывания, триггеры для прерывания.
Следует обратить внимание, что, если приложение требует считывания
каждого образца данных, лучше всего включить прерывание готовности
необработанных данных (RAW_RDY_EN). Это позволит приложению знать,
когда новые образцы данных доступны.
Параметр ACTL - Логический уровень для выходного ПИНа INT (1 =
активный низкий, 0 = активный высокий)
Параметр OPEN - Тип привода для выходного контакта INT (1 =
открытый сток, 0 = двухтактный)
Параметр LATCH_INT_EN - Режим фиксации (1 = фиксация до тех
пор, пока прерывание не будет окончено, 0 = импульс 50 мкс
35

Параметр INT_ANYRD_2CLEAR - Режим защелки (1 = чтение любого


регистра, 0 = регистр состояния “только чтение”)
Параметр ITG_RDY_EN - Включить прерывание, когда устройство
готово (PLL готово после смены источника синхронизации)
Параметр RAW_RDY_EN - Включить прерывание, когда данные
доступны.
0 - Загрузить нули в биты 1 и 3 регистра конфигурации прерывания.

Таблица 2.2.2.8 - Регистр INT_STATUS


D7 D6 D5 D4 D3 D2 D1 D0
RAW_
0 0 0 0 0 ITG_RDY 0 DATA_
RDY
Регистр INT_STATUS используется для определения состояния
прерываний ITG-3200. Каждый раз, когда срабатывает один из источников
прерывания, устанавливается соответствующий бит. Полярность контакта
прерывания (активный высокий / низкий) и тип фиксатора (импульсный или
фиксированный) не влияет на эти биты состояния.
Используется регистр конфигурации прерываний (23) для включения
триггеров прерываний. Если прерывание не включено, соответствующий бит
состояния не будет установлен.
При обычном использовании прерывание RAW_DATA_RDY
используется для определения того, когда новые данные датчика доступны в
любом из регистров датчика (от 27 до 32).
Биты статуса прерывания очищаются в соответствии с определением
INT_ANYRD_2CLEAR в регистре конфигурации прерываний (23).
Параметр ITG_RDY PLL – Готов.
Параметр RAW_DATA_RDY - Необработанные данные готовы.
36

Таблица 2.2.2.9 - Биты регистров 27-34


Регистр D7 D6 D5 D4 D3 D2 D1 D0
1B TEMP_OUT_H
1C TEMP_OUT_L
1D GYRO_XOUT_H
1E GYRO_XOUT_L
1F GYRO_YOUT_H
20 GYRO_YOUT_L
21 GYRO_ZOUT_H
22 GYRO_ZOUT_L
Регистры 27-34 содержат данные гироскопа и датчика температуры. В
любое время эти значения можно прочитать с устройства; однако лучше
всего использовать функцию прерывания, чтобы определять, когда новые
данные доступны.
Параметры регистров:
TEMP_OUT_H / L - 16-битные данные о температуре.
GYRO_XOUT_H / L - 16-битные гироскопические выходные данные.
GYRO_YOUT_H / L - 16-битные выходные данные Y-гироскопа.
GYRO_ZOUT_H / L - 16-битные выходные данные Y-гироскопа.

Таблица 2.2.2.10 - Биты регистра PWR_MGM


D7 D6 D5 D4 D3 D2 D1 D0
H_RESET SLEEP STBY STBY STBY CLK_SEL
_XG _YG _ZG
Регистр PWR_MGM используется для управления питанием, выбора
источника тактовых импульсов и выдачи общего сброса на устройство.
Установка бита SLEEP в регистр переводит устройство в режим сна с
очень низким энергопотреблением. В этом режиме активны только
последовательный интерфейс и внутренние регистры, что обеспечивает очень
низкий ток в режиме ожидания. Очистка этого бита возвращает устройство в
обычный режим. Для экономии энергии следует использовать отдельные
37

резервные настройки для каждого из гироскопов, если какая-либо ось


гироскопа не используется приложением.
Параметр CLK_SEL определяет источник синхронизации устройства
следующим образом:

Таблица 2.2.2.11 - Параметр CLK_SEL


CLK_SEL Clock Source
0 Внутренний генератор
1 PLL with X Gyro reference
2 PLL with Y Gyro reference
3 PLL with Z Gyro reference
4 ФАПЧ с внешним опорным
сигналом 32,768 кГц
5 ФАПЧ с внешним эталоном
19,2 МГц
6 Зарезервировано
7 Зарезервировано

Параметры регистра:
H_RESET - Сброс устройства и внутренних регистров до настроек по
умолчанию.
SLEEP - Включить режим сна с низким энергопотреблением.
STBY_XG - Перевести гироскоп X в режим ожидания (1 = режим ожидания,
0 = нормальный режим).
STBY_YG - Перевести гироскоп Y в режим ожидания (1 = режим ожидания,
0 = нормальный режим).
STBY_ZG - Перевести гироскоп Z в режим ожидания (1 = режим ожидания, 0
= нормальный режим).
CLK_SEL - Выбрать источник данных часов устройства.
38

2.3 Принцип работы магнитометров


Магнитометр (магнитный компас) рассчитывает трехмерный вектор
магнитной индукции окружающего его магнитного поля в мкTл. Для их
реализации используется AMR (анизотропная магниторезистивная)
технология. Работа магнитометров основана на изменении сопротивления
в тонкой полоске ферромагнита под воздействием внешнего магнитного
поля, направленному перпендикулярно току, который проходит в этой
полоске ферромагнитного материала. Чувствительный элемент
магнитометра, обычно, имеет конфигурацию моста и состоит из
магниторезисторов, которые в состоянии покоя имеют одинаковое
сопротивление R. Во время измерения показателей на мост подается
напряжение, и через резисторы начинает протекать ток. При подаче
напряжения на измерительный мост магнитного поля H, вектор
намагниченности в двух противоположно расположенных резисторах
моста смещается по направлению тока. Это вызывает увеличение их
сопротивления. В двух оставшихся, расположенных противоположно
резисторах моста, вектор намагниченности смещается против направления
тока, в результате их сопротивление уменьшается. В таком случае, в
линейном диапазоне выход датчика пропорционален приложенному
магнитному полю.

Рисунок 2.3.1 - Упрощенная функциональная схема магнитометра


39

2.3.1 Магнитометр HMC5883L: обзор устройства, технические


характеристики
Магнитометр HMC5883L представляет собой 3-х осевой цифровой
компас, работающий с шиной I2C. В качестве сенсоров используются
три магниторезистивных датчика. Данный магнитометр широко
используется в мобильных телефонах, ноутбуках, бытовой электронике,
системах автонавигации и в различных персональных навигационных
устройствах. Эти анизотропные, направленные датчики
характеризуются точной осевой чувствительностью и линейностью.
Полупроводниковая конструкция этих датчиков имеет достаточно
низкую чувствительность к поперечной оси и предназначена, как для
измерения направления устройства, так и магнитных полей Земли
величиной от 1 миллигаусса до 8 гауссов.

Рисунок 2.3.1.1: Трёхосевой цифровой магнитометр HMC5883L

Технические характеристики:
Напряжение питания VCC: 3,3 - 6 В
Точность направления от 1 ° до 2 °
Диапазон магнитного поля от -8 до +8 Гаусс
Интерфейс: I2C
Адрес: 0x1E (7-битный адрес)
Максимальная скорость передачи данных: 160 Гц
Уровень цифрового напряжения: 3,3 В
Размеры: (18,2x13,3x2,2мм)
Вес: 0,95г.
40

Рисунок 2.3.3.2 Схема подключения HMC5883L к Arduino UNO


2.3.3 Магнитометр HMC5883L: обзор регистров

Табл.2.3.3.1 - Карта регистров HMC5883L


Расположение адреса Имя Доступ
00 Configuration Register А Read/Write

01 Configuration Register B Read/Write


02 Mode Register Read/Write
03 Data Output X MSB Read
Register
04 Data Output X LSB Read
Register
05 Data Output Z MSB Read
Register
06 Data Output Z LSB Read
Register
07 Data Output Y MSB Read
Register
08 Data Output Y LSB Read
Register
09 Status Register Read
10 Identification Register A Read
11 Identification Register B Read
12 Identification Register C Read
41

Доступ к регистрам
Устройство использует адресный указатель, чтобы указать, в какое
место регистра следует читать или записывать. Эти местоположения указателя
отправляются от ведущего устройства к этому ведомому устройству и им
следуют 7-битный адрес плюс 1-битный идентификатор чтения / записи.
Чтобы свести к минимуму вмешательство пользователя, указатель
адреса обновляется автоматически. Автоматическое обновление указателя
адреса имеет две дополнительные функции: когда разрешен доступ к адресу
12 или выше, указатель обновляется до адреса 00, и при достижении адреса 08,
указатель возвращается к адресу 03. Логическое функционирование указателя
адреса показано ниже:
If (address pointer = 08) then address pointer = 03
Else if (address pointer >= 12) then address pointer = 0
Else (address pointer) = (address pointer) + 1
Значение указателя адреса не может быть прочитано через шину I2C.
Любая попытка прочитать несуществующий указатель адреса
возвращает 0, а любая попытка записи в несуществующий указатель адреса
будет проигнорирована устройством.
Чтобы переместить указатель адреса к случайному регистру, сначала
следует выполнить в этом регистре «запись» без данных.

Таблица 2.3.3.2 - Configuration Register A (CRA)

Configuration Register A используется при конфигурации устройства для


настройки скорости вывода данных. CRA0 - CRA7 указывают
местоположения битов. CRA7 обозначает первый бит в потоке данных. Число
в скобках указывает значение по умолчанию для этого бита.
42

Таблица 2.3.3.3 - Назначения битов регистра Configuration Register A

Биты Имя Описание


CRA7 CRA7 Этот бит должен зарезервирован и пока не
должен использоваться.
Устанавливают число замеров (семплов)
CRA6 to MA1 to перед выдачей результата измерения.
CRA5 MA0 Эти биты могут принимать значения: 00 = 1
(По умолчанию); 01 = 2; 10 = 4; 11 = 8
Биты скорости вывода данных. Эти биты
CRA4 to DO2 to устанавливают скорость, с которой данные
CRA2 DO0 записываются во все три регистра вывода
данных.
Биты конфигурации измерений.
CRA1 to MS1 to
Используются для настраивания типа
CRA0 MS0
измерения
В таблице ниже показаны все возможные для выбора скорости вывода в
режиме непрерывного измерения.
Все три канала должны быть измерены в пределах заданной выходной
скорости.
Другие скорости вывода с максимальной частотой 160 Гц могут быть
достигнуты путем мониторинга DRDY прерывателя в режиме одиночного
измерения.

Таблица 2.3.3.4 - Скорость вывода данных

DO2 DO1 DO0 Типичная скорость вывода данных (Гц)


0 0 0 0.75
0 0 1 1.5
0 1 0 3
0 1 1 7.5
1 0 0 15 (По-умолчанию)
1 0 1 30
1 1 0 75
1 1 1 Не используется
43

Таблица 2.3.3.5 - Режимы измерения

MS1 MS0 Режим измерения


Нормальная конфигурация измерений (по умолчанию). В
нормальной конфигурации измерения устройство следует
0 0 нормальному потоку измерения. Положительные и
отрицательные выводы резистивной нагрузки остаются
плавающими и имеют высокое сопротивление.
Конфигурация положительного смещения для осей X, Y и
0 1 Z. В этой конфигурации положительный ток протекает
через резистивную нагрузку для всех трех осей.
Конфигурация отрицательного смещения для осей X, Y и
1 0 Z. В этой конфигурации отрицательный ток протекает
через резистивную нагрузку для всех трех осей.
1 1 Эта конфигурация зарезервирована.

Таблица 2.3.3.6 - Регистр Configuration Register B (CRB)

В регистре Configuration Register B производится настройка


чувствительности датчика к магнитному полю. За эти установки отвечают
биты CRB7|CRB6|CRB5. Остальные биты CRB0-CRB4 не используются, но
для корректной работы они должны быть пустыми.
Таблица 2.3.3.7 – Биты регистра Configuration Register B

Биты Имя Описание


Биты конфигурации усиления. Эти биты
CRB7 to GN2 to настраивают усиление устройства.
CRB5 GN0 Конфигурация усиления является общей
для всех каналов.
CRB4 to Эти биты должны быть пусты для
0
CRB0 правильной работы
В таблице ниже приведены настройки номинального усиления. Когда
общая напряженность поля вызывает переполнение (насыщение) в одном из
выходных регистров данных, следует выбрать меньшее значение усиления.
44

Таблица 2.3.3.8 - Настройки усиления

Рекомендуемый Усиление
Диапазон
GN2 GN1 GN0 диапазон (LSB/
выхода
датчика поля Gauss)
0xF800–
0x07FF
0 0 0 ± 0.88 Ga 1370
(-2048–
2047)
0xF800–
1090 (по- 0x07FF
0 0 1 ± 1.3 Ga
умолчанию) (-2048–
2047)
0xF800–
0x07FF
0 1 0 ± 1.9 Ga 820
(-2048–
2047)
0xF800–
0x07FF
0 1 1 ± 2.5 Ga 660
(-2048–
2047)
0xF800–
1 0 0 ± 4.0 Ga 440 0x07FF (-
2048–2047)
0xF800–
0x07FF
1 0 1 ± 4.7 Ga 390
(-2048–
2047)
0xF800–
0x07FF
1 1 0 ± 5.6 Ga 330
(-2048–
2047)
0xF800–
0x07FF
1 1 1 ± 8.1 Ga 230
(-2048–
2047)
45

Таблица 2.3.3.9 - Регистр Mode Register (MR)

Регистр Mode Register – это 8-битный регистр, из которого можно


считывать данные и в которые можно записывать данные. Этот регистр
используется для выбора режима работы устройства. MR0 - MR7 указывают
местоположения битов, причем MR обозначают биты, которые находятся в
регистре режима. MR7 - первый бит потока данных. Число в скобках указывает
значение по умолчанию для этого бита. В данном регистре настраиваются
такие параметры как скорость работы на шине I2C и режим работы датчика.

Таблица 2.3.3.10 - Обозначения битов Mode Register


Бит Имя
Описание
Эти биты должны быть пусты для
MR7 to правильной работы. Бит MR7
0
MR2 устанавливается при каждой отдельной
операции измерения.
MR1 to MD1 to Режим выбора битов. Эти биты
MR0 MD0 определяют режим работы этого
устройства.

Таблица 2.3.3.11 - Data Output X/Y/Z Registers A and B


DXRA7 DXRA6 DXRA5 DXRA4 DXRA3 DXRA2 DXRA1 DXRA0

(0) (0) (0) (0) (0) (0) (0) (0)

DXRB7 DXRB6 DXRB5 DXRB4 DXRB3 DXRB2 DXRB1 DXRB0

(0) (0) (0) (0) (0) (0) (0) (0)


Регистры Data Output X Registers A and B представляют собой два 8-
битных регистра, регистр вывода данных “A” и регистр вывода данных B. Эти
регистры хранят результат измерения из канала X. Регистр вывода данных X
содержит LSB из результата измерения и регистр вывода данных X. “B”
содержит младший бит из результата измерения. Значение, хранящееся в этих
двух регистрах, является 16-разрядным значением в форме дополнения до 2,
диапазон которого составляет от 0xF800 до 0x07FF. От DXRA0 до DXRA7 и
от DXRB0 до DXRB7 указывают местоположения битов, причем DXRA и
DXRB обозначают биты, которые находятся в регистрах X выходных данных.
46

DXRA7 и DXRB7 обозначают первый бит потока данных. Число в скобках


указывает значение по умолчанию для этого бита.
В случае переполнения или неполных показаний АЦП для данного
канала, или при математическом переполнении во время измерения смещения
этот регистр данных будет содержать значение -4096. Это значение регистра
будет сброшено после следующего измерения.
Работа с регистром вывода данных
Когда один или несколько выходных регистров считываются, новые
данные не могут быть помещены ни в один из выходных регистров данных,
пока не будут прочитаны все шесть выходных регистров данных. Это
требование также влияет на DRDY и RDY, которые нельзя очистить, пока
новые данные не будут помещены во все выходные регистры.

Таблица 2.3.3.12 – Регистр Status Register


SR7 SR6 SR5 SR4 SR3 SR2 SR1 SR0

(0) (0) (0) (0) (0) (0) LOCK (0) RDY(0)


Регистр Status Register является 8-битным регистром только для чтения.
Этот регистр используется для указания статуса устройства. SR0 - SR7
указывают местоположения битов, причем SR обозначает биты, которые
находятся в регистре состояния. SR7 обозначает первый бит потока данных.

Таблица 2.3.3.13 - Обозначение битов регистра Status Register

Бит Имя Описание


SR7 to
0 Эти биты зарезервированы.
SR2
Блокировка регистра вывода данных. Когда
этот бит установлен, шесть регистров
вывода данных блокируются, и любые
новые данные не будут помещаться в эти
регистры до тех пор, пока не будет
SR1 LOCK
выполнено одно из трех условий. Первое:
все шесть байтов прочитаны или режим
изменен, второе: режим должен быть
изменён, третье: должна быть изменена
конфигурация измерения.
Продолжение таблица 2.3.3.13
47

Бит Имя Описание


Бит готовности. Устанавливается, когда
данные записываются во все шесть
регистров данных. Сбрасывается, когда
устройство инициирует запись в регистры
SR0 RDY
вывода данных и после записи в один или
несколько регистров вывода данных. Когда
бит RDY очищен, он должен оставаться
таким в течение 250 мкс.
Идентификационные регистры A, B и C используется для
идентификации устройства. IRA0 - IRA7 указывают местоположения битов,
причем IRA обозначает биты, которые находятся в регистрах Identification
Register A / B / C. IRA7 обозначает первый бит потока данных.

Таблица 2.3.3.14 - Стандартные значения регистров Identification Register A /


B
IRB7 IRB6 IRB5 IRB4 IRB3 IRB2 IRB1 IRB0

0 0 1 1 0 1 0 0

IRC7 IRC6 IRC5 IRC4 IRC3 IRC2 IRC1 IRC0

0 0 1 1 0 0 1 1
Таблица 2.3.3.15 - Стандартные значения регистра Identification Register C
48

3. Определение ориентации с помощью МЭМС датчиков


Для обеспечения объекта навигационными возможностями мы будем
использовать комплекс из датчиков: акселерометра, гироскопа, магнитометра,
которые в состав модуля HW-579. На выходе возможно получить один
параметр – вектор углов Эйлера (матрица поворота устройства в трёхмерном
пространстве).
АИС интегрирует все поступающие данные, следовательно этому
методу навигации свойственно накопление ошибок со временем, что является
его главным недостатком. Скорость движения устройства вычисляется путём
интегрирования измеряемого акселерометрами ускорения, и
накапливающиеся ошибки в этих измерениях создают постоянно
увеличивающуюся ошибку в показаниях скорости. Ошибки гироскопов
объясняются появлением дополнительных ошибок в определении
направления при измерении ускорения устройства и ускорения свободного
падения, а непрерывное интегрирование создаёт возрастание погрешностей.

3.1 Определение ориентации устройства по показаниям акселерометра и


магнитометра
Акселерометр и гироскоп позволяют определять положение БЛА в
глобальной системе координат. Это принципиальное отличие этих датчиков
от гироскопа.
Выберем ГСК таким образом, чтобы ось Y была направлена по вектору
ускорения свободного падения g, ось X была направлена по вектору проекции
m' вектора магнитного поля m на плоскость, перпендикулярную к вектору g, а
ось Z являлась их векторным произведением.

Рисунок 3.1.1 - Глобальная система координат


49

Рисунок 3.1.2 - Система координат устройства

На вход АИС подаются: значения вектора магнитной индукции,


значение угловой скорости и величину ускорения свободного падения в СКУ
(рис. 2.2.2). Для определения ориентации устройства в ГСК, требуется
построить матрицу перехода в ГСК.
Прежде всего требуется выстроить ортонормированный базис ГСУ в
СКУ.
Пусть вектор ускорения свободного падения, вычисленный
акселерометром, а вектор магнитной индукции, вычисленный
магнитометром.
Найдём вектор, перпендикулярный
(1)
Найдём проекцию на плоскость, перпендикулярный вектору
(2)
Нормировав вектора, мы найдём базис ГЛК в СКУ
(3)
Матрица перехода 𝑸𝑡 составляется из ранее полученных векторов
базиса.

Полученная матрица является матрицей поворота устройства и способно


описать ориентацию устройства относительно ГЛУ так же и в углах Эйлера.
50

3.2 Определение ориентации по показаниям гироскопа


Беря во внимание, что МЭМС гироскоп рассчитывает угловую скорость
при вращении прибора вокруг его центра в зависимости от СКУ, то угол
поворота датчика сравнительно исходных положений, возможно реализовать
численным интегрированием показаний по времени, измеряя
кратковременные интервалы между снятиями показаний датчика. Но из-за
возникающих шумов, и ошибок измерения, в вычислениях гироскопа будут
возникать случайные и систематические погрешности, приводящие к дрейфу
получаемых координат устройства (рис.3.2). Чтобы устранить эти
погрешности, показания гироскопа и остальных датчиков мы будем
пропускать через низкочастотный фильтр для сглаживания их показаний и
компенсирования дрейфа показаний гироскопа.

Рисунок 3.2 - Дрейф измерений МЭМС гироскоп


51

4. Алгоритм реализации эксперимента

Рисунок 4.1 Схема подключения модуля HW-579 к микроконтроллеру


Arduino
Исходя из сказанного ранее, очевидно, что основными функциональными
звеньями, необходимыми для проведения эксперимента являются:
1) Модуль HW-579, в состав которого входят все необходимые и подробно
рассмотренные ранее три инерциальных датчика.
2) Микроконтроллер Arduino Uno – плата с открытым исходным кодом, в
основе которого заложен микроконтроллер ATmega328P.
В микроконтроллер Arduino Uno будет загружен соответствующий
программный код для возможности снятия данных с модуля HW-579 и
дальнейшего устранения шумов, систематических и случайных ошибок
показаний датчиков методом низкочастотного фильтра.
Для тестирования работоспособности нашей автономной инерциальной
системы мы будем использовать одноосный поворотный стенд СИО-1 от
компании «НПК Диагностика».

4.1 Обзор модуля HW-579


HW-579 – компактный девятиосевой сенсор движения (корпус 2.1 см x
1.6 см x 0.3 см), в состав которого входят 4 инерциальных датчика:
акселерометр ADXL345, 2 гироскопа: ITG3200, ITG3205 и магнитометр
HMC5883L. Данное устройство полностью совместимо с системами,
работающими с напряжениями в 3-5 В, а так же способно передавать
цифровые данные по протоколу связи I2C, по которому и будет организовано
подключение к плате Arduino Uno, и которое будет подробно рассмотрено в
52

подразделе 4.4. Оно полностью совместимо со всеми распространёнными


платформами, в том числе Arduino.
HW-579 используют в задачах, где необходимо обеспечить устройство
возможностями локальной навигации, таких как: инерциальные системы
смартфонов, БЛА, системы дополненной, либо виртуальной реальности,
фитнес-трекеры, шагомеры и прочие портативные потребительские изделия.

Рисунок 4.1.1 - Модуль HW-579

Технические характеристики:
- 9 степеней свободы
- Сверхнизкая мощность: всего 23 мкА в режиме измерения
- Фиксированное 10-битное разрешение
- Полное разрешение до 13-битного разрешения при ± 16 g.
- Обнаружение свободного падения
- Диапазон напряжения питания: от 3,0 до 5,0 В
- Цифровые интерфейсы: I2C
- 4 инерциальных датчика в составе

4.2 Обзор микроконтроллера Arduino Uno


Arduino Uno — это микроконтроллерная плата на основе 8-битного
микроконтроллера ATmega328P. Наряду с ATmega328P он состоит из других
компонентов, таких как кварцевый генератор, регулятор напряжения и т.д. Для
поддержки микроконтроллера. Arduino Uno имеет 14 цифровых входов /
выходов (из которых 6 могут использоваться в качестве ШИМ-выходов), 6
аналоговых входов, USB-соединение, гнездо для разъема питания, разъем
ICSP и кнопку сброса.
53

Рисунок 4.2.1 - Микроконтроллерная плата Arduino Uno

Технические характеристики:
Микроконтроллер: ATmega328P - 8-битный микроконтроллер семейства
AVR
Рабочее напряжение: 5V
Рекомендуемое входное напряжение: 7-12V
Пределы входного напряжения: 6-20V
Выводы аналогового входа: 6 (A0 - A5)
Цифровые выводы ввода / вывода: 14 (из которых 6 обеспечивают выход
ШИМ)
Постоянный ток на контактах ввода / вывода: 40 мА
Постоянный ток на контакте 3.3 В: 50 мА
Флэш-память: 32 КБ (0,5 КБ используется для загрузчика)
SRAM: 2 КБ
EEPROM: 1 КБ
Частота (тактовая частота): 16 МГц
14 цифровых входов / выходов можно использовать в качестве входных
или выходных контактов с помощью функций pinMode (), digitalRead () и
digitalWrite (). Каждый вывод работает на напряжении 5В и максимально
доступный ток, который плата может обеспечивать или принимать - 40 мА.
Также имеет внутренний подтягивающий резистор 20-50 кОм, который
отключен по умолчанию. Из этих 14 контактов некоторые контакты имеют
определенные функции, перечисленные ниже:
54

Последовательные контакты 0 (Rx) и 1 (Tx): контакты Rx и Tx


используются для приема и передачи последовательных данных TTL. Они
связаны с соответствующим последовательным чипом ATmega328P USB to
TTL.
Внешние контакты прерывания 2 и 3: могут быть настроены для запуска
прерывания по низкому значению, по нарастающему или падающему фронту
или изменению значения.
Контакты 3, 5, 6, 9 и 11 ШИМ: обеспечивают 8-битный выход ШИМ с
помощью функции analogWrite ().
Контакты SPI 10 (SS), 11 (MOSI), 12 (MISO) и 13 (SCK): используются
для связи SPI.
Встроенный светодиод Вывод 13: этот вывод соединен со встроенным
светодиодом, когда вывод 13 активен - светодиод включен, а когда вывод 13
не активен, он выключен.
Помимо 14 цифровых выводов имеется 6 аналоговых входных выводов,
каждый из которых обеспечивает разрешение 10 битов, то есть 1024
различных значения. Они измеряют от 0 до 5 вольт, но этот предел можно
увеличить, используя вывод AREF с аналоговой функцией Reference ().
Аналоговый контакт 4 (SDA) и контакт 5 (SCA) также используются для
связи через интерфейс TWI с использованием библиотеки проводов.
Arduino Uno имеет несколько других выводов, как описано ниже:
AREF: используется при обеспечении опорного напряжения для
аналоговых входов с функцией analogReference ().
Reset Pin (Сбросить вывод): используется для сбрасывания
микроконтроллера.
Эксплуатация Arduino Uno:
Arduino можно использовать для связи с компьютером, другой платой
Arduino или другими микроконтроллерами. Микроконтроллер ATmega328P
обеспечивает последовательную связь UART TTL (5 В), которая может быть
выполнена с использованием цифрового контакта 0 (Rx) и цифрового контакта
1 (Tx). ATmega16U2 на плате передает эту последовательную связь по USB и
выглядит как виртуальный COM-порт для программного обеспечения на
компьютере. Микропрограмма ATmega16U2 использует стандартные
драйверы USB COM, и внешний драйвер не требуется. Однако в Windows
требуется INF-файл. Программное обеспечение Arduino включает в себя
последовательный монитор, который позволяет отправлять простые
55

текстовые данные на плату Arduino и с нее. На плате Arduino есть два


индикатора RX и TX, которые будут мигать, когда данные передаются через
USB-последовательный чип и USB-соединение с компьютером (не для
последовательной связи на контактах 0 и 1). Библиотека SoftwareSerial
позволяет осуществлять последовательную связь на любом из цифровых
выводов Uno. ATmega328P также поддерживает связи SPI и I2C, по которому
мы и будем соединять датчики к плате. Программное обеспечение Arduino
включает библиотеку Wire для упрощения использования шины I2C.

Рисунок 4.2.2 - Цифровые и аналоговые ПИНы ATmega328P

4.3. Обзор одноосного поворотного стенда СИО-1


Стенд поворотный одноосный СИО-1, применяется для калибровки и
испытания всевозможных инерциальных устройств, приборов, датчиков и
систем инерциальной навигации относительно вертикальной оси в режиме
имитации всевозможных характеристик перемещения.
Область применения: авиастроение, приборостроение, оптико-
механическая промышленность, научные исследования, испытательные,
поверочные и калибровочные лаборатории, ОТК, а также метрологические
центры.
Возможности данного устройства будут задействованы для
тестирования работоспособности разработанной АИС.
56

Рисунок 4.3.1 - Одноосный поворотный стенд СИО-1

Технические характеристики:
Ориентация оси вращения: вертикально
Крутящий момент двигателя: 12 Н/м
Нестабильность угловой скорости вращения: 0,01%
Максимальная скорость вращения: 60 об/мин
Интерфейс управления: ПУ / RS-232 / usb
Максимально потребляемая мощность, Вт: 300
Габариты, мм: 350x350x350
Масса устройства, кг: 30
Напряжение питающей сети, В: 220 ± 22
Частота питающей сети, Гц: 50 ± 1
Относительная влажность воздуха, %: 65 ± 15
Температура окружающей среды, °С: 20 ± 2
Минимальный срок службы, лет: 5
4.4 Протокол передачи данных I2C
I2C сочетает в себе лучшие функции SPI и UART. С помощью I2C
возможно подключить несколько ведомых устройств к одному ведущему
устройству (например, SPI), в таком случае может быть несколько ведущих
устройств, управляющих одним или несколькими подчиненными
устройствами. Это становится полезно, если встаёт необходимость, чтобы
несколько микроконтроллеров записывали данные на одну карту памяти или
отображали текст на одном ЖК-дисплее.
Так же, как и протокол связи UART, I2C использует только два провода
для передачи данных между устройствами:
57

Рисунок 4.4.1 - Передача данных между устройствами по протоколу I2C


SDA (Serial Data) - линия главного и подчиненного устройства для
отправки и получения данных.
SCL (Serial Clock) - линия, которая переносит тактовый сигнал.
I2C — это протокол последовательной связи, поэтому данные
передаются по битам по одному проводу (линия SDA).
Как и SPI, I2C является синхронным, поэтому вывод битов
синхронизируется с дискретизацией битов тактовым сигналом, совместно
используемым между ведущим и ведомым. Тактовый сигнал всегда
контролируется главным устройством.

Таблица 4.4.1 - Характеристики протокола связи I2C


Используемые провода 2
Максимальная скорость В стандартном режиме = 100 kbps
В ускоренном режиме = 400 kbps
В высокоскоростном режиме = 3.4 Mbps
В ультра высокоскоростном режиме = 5 Mbps
Синхронный / Синхронный
Асинхронный
Последовательный / Последовательный
параллельный
Максимальное число Без ограничений
главных устройств
Максимальное число 1008
подчинённых устройств
58

Принцип работы I2C


В I2C данные передаются в сообщениях. Сообщения разбиты на пакеты
данных. Каждое сообщение имеет адресный пакет, который содержит
двоичный адрес ведомого устройства, и один или несколько пакетов данных,
которые содержат передаваемые данные. Сообщение также включает условия
запуска и остановки, биты чтения / записи и биты ACK / NACK между каждым
пакетами данных:

Рисунок 4.4.2 - Структура сообщения


Условия запуска: линия SDA переключается с высокого уровня
напряжения на низкий уровень напряжения, прежде чем линия SCL
переключится с высокого на низкий уровень.
Условие останова: Линия SDA переключается с низкого уровня
напряжения на высокий уровень напряжения после того, как линия SCL
переключается с низкого уровня на высокий.
Адресный кадр: 7 или 10-битная последовательность, уникальная для
каждого ПУ, которая идентифицирует ПУ, когда главное устройство хочет с
ним связаться.
Бит чтения / записи: один бит, указывающий, отправляет ли главное
устройство данные на подчинённое устройство (низкий уровень напряжения)
или запрашивает данные у него (высокий уровень напряжения).
Бит ACK / NACK: за каждым кадром в сообщении следует бит
подтверждения / отсутствия подтверждения. Если кадр адреса или кадр
данных был успешно принят, бит ACK возвращается отправителю от
принимающего устройства.
Адресация
I2C не имеет подчиненных линий выбора, таких как SPI, поэтому ему
нужен другой способ сообщить ведомому, что ему отправляются данные, а не
другому ведомому. Это делается путем решения. Адресный фрейм всегда
является первым фреймом после начального бита в новом сообщении.
59

Главное устройство отправляет каждому подключённому к нему


устройству адрес ПУ, с которым он хочет установить связь, Каждое ПУ затем
сравнивает адрес, отправленный от ведущего, с его собственным адресом.
Если адрес совпадает, он отправляет бит ACK низкого напряжения обратно
главному. Если адрес не совпадает, ПУ ничего не делает, и линия SDA
остается высокой.
Чтение / запись бита
Адресный фрейм включает один бит в конце, который сообщает ПУ,
хочет ГУ записать в него данные или, наоборот, получить. Если мастер хочет
отправить данные на ПУ, бит чтения / записи работает на низком уровне
напряжения. Если ПУ запрашивает данные у ГУ, бит имеет высокий уровень
напряжения.
Фреймы данных
После того, как главное устройство обнаружит бит ACK от
подчинённого, первый фрейм данных будет готов к отправке.
Фрейм данных всегда имеет длину 8 бит и отправляется в первую
очередь самым старшим битом. За каждым фреймом данных сразу следует бит
ACK / NACK, чтобы проверить, что фрейм был принят успешно. Бит ACK
должен быть получен либо от ГУ, либо ПУ (в зависимости от того, кто
отправляет данные), прежде чем может быть отправлен следующий фрейм
данных.
После того, как все фреймы данных были отправлены, главное
устройство может отправить условие останова подчинённому, чтобы
остановить передачу. Условие останова — это переход напряжения от низкого
к высокому на линии SDA после перехода от низкого к высокому на линии
SCL, при этом линия SCL остается высокой.
Шаги передачи данных по протоколу I2C
1. Главное устройство отправляет условие запуска каждому
подключенному подчинённому устройству, переключая линию SDA с
высокого уровня напряжения на низкий уровень напряжения, прежде чем
переключать линию SCL с высокого уровня на низкий:
60

Рисунок 4.4.3 - Двунаправленные линии связи


2. ГУ отправляет каждому ПУ бит чтения / записи и 7 или 10-битный
адрес ПУ, с которым он хочет установить связь:

Рисунок 4.4.4 - Передача адресов ПУ

3. Каждое подчинённое устройство сравнивает адрес, отправленный


главным устройством, со своим собственным адресом. Если адрес совпадает,
ПУ возвращает бит ACK, переводя линию SDA в низкий уровень на один бит.
Если адрес от ГУ не совпадает с собственным адресом ПУ, то подчинённое
устройство оставляет линию SDA высокой.
61

Рисунок 4.4.5 - Сравнивание полученных адресов подчинёнными


устройствами

4. ГУ отправляет или получает фрейм данных:

Рисунок 4.4.6 - Отправление и получение фреймов главным устройством

5. После того как каждый фрейм данных был передан,


принимающее устройство возвращает еще один бит ACK отправителю,
чтобы подтвердить успешное получение фрейма:
62

Рисунок 4.4.7 - Подтверждение успешного получения фрейма ПУ3


6. Чтобы остановить передачу данных, ГУ отправляет состояние
останова подчинённому, переключая высокий уровень SCL перед
переключением высокого уровня SDA:

Рисунок 4.4.8 - Останов передачи данных


63

Преимущества и недостатки протокола связи I2C:


Существует ряд факторов, которые могут усложнить работу с протоколом
связи I2C, но его преимущества позволяют использовать более широкий
спектр возможностей при работе, по сравнению с другими протоколами
передачи данных:
Преимущества:
- Использует только два провода.
- Поддерживает использование большого количества главных и
подчинённых устройств.
- Бит ACK / NACK даёт возможность подтверждения того, что каждый
фрейм был успешно передан.
- Аппаратное обеспечение менее сложное, чем UART.
- Данный протокол хорошо известен и широко используем повсеместно.
Недостатки:
- Скорость передачи данных медленнее, чем в протоколе SPI.
- Размер фрейма ограничен 8 битами.
- Для реализации требуется более сложное оборудование, чем в
протоколе SPI.
64

5. Результаты
В данном разделе продемонстрированы готовые решения проблем датчиков
систем инерциальной навигации в виде программных кодов, считывающих
данные ориентации, а также устраняющих шумы и погрешности показаний
датчиков модуля HW-579 с помощью фильтра нижних частот. Для упрощения
кода будем использовать готовые библиотеки: ADXL345.h, HMC5883l.h,
ITG3200.h.

5.1 Листинг программы акселерометра ADXL345


#include <Wire.h>

#include <ADXL345.h>

ADXL345 accelerometer;

void setup(void)

Serial.begin(9600);

Serial.println("Initialize ADXL345");

if (!accelerometer.begin())

Serial.println("Could not find a valid ADXL345 sensor, check


wiring!");

delay(500);

accelerometer.setRange(ADXL345_RANGE_16G);

void loop(void)

Vector norm = accelerometer.readNormalize();

// Фильтрация значений

Vector filtered = accelerometer.lowPassFilter(norm, 0.5);


65
// Считаем Тангаж и Крен

int pitch = -(atan2(norm.XAxis, sqrt(norm.YAxis * norm.YAxis +


norm.ZAxis * norm.ZAxis)) * 180.0) / M_PI;

int roll = (atan2(norm.YAxis, norm.ZAxis) * 180.0) / M_PI;

// Считаем Тангаж и Крен (по отфильтрованным данным)

int fpitch = -(atan2(filtered.XAxis, sqrt(filtered.YAxis *


filtered.YAxis + filtered.ZAxis * filtered.ZAxis)) * 180.0) / M_PI;

int froll = (atan2(filtered.YAxis, filtered.ZAxis) * 180.0) / M_PI;

// Вывод

Serial.print(" Тангаж = ");

Serial.print(pitch);

Serial.print(" Крен = ");

Serial.print(roll);

// Вывод (отфильтрованный)

Serial.print(" (фильтр)Тангаж = ");

Serial.print(fpitch);

Serial.print(" (фильтр)Крен = ");

Serial.print(froll);

Serial.println();

delay(100);

Рисунок 5.1.1 - Значения тангажа и крена до и после фильтрации


66

5.2 Листинг программы гироскопа ITG-3200


#include <Wire.h>

#include <ITG3200.h>

ITG3200 gyro = ITG3200();

float x, y, z;

int ix, iy, iz;

void setup(void) {

Serial.begin(9600);

Wire.begin(); // если возникают проблемы с гироскопом в чтении


значений по осям

delay(1000);

// Возможно использовать ITG3200_ADDR_AD0_HIGH или


ITG3200_ADDR_AD0_LOW в качестве адреса ITG3200

gyro.init(ITG3200_ADDR_AD0_LOW);

Serial.print("zeroCalibrating...");

gyro.zeroCalibrate(2500, 2);

Serial.println("done.");

void loop(void) {

while (gyro.isRawDataReady()) {

/*

// Считывание некалиброванных необработанных значений с датчика

gyro.readGyroRaw(&ix,&iy,&iz);

Serial.print("X1:");

Serial.print(ix);

Serial.print(" Y:");

Serial.print(iy);

Serial.print(" Z:");
67
Serial.println(iz);

*/

/*

//Считывание откалиброванных необработанных значений с датчика

gyro.readGyroRawCal(&ix,&iy,&iz);

Serial.print("X2:");

Serial.print(ix);

Serial.print(" Y:");

Serial.print(iy);

Serial.print(" Z:");

Serial.println(iz);

*/

// Чтение откалиброванных значений в град / сек

gyro.readGyro(&x, &y, &z);

Serial.print("X3:");

Serial.print(x);

Serial.print(" Y:");

Serial.print(y);

Serial.print(" Z:");

Serial.println(z);

delay(50);

}
68

Рисунок 5.2.1 – Данные гироскопа, прошедшие фильтрацию

Рисунок 5.2.1 – Необработанные показатели гироскопа


69

5.3 Листинг программы магнетометра HMC5883L


#include <Wire.h>

#include <HMC5883L.h>

HMC5883L compass;

void setup()

Serial.begin(9600);

// инициализация HMC5883L

Serial.println("Initialize HMC5883L");

while (!compass.begin())

Serial.println("HMC5883L не найден, проверьте соединение!");

delay(500);

// Установка диапазона измерения

// +/- 0.88 Ga: HMC5883L_RANGE_0_88GA

// +/- 1.30 Ga: HMC5883L_RANGE_1_3GA (по умолчанию)

// +/- 1.90 Ga: HMC5883L_RANGE_1_9GA

// +/- 2.50 Ga: HMC5883L_RANGE_2_5GA

// +/- 4.00 Ga: HMC5883L_RANGE_4GA

// +/- 4.70 Ga: HMC5883L_RANGE_4_7GA

// +/- 5.60 Ga: HMC5883L_RANGE_5_6GA

// +/- 8.10 Ga: HMC5883L_RANGE_8_1GA

compass.setRange(HMC5883L_RANGE_1_3GA);

// Установка режима работы

// Спящий режим: HMC5883L_IDLE

// Единое измерение: HMC5883L_SINGLE


70
// Непрерывное измерение: HMC5883L_CONTINOUS (по умолчанию)

compass.setMeasurementMode(HMC5883L_CONTINOUS);

// Установка частоты измерения

// 0.75Hz: HMC5883L_DATARATE_0_75HZ

// 1.50Hz: HMC5883L_DATARATE_1_5HZ

// 3.00Hz: HMC5883L_DATARATE_3HZ

// 7.50Hz: HMC5883L_DATARATE_7_50HZ

// 15.00Hz: HMC5883L_DATARATE_15HZ (по умолчанию)

// 30.00Hz: HMC5883L_DATARATE_30HZ

// 75.00Hz: HMC5883L_DATARATE_75HZ

compass.setDataRate(HMC5883L_DATARATE_15HZ);

// Число усредненных выборок

// 1 probka: HMC5883L_SAMPLES_1 (по умолчанию)

// 2 probki: HMC5883L_SAMPLES_2

// 4 probki: HMC5883L_SAMPLES_4

// 8 probki: HMC5883L_SAMPLES_8

compass.setSamples(HMC5883L_SAMPLES_1);

void loop()

// Поучение необработанных значений

Vector raw = compass.readRaw();

// Поучение нормализованных значений

Vector norm = compass.readNormalize();

Serial.print(" Xraw = ");

Serial.print(raw.XAxis);

Serial.print(" Yraw = ");


71
Serial.print(raw.YAxis);

Serial.print(" Zraw = ");

Serial.print(raw.ZAxis);

Serial.print(" Xnorm = ");

Serial.print(norm.XAxis);

Serial.print(" Ynorm = ");

Serial.print(norm.YAxis);

Serial.print(" ZNorm = ");

Serial.print(norm.ZAxis);

Serial.println();

delay(100);

Рисунок 5.3.1 – Необработанные данные магнетометра

Рисунок 5.3.2 - Данные магнетометра, прошедшие фильтрацию


72

6 Выводы
В данной работе был рассмотрен способ ориентирования устройства в
пространстве с помощью инерциальных датчиков навигации и
ориентирования, были описаны положительные стороны и сложности в
реализации автономных инерциальных систем, используемых в разработке
современных беспилотных летательных аппаратов.
Подробно описаны технические, программные подробности и принципы
работы инерциальных датчиков ADXL345, ITG3200, HMC5885L, входящих в
состав модуля HW-579, были рассмотрены преимущества и механизм
действия используемого в работе протокола связи I2C.
По итогам анализа метода навигации, использующего пассивные датчики,
можно сделать вывод, что данный подход совмещает в себе простоту
проектирования, автономность и отличительную точность, вызванную
отсутствием какого-либо воздействия элементов друг на друга.
Был поставлен эксперимент, в ходе которого реализован метод программного
устранения систематических, случайных погрешностей и шумов в показаниях
инерциальных датчиков, используемых в системах навигации БЛА. Были
сняты показания датчиков до и после фильтрации, по которым заметно
частичное устранение погрешностей выходных данных, по сравнению с
данными, не прошедшими данную обработку. В рамках проведения описанной
работы, в качестве управляющего звена, была использована
микроконтроллерная плата Arduino Uno, к которой по протоколу связи I2C
был соединён инерциальный модуль HW-579.
73

Литература:
Черноножкин В.А., Половко С.А. Система локальной навигации для
наземных мобильных роботов //Научно-технический вестник СПбГУ ИТМО.
2008. №57. С. 13-22.
Пьезоэлектрические акселерометры с двумя динамическими и частотными
диапазонами [Текст] / Янчич, Джения, Янчич // Известия высших учебных
заведений. Поволжский регион. Технические науки. — 2013.— №3.— С. 127-
134
В.В.Мелешко, О.И.Нестеренко. Бесплатформенные инерциальные
навигационные системы. Учебное пособие. – Кировогорад.: ПОЛИМЕД –
Сервис.2011. – 171 с
В.В.Матвеев, В.Я.Распопов. Основы построения бесплатформенных
инерциальных навигационных систем. - СПб: ГНЦ РФ ОАО «Концерн
«ЦНИИ «Электроприбор», 2009 – 280с.
Документация ADXL345 [Электронный ресурс]. -
https://www.alldatasheet.com/datasheet-pdf/pdf/254714/AD/ADXL345.html
Документация ITG3200 [Электронный ресурс]. -
https://www.alldatasheet.com/datasheet-pdf/pdf/1140869/TDK/ITG-3200.html
Документация HMC5885L [Электронный ресурс]. -
Документация одноосного поворотного стенда СИО-1 [Электронный ресурс].
- https://www.alldatasheet.com/datasheet-
pdf/pdf/428790/HONEYWELL/HMC5883L.html

Вам также может понравиться