Для примера возьмем инерциальный модуль GY-91 на основе датчика MPU-9255 производства InvenSenceInc. Почему именно этот датчик? Во-первых, датчики положения являются основой инерциальных навигационных систем роботов способных передвигаться в пространстве. Во-вторых, выбранный датчик достаточно сложен и потому интересен. MPU-9255 это 10-параметрический датчик, в миниатюрном корпусе которого спрятан 3-х осевой акселерометр, 3-осевой гироскоп, 3-осевой компас, датчик температуры кристалла, процессор для предварительной обработки измерений (DigitalMotionProcessor, DMP), два последовательных интерфейса, один из которых предназначен для коммуникации с хостом, второй – auxMaster — для работы с дополнительными датчиками системы. В-третьих, датчик доступен во множестве интернет-магазинов для радиолюбителей по приемлемой цене, причем не только в виде чипа, но также в виде законченного устройства на печатной плате (рис. 1), с разъемом – штыревой линейкой с шагом 2,54 мм, удобным для подключения датчика к отладочному набору. На печатной плате выбранного модуля GY-91 кроме MPU-9255 установлен датчик давления BMP-280, что дополнительно расширяет пространство для творчества.
Рис. 1. Датчик MPU-9255 в виде законченного устройства на печатной плате
Структурная схема MPU-9255 представлена на рис.2.
Рис. 2. Структурная схема датчика MPU-9255
Микросхема представляет собой мультикристальную сборку, в которой в качестве инерциального сенсора (акселерометр и гироскоп) взят кристалл аналогичный MPU-6555 все той же InvenSenceInc, а в качестве компаса- магнетометра используется кристалл AK8963 производства Asahi Kasei Microdevices Corporation. Кристаллы инерциального сенсора и магнетометра имеют отличия во временной диаграмме работы, которые необходимо учесть при разработке кода встраиваемого программного обеспечения. Остановимся подробнее на этих особенностях.
1. Оба кристалла после включения питания оказываются в режиме «сна». Для перевода кристаллов инерциального сенсора и магнетометра в рабочий режим необходимо их «разбудить», для чего записать определенные значения в специальные регистры. Какие именно значения, в какие конкретно регистры уточним чуть позже.
2. Скорости обновления данных датчиков существенно отличаются друг от друга. Максимальная частота обновления данных гироскопа 8 кГц, акселерометра 4 кГц, компаса 100 Гц.
Согласно спецификации [1] на датчик MPU-9255 временная диаграмма чтения одного байта данных из регистра MPU-9255 (рис.3) совпадает с временной диаграммой транзакции записи-чтения аппаратной реализации интерфейса I2C микроконтроллерной подсистемы или IP-ядра CoreI2C матрицы SmartFusion2.
Рис. 3. Временная диаграмма чтения одного байта из MPU-9150
Master |
S |
Slave address |
W |
|
Register address |
|
S |
|
|
NACK |
P |
Slave |
|
|
|
ACK |
|
ACK |
|
ACK |
Data |
|
|
Со стороны программиста необходимо лишь заполнить 2 поля Slaveaddress и Registeraddress и прочитать получаемые от модуля данные в поле Data. О своевременном выставлении сигналов S, W(R), ACK, NACK, P и о корректной их обработке позаботились создатели микросхемы SmartFusion2 и IP-ядра coreI2C. Разработчику достаточно помнить, что эти сигналы есть во временной диаграмме работы интерфейса.
Поскольку абсолютное большинство бюджетных устройств типа выбранного нами модуля GY-91 собирается в лабораториях, для которых качество не всегда важнее количества, первое с чего стоит начать это проверить работоспособность прибора. К счастью, проверить работоспособность нашего датчика можно с помощью уже созданного нами приложения, разработка которого описана в предыдущей статье цикла [3].
В абсолютном большинстве случаев датчики с цифровым интерфейсом имеют специальный регистр, в котором записан идентификатор микросхемы. Наш датчик не является исключением из этого правила. В описании [2] регистров MPU-9255 сказано, что в регистре под номером 0х75h с говорящим названием Who_Am_I зашит код изделия — число 0x73h. Данный регистр доступен только для чтения и может быть прочитан, в отличие от большинства остальных регистров датчика, в том числе, в режиме «сна». Проверим наш модуль с сенсором MPU-9255, для этого прошьём наш SmartFusion2 уже имеющейся у нас конфигурационной последовательностью проекта M2S010_I2C_MMMS, подключим к отладочному набору модуль GY-91, отладочный набор к персональному компьютеру через переходник UART-Bluetoth, запустим приложение MicrosemiM2S_I2C.exeописанное в предыдущей статье цикла.
Чтение данных выполним с помощью аппаратного контроллера шины I2CMSS_I2C_0, сконфигурированного для работы в качестве ведущего устройства шины (I2CMaster).
Для соединения персонального компьютера с отладочным набором по UART, нажимаем кнопку «Connect» в окне приложения. Теперь в поле «Slaveaddress» необходимо ввести адрес нашего датчика в шестнадцатеричном формате, т.е. число «68», в окне «No. OfBytestoRead» введем количество байт, которое хотим прочитать из устройства, т.е. «1». В окне «Write/ReadData (ASCII)» введем адрес регистра для чтения в символьной форме, т.е. символ «u». Выполним последовательно транзакции I2C_Writeи I2C_Read нажимая кнопки Writeи Read. Результат представлен на рис. 4. Прочитанный из MPU-9255 символ «s» имеет код ASCII0х73h, то есть полностью соответствует значению, указанному в документации на MPU-9255.
Рис. 4. Результат выполнения транзакций I2C_Write и I2C_Read
Теперь разработаем приложение, которое будет опрашивать наш модуль GY-91 по I2Cс частотой 10 раз в секунду и отправлять полученные данные по UARTв персональный компьютер для визуализации измерений. Для реализации описанных функций нам понадобится следующие компоненты микроконтроллерной подсистемы SmartFusion2 и стандартного каталога ядер LiberoSoC 11.8: один интерфейс UART, один интерфейс I2C, тактовый генератор, генератор сигнала сброса, ядро двунаправленного буфера ввода вывода BIBUF. Все указанные компоненты уже использовались нами в предыдущих проектах, настройка указанных компонент не отличается от таковой описанной в предыдущих статьях цикла [3]. Верхний уровень проекта СнК представлен на рис. 5.
Рис. 5. Верхний уровень проекта СнК
Переходим к разработке кода встраиваемого приложения. Кратко процедура опроса датчиков, выполняемая микропроцессором, должна учесть все особенности аппаратной части, описанные выше и выполнить ряд шагов, то есть:
1) Перевести сенсоры из спящего режима в рабочий;
2) Включить шунтирующий мультиплексор для соединения основной и дополнительной шин I2C;
3) Считать данные сенсоров;
4) Скомпоновать массив данных полученных от датчиков в единый массив;
5) Выдать скомпонованный массив данных через интерфейс UARTв ПК для обработки приложением верхнего уровня.
6) Сформировать необходимый интервал временной задержки между чтением данных.
Фрагмент код главной процедуры встраиваемого программного обеспечения, выполняющий опрос датчика компоновку данных и выдачу результата по UARTпредставлен на рис. 6.
Проект LiberoSoC 11.8, включающий описание конфигурации микроконтроллерной подсистемы и код встраиваемого приложения доступен по ссылке [4]. Данный пользовательский проект разработан на основе опорного проекта Microsemiпо работе с шиной I2CMultiMasterMultiSlave. Как видим, представленные на сайте Microsemiпримеры дают достаточно материала для быстрой разработки нужного нам приложения. В результате выполнения представленного кода данные измерений трехосевых акселерометра, гироскопа, компаса, а также одного датчика температуры, считываются по шине I2Cиз MPU-9255 и передаются единым массивом по интерфейсу UART в персональный компьютер.
Для отображения результатов измерений на экране ПК можно воспользоваться различными программами доступными в сети Интернет, либо написать собственный визуализатор. Например, в программе доступной по ссылке [5] самолет принимает положение в виртуальном 3Dпространстве в соответствии с данными получаемыми от гироскопа. Кроме того, данные всех подключенных датчиков отображаются на экране (рис. 7).
Рис. 7. Отображение на экране данных всех подключенных датчиков
Можно помахать крыльями самолетика и убедится в корректной работе MicrosemiSmartFusion2 в качестве ядра измерительной системы датчиков с интерфейсом I2C.
На этом знакомство с компонентами микроконтроллерной подсистемы SmartFusion2 и IP-ядрами для опроса датчиков с различными типами интерфейсов временно приостановим. Пора попробовать силы SmartFusion2 в решении других задач «Интерента вещей» — задач обработки измерений и управления исполнительными приводами.
Литература
1. MPU-9255 Product Specification. https://www.invensense.com/wp-content/uploads/2015/02/PS-MPU-9255A-01-v1.1.pdf
2. MPU-9255 Register Map and Descriptions. https://stanford.edu/class/ee267/misc/MPU-9255-Register-Map.pdf
3. Поздняков П. Разработка приложений для СнК SmartFuson2 с использованием средств разработки LiberoSoC и SoftConsole. Часть 4. Разработка приложения с обменом по интерфейсу I2C.// Электронные компоненты. 2017. №4.