Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 2160.pdf
Скачиваний:
28
Добавлен:
30.04.2022
Размер:
9.07 Mб
Скачать

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