- •ВВЕДЕНИЕ
- •1. ОБЗОР НАУЧНО-ТЕХНИЧЕСКОЙ ЛИТЕРАТУРЫ
- •2.1. Комплектующие
- •2.1.1. Микроконтроллер
- •2.1.2. Шасси и электропривод
- •2.1.3. Радиомодуль
- •2.1.4. Датчик температуры и влажности воздуха
- •2.1.5. Инерциальный датчик
- •2.1.6. Модуль вычисления глобального местоположения
- •2.1.7. Ультразвуковой дальномер
- •2.1.8. Модуль измерения радиоактивного фона
- •2.2. Взаимодействие комплектующих
- •2.3. Сопряжение уровней логических сигналов
- •2.4. Интерфейс прямого доступа к памяти
- •2.5. Последовательный интерфейс UART микроконтроллера
- •2.6. Последовательный интерфейс i2c микроконтроллера
- •3.1. Многозадачность
- •3.2. Комбинированная многозадачность средствами ОСРВ
- •3.3. Управление тактовой частотой микроконтроллера
- •3.4. Работа с последовательным интерфейсом UART
- •3.5. Работа с последовательным интерфейсом I2C
- •3.6. Управление по радиоканалу
- •3.7. Вывод телеметрии
- •3.8. Передвижение роботизированного устройства
- •3.9. Измерение температуры и влажности воздуха
- •3.10. Вычисление ориентации в пространстве
- •3.10.1. Получение измерений инерциального датчика
- •3.10.2. Калибровка датчика
- •3.10.3. Преобразование данных инерциального датчика
- •3.11. Вычисление глобального местоположения
- •3.12. Следование по маршруту
- •3.12.1. Вычисление направления на точку маршрута
- •3.12.2. Удержание направления на точку маршрута
- •3.13. Программа дистанционного управления
- •3.13.1. Описание программы
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
- •ПРИЛОЖЕНИЕ 1
- •Принципиальная электрическая схема отладочной платы
- •ПРИЛОЖЕНИЕ 2
- •Принципиальная электрическая схема драйвера электродвигателей
- •ПРИЛОЖЕНИЕ 3
- •Принципиальная электрическая схема радиомодуля
- •ПРИЛОЖЕНИЕ 4
- •ПРИЛОЖЕНИЕ 5
- •Принципиальная электрическая схема инерциального датчика
- •ПРИЛОЖЕНИЕ 6
- •Принципиальная электрическая схема датчика глобального местоположения
- •ПРИЛОЖЕНИЕ 7
- •Принципиальная электрическая схема ультразвукового дальномера
- •ПРИЛОЖЕНИЕ 8
- •Принципиальная электрическая схема измерителя радиации
- •ПРИЛОЖЕНИЕ 9
- •Принципиальная электрическая схема платы сопряжения
- •ПРИЛОЖЕНИЕ 10
- •Принципиальная электрическая схема Arduino DUE
- •Схема распиновки Arduino DUE
- •Редактор Е. А. Кусаинова
- •Подписано в печать 26.10.2020.
- •ФГБОУ ВО «Воронежский государственный технический университет»
- •394026 Воронеж, Московский просп., 14
3.5. Работа с последовательным интерфейсом I2C
Как и при использовании последовательного интерфейса UART, при работе с шиной I2C нагрузка ядра микроконтроллера операциями обработки прерываний и работы с памятью является нежелательной. В связи с данным фактом все операции пересылки данных по интерфейсу I2C выполняются при помощи ПДП. Кроме того, экспериментальным путем было выяснено, что реализация интерфейса I2C в выбранном микроконтроллере является довольно ненадежной при использовании прерываний. Ненадежность проявляется в том, что микроконтроллер периодически зависает либо не реагирует на события в шине. При использовании технологии ПДП подобных проблем не возникает.
Прежде чем приступать к работе с интерфейсом, его необходимо инициализировать и настроить. Управление параметрами интерфейса осуществляется при помощи записи соответствующих значений в определенные регистры.
В табл. 3.4 приведена структура регистра I2C_CR1. Данный регистр используется для конфигурирования работы шины.
Бит PE отвечает за включение либо отключение тактирования шины. Если тактирование выключено, то попытка записи или чтения любого регистра шины приведет к игнорированию данного действия.
Бит NOSTRETCH отвечает за включение либо отключение функции удержания подчиненным устройством линии тактирования в низком состоянии, пока не будет завершена передача. По умолчанию данная опция включена.
|
|
|
Структура регистра I2C_CR1 |
|
Таблица 3.4 |
||||
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
Разряд |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
|
Назва- |
PE |
SMBS |
- |
SMB |
ENAP |
ENPE |
ENG |
NO |
|
ние |
|
|
|
TYPE |
|
C |
C |
STRETH |
|
Доступ |
ч/з |
ч/з |
ч/з |
ч/з |
ч/з |
ч/з |
ч/з |
ч/з |
|
Разряд |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
Назва- |
STA |
STOP |
ACK |
POS |
PECK |
ALER |
- |
SWRST |
|
ние |
RT |
|
|
|
|
T |
|
|
|
Доступ |
ч/з |
ч/з |
ч/з |
ч/з |
ч/з |
ч/з |
- |
ч/з |
|
При установке бита START в состояние логической единицы микроконтроллер генерирует на шине условие «Старт». Сбрасывается аппаратно.
При установке бита STOP в состояние логической единицы микроконтроллер генерирует на шине условие «Стоп». Сбрасывается аппаратно.
Бит ACK отвечает за подтверждение либо не подтверждение прима информации от подчиненного устройства. При установке в состояние логической единицы генерирует на шине условие подтверждения (ACK) после приема очередного байта. Значение логического нуля, соответственно, генерирует NACK.
55
Установка бита SWRST в состояние логической единицы производит сброс всех регистров шины в значение по умолчанию. Сбрасывается программно.
В табл. 3.5 показана структура регистра I2C_SR1. Данный регистр используется для предоставления информации о текущем состоянии шины.
Бит SB в состоянии логической единицы показывает наличие в линии передачи сгенерированного условия «Старт». Сбрасывается записью в регистр
I2C_DR.
|
|
|
|
|
|
|
|
|
Таблица 3.5 |
|
|
|
|
Структура регистра I2C_SR1 |
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
Разряд |
0 |
1 |
|
2 |
3 |
4 |
5 |
6 |
7 |
|
Название |
SB |
ADDR |
|
BTF |
ADD10 |
STOPF |
- |
RxNE |
TxE |
|
Доступ |
ч |
ч |
|
ч |
ч |
ч |
ч |
ч |
ч |
|
Разряд |
8 |
9 |
|
10 |
11 |
12 |
13 |
14 |
15 |
|
Название |
BERR |
ARLO |
|
AF |
OVR |
PECERR |
- |
TIME |
SMB |
|
|
|
|
|
|
|
|
|
OUT |
ALERT |
|
Доступ |
ч |
ч |
|
ч |
ч |
ч |
ч |
- |
ч |
|
Бит ADDR выставляется после того, как в шину был передан адрес устройства для обмена. Сбрасывается чтением регистра I2C_SR1.
BTF выставляется в состояние логической единицы после успешного завершения передачи байта данных, при этом если следующий байт данных не был записан и регистр I2C_DR пуст.
Бит RxNE устанавливается в состояние логической единицы в случае приема байта данных из шины. Сбрасывается чтением регистра I2C_DR.
Бит TxE, соответственно, устанавливается при перемещении содержимого регистра I2C_DR в сдвиговый регистр передачи. Используется для организации непрерывной передачи данных. Сбрасывается записью в регистр I2C_DR.
Бит AF выставляется в состояние логической единицы в случае, если подчиненное устройство не подтвердило прием данных. Сбрасывается программно.
Оставшиеся регистры и их поля имеют второстепенное значение, поэтому их описание не приводится.
В программе для инициализации шины I2C используется функция Init_I2CX (), где X – порядковый номер шины. Перед использованием данной функции необходимо инициализировать ПДП для приема и для передачи. Данные действия производятся в функции main () и аналогичны инициализации ПДП для интерфейса UART: также сперва создается структура с параметрами ПДП, после чего происходит вызов функции LL_DMA_Init () из библиотеки LL, в параметры которой передается указатель на созданную структуру и указатель на интерфейс ПДП. После проделанных манипуляций ПДП готова к использованию. Выводы микроконтроллера настраиваются также аналогично ин-
56
терфейсу UART, за исключением того, что необходимо установить соответствующую альтернативную функцию (LL_GPIO_AF_4).
Функция Init_I2CX () сперва отключает тактирование соответствующей шины микроконтроллера, производит ее сброс, а затем снова включает. Данные действия требуются для корректной работы внутренней логики шины. Следующим шагом является создание структуры I2C_InitStruct и заполнение ее параметров, таких как: режим работы (обычный либо быстрый), скорость, наличие сигнала подтверждения (ACK), а также разрядность адреса устройств на шине. После заполнения полей структуры происходит вызов функции LL_I2C_Init () из библиотеки LL. Данная функция производит разбор полей структуры и записывает в регистры интерфейса соответствующие данные. После проделанных манипуляций интерфейс I2C можно использовать. Однако, повторять процедуру инициализации необходимо перед каждой новой сессией обмена данными, иначе не гарантируется стабильность работы.
Как уже было сказано ранее, шина I2C работает в полудуплексном режиме. Это означает, что в один момент времени микроконтроллер может либо записывать данные во внешние устройства, либо считывать их (рис. 2.28 и
рис. 2.29).
Рассмотрим процесс обмена в режиме записи данных. В программе микроконтроллера для данных целей предусмотрена функция MyI2C_Write (). Параметры функции следующие:
•mi2c – указатель на шину I2C, с которой необходимо работать;
•devAddr – адрес устройства на шине, с которым будет производиться обмен данными;
•data – указатель на передаваемые данные;
•len – размер передаваемых данных в байтах.
После вызова данной функции использующий ее процесс ОСРВ переходит в состояние ожидания, а сам интерфейс блокируется. Все происходящие действия аналогичны отправке данных при помощи интерфейса UART. После завершения передачи задача снова продолжает свою работу, а шина становится доступна другим задачам.
Для процесса обмена данными в режиме чтения используется функция MyI2C_Read (). Параметры функции следующие:
•mi2c – указатель на шину I2C, с которой необходимо работать;
•devAddr – адрес устройства на шине, с которым будет производиться обмен данными;
•data – указатель на буфер, в который будут сохраняться принятые
данные;
•len – размер считываемых данных в байтах.
57
После вызова функции все действия аналогичны функции записи. Благодаря блокировке шины и задач достигается возможность работы с шиной одновременно из нескольких задач.
Таки образом, рассмотрен процесс взаимодействия микроконтроллера с внешними устройствами при помощи шины I2C. Произведено описание основных регистров шины, значений полей этих регистров. Разобран процесс обмена данными в режиме чтения и записи, а также взаимодействие между задачами.
3.6. Управление по радиоканалу
Передача команд управления в роботизированное устройство осуществляется при помощи радиомодуля, работающего по технологии Bluetooth. Радиомодуль соединяется с микроконтроллером посредством последовательного интерфейса UART, принципы работы которого описаны выше.
Рассмотрим структуру входящего пакета дистанционного управления (рис. 3.4). Каждый пакет начинается с префикса (символ @) и заканчивается кодом завершения (последовательность байт 0x0D0A в шестнадцатеричной системе). Таким образом пакеты разделяются между собой. Между префиксом и кодом завершения располагаются передаваемые данные. Последний байт перед кодом завершения представляет собой проверочную сумму (КС) для контроля целостности пакета.
Рис. 3.4. Структура пакета управления [7]
На передающей стороне проверочная сумма вычисляется простым суммированием передаваемых байтов данных по модулю 256. При этом префикс и код завершения при расчете проверочной суммы не используются. После суммирования всех байтов данных проверочная сумма переводится в дополнительный код (инвертируется и прибавляется единица) и помещается в конец пакета данных. На приемной стороне проверочная сумма вычисляется заново, но без перевода в дополнительный код. При отсутствии ошибок в принятом пакете принятая проверочная сумма и заново вычисленная проверочная сумма за счет дополнительного кода при суммировании дадут ноль. Это свидетельствует о том, что пакет пригоден для обработки. В случае ненулевого результата пакет отбрасывается и ожидается прием следующего, а оператору отправляется сообщение об ошибке. Описанный подход не позволяет обеспечить исправление ошибок в принятом пакете, но при этом может использоваться для обнаруже-
58
ния части из них, при этом не требуя практически никаких вычислительных затрат.
Для того, чтобы определить какую именно команду необходимо исполнять, после префикса в пакете предусмотрено специализированное поле шириной восемь байт. Следом за ним располагаются параметры команды. Параметры разделяются между собой символом «;».Рассмотрим основные виды команд дистанционного управления (табл. 3.6).
|
|
Таблица 3.6 |
|
|
Команды управления |
|
|
|
№ |
Команда |
Описание |
|
(ASCII код) |
|
1 |
DRV |
Ручное управление передвижением |
2 |
DPID |
Настройка коэффициентов ПИД-регуляторов контроля |
|
|
движения |
3 |
DDIR |
Задает азимут для следования |
4 |
DPOS |
Задает точку для следования |
5 |
AUTO |
Включает и отключает автоматические функции |
6 |
TELE |
Включает и отключает отправку телеметрии |
7 |
INERTC |
Задает параметры калибровки инерциального датчика |
Команда номер один позволяет оператору осуществлять управление передвижением роботизированного устройства в ручном режиме. Рассмотрим формат команды (табл. 3.7). Оба параметра являются целыми числами и имеют диапазон значений -127..127. Значения параметров команды пересчитываются в сигналы управления левой и правой парами электродвигателей. Более подробно управление движением будет описано далее.
Таблица 3.7
|
Структура команды DRV |
|
|
Параметр |
Описание |
forward |
Скорость движения вперед |
right |
Скорость поворота вправо |
Вторая команда позволяет оператору производить настройку коэффициентов ПИД-регуляторов в реальном времени. Передаваемые параметры сохраняются в памяти роботизированного устройства, благодаря чему ускоряется готовность роботизированного устройства к использованию при включении. Параметры команды передаются в виде числе десятичных чисел с плавающей точкой. Описание параметров приведено в табл. 3.8. Более подробная информация о использовании ПИД-регуляторов представлена в последующих разделах.
59
|
Таблица 3.8 |
|
|
Параметры команды DPID |
|
|
|
|
Параметр |
Описание |
|
P1 |
Пропорциональный коэффициент регулятора направления |
|
I1 |
Интегральный коэффициент регулятора направления |
|
D1 |
Дифференциальный коэффициент регулятора направления |
|
P2 |
Пропорциональный коэффициент регулятора положения |
|
I2 |
Интегральный коэффициент регулятора положения |
|
D2 |
Дифференциальный коэффициент регулятора положения |
|
Третья команда задает направление движения роботизированного устройства в автоматическом режиме. При ручном управлении данная команда игнорируется. Команда имеет всего один параметр – направление в градусах (целое число).
Четвертая команда позволяет оператору указать точку маршрута для следования роботизированного устройства в автоматическом режиме. При ручном управлении данная команда игнорируется. Параметры команды представлены в табл. 3.9. Значения параметров передаются в виде чисел с плавающей точкой.
Таблица 3.9
|
Параметры команды DPOS |
|
|
Параметр |
Описание |
latitude |
Широта целевой точки маршрута |
longitude |
Долгота целевой точки маршрута |
Команда номер пять предназначена для включения и выключения автоматических функций роботизированного устройства. Параметры данной команды могут принимать только два значения: 0 – автоматический режим выключен; 1 – автоматический режим включен. Описание параметров команды приведено в табл. 3.10.
|
Таблица 3.10 |
|
|
Параметры команды AUTO |
|
|
|
|
Параметр |
Описание |
|
dir |
Автоматическое удержание направления движения |
|
pos |
Автоматическое следование в точку маршрута |
|
Шестая команда позволяет оператору управлять наборами данных, формируемыми роботизированным устройством при отправке телеметрии. Параметры команды могут принимать только два значения: 0 – данные не отправ-
60
ляются; 1 – данные отправляются. Описание параметров команды приведено в табл. 3.11.
Параметры седьмой команды приведены в табл. 3.12. Поле «type» представляет собой целое число и определяет тип калибровочного параметра. Возможные значения данного поля приведены в табл. 3.12. Поле «value» содержит набор десятичных чисел с плавающей точкой, разделенных запятыми. Количество чисел зависит от вида калибровки и указано в табл. 3.13.
|
|
|
|
Таблица 3.11 |
|
|
|
|
Параметры команды TELE |
||
|
|
|
|
|
|
Параметр |
Описание |
|
|
|
|
pos |
Отправка данных о текущей позиции роботизированного |
|
|||
|
|
устройства (широта и долгота) |
|
||
meas |
Отправка данных с результатами измерений |
|
|||
dir |
Отправка данных о текущей ориентации в пространстве ро- |
|
|||
|
|
ботизированного устройства (крен, тангаж и рысканье) |
|
||
inert_raw |
Отправка необработанных показаний инерциального датчи- |
|
|||
|
|
ка |
|
|
|
|
|
|
|
Таблица 3.12 |
|
|
|
Параметры команды INERTC |
|||
|
|
|
|
|
|
Параметр |
Описание |
|
|
|
|
type |
Тип калибровки |
|
|||
value |
Значение калибровки |
|
|||
|
|
|
|
Таблица 3.13 |
|
|
|
|
Типы калибровки |
||
|
|
|
|
|
|
Значение |
|
Количество |
зна- |
Описание |
|
|
|
чений value |
|
|
|
0 |
|
9 |
|
Матрица калибровки акселерометра |
|
1 |
|
9 |
|
Матрица калибровки гироскопа |
|
2 |
|
9 |
|
Матрица калибровки магнитометра |
|
3 |
|
3 |
|
Вектор смещения акселерометра |
|
4 |
|
3 |
|
Вектор смещения гироскопа |
|
5 |
|
3 |
|
Вектор смещения магнитометра |
|
Таким образом, рассмотрены основные команды дистанционного управления роботизированным устройством. Описаны структура команд и их параметры. Приведенные команды используются в программе дистанционного управления, описанной в последующих разделах.
61