Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 2232

.pdf
Скачиваний:
26
Добавлен:
30.04.2022
Размер:
14.85 Mб
Скачать

int interpret24bitAsInt32(byte[] byteArray) { int newInt = (

((0xFF & byteArray[0]) << 16) | ((0xFF & byteArray[1]) << 8) | (0xFF & byteArray[2])

);

if ((newInt & 0x00800000) > 0) { newInt |= 0xFF000000;

} else {

newInt &= 0x00FFFFFF;

}

return newInt;

}

2.7.11. 16-битные значения данных

Данные акселерометра, если они используются, отправляются как 16битное значение со знаком. Используется аналогичная схема для преобразования этих значений в 32-битные целые числа при обработке.

int interpret16bitAsInt32(byte[] byteArray) { int newInt = (

((0xFF & byteArray[0]) << 8) | (0xFF & byteArray[1])

);

if ((newInt & 0x00008000) > 0) { newInt |= 0xFFFF0000;

} else {

newInt &= 0x0000FFFF;

}

return newInt;

}

2.7.12. 32-битная временная метка без знака

Данные метки времени, если они используются, отправляются в виде 32разрядного целого числа без знака, представляющего время с момента запуска платы (в мс). Используется другая схема для преобразования этих значений в 32-битные целые числа при обработке.

2.7.13. Интерпретация данных ЭЭГ

После получения и анализа пакетов данных важно знать, как интерпретировать данные, чтобы значения ЭЭГ были полезны в количественном отношении. Две важные части информации: (1) частота дискретизации и (2) коэффициент масштабирования.

Для частоты дискретизации устанавливается частота по умолчанию 250 Гц. Более высокие скорости поддерживаются ADS1299, но беспроводная

40

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

Для коэффициента масштабирования это множитель, который используется для преобразования значений ЭЭГ из «счетчиков» (число “int32”, которое анализируется из двоичного потока) в единицы измерения, такие как «вольт». По умолчанию скетч Arduino, работающий на плате OpenBCI, устанавливает максимальный коэффициент усиления микросхемы ADS1299 (24x), что приводит к масштабному коэффициенту 0,02235 мкВ на счетчик. Поскольку коэффициент усиления настраивается пользователем (24x, 12x, 8x, 6x, 4x, 2x, 1x), коэффициент масштабирования будет другим. Если коэффициент усиления изменяется, уравнение, которое необходимо использовать для определения масштабного коэффициента:

Scale Factor (Volts/count) = 4.5 Volts / gain / (2^23 - 1).

Необходимо обратить внимание, что “2^23” может быть некорректным числом в этом уравнении, учитывая, что ADS1299 является 24-разрядным устройством. Это связано с тем, что значение 24-битного необработанного счетчика находится в формате дополнения до 2-х. Этот масштабный коэффициент также был подтвержден экспериментально с использованием известных калибровочных сигналов.

Данные акселерометра также должны быть масштабированы, прежде чем их можно будет правильно интерпретировать. Уравнение, используемое для масштабирования данных акселерометра, выглядит следующим образом (здесь принимается 4G, то есть 2 мг на цифру):

Accelerometer Scale Factor = 0.002 / 2^4.

2.7.14. 16-канальные данные при использовании платы Daisy

16-канальная система регистрации ЭЭГ позволяет управлять индивидуальными настройками для всех 16 каналов, а данные извлекаются из обеих микросхем ADS1299 со скоростью 250 циклов в секунду. Текущие ограничения полосы пропускания радиоканала с последовательной передачей данных ограничивают количество пакетов, которые можно отправлять. Чтобы решить эту проблему, пакеты данных отправляются с той же скоростью (250 циклов в секунду), но пакеты со встроенной в плату Cyton микросхемы ADS1299 и ADS1299 на плате Daisy чередуются. Метод основан на принятии средних значений текущих и самых последних значений канала перед отправкой на радиоканал. Первый отправленный образец (пакет) будет недействительным, потому что не существует предыдущего образца для его усреднения. После этого под нечетными номерами пакетов отправляются значения с платы Cyton, а под четными номерами пакетов значения с платы Daisy. При работе системы с 16 каналами настоятельно рекомендуется

41

использовать SD-карту для хранения необработанных (не усредненных) данных для последующей обработки. Данная рекомендация вызвана низкой пропускной способностью радиоканала.

Пример формата передаваемых пакетов:

|sample#| recorded | sent | sent | |-------:|:-------:|:-------:|---------------------:|:------------------:| | 0|board(0),daisy(0)| |an invalid sample | | 1|board(1),daisy(1)|avg(board(0),board(1))| | | 2|board(2),daisy(2)| |avg(daisy(1),daisy(2))| | 3|board(3),daisy(3)|avg(board(2),board(3))| | | 4|board(4),daisy(4)| |avg(daisy(3),daisy(4))| | 5|board(5),daisy(5)|avg(board(4),board(5))| | | 6|board(6),daisy(6)| |avg(daisy(5),daisy(6))|

Полученные средние значения могут быть переданы со скоростью 250 циклов в секунду следующим простым способом, указанным в табл. 2.4.

 

 

 

Таблица 2.4

Полученные

 

Данные платы

Данные с повышением

данные

 

с повышенной частотой

частоты выборки

 

 

дискретизацией

 

 

 

 

 

sample(3)

 

avg(sample(1),sample(3)

sample(2)

 

 

 

 

 

sample(4)

sample(3)

avg(sample(2),sample(4)

 

 

 

 

sample(5)

 

avg(sample(3),sample(5)

sample(4)

 

 

 

 

 

sample(6)

sample(5)

avg(sample(4),sample(6)

 

 

 

 

sample(7)

 

avg(sample(5),sample(7)

sample(6)

 

 

 

 

 

sample(8)

sample(7)

avg(sample(6),sample(8)

 

 

 

 

Время повышенных значений задерживается на 1 выборку по сравнению с полученными значениями.

2.7.15. Перспективы улучшения протокола передачи

Протокол передачи можно изменить для того, чтобы он соответствовал другим стандартам. Данные в эфир передаются в пакетах (или кадрах, в зависимости от предпочтительного слова). Максимально допустимое число байтов на пакет - 32. Первый байт резервируется для использования в качестве контрольной суммы пакета в нашем протоколе. Таким образом, доступное число байтов на пакет равно 31. Протокол беспроводной передачи, который получает хост Dongle/RFduino:

Байт 1: счетчик пакетов Байт 2: номер образца

Байты 3-5: значение данных для канала ЭЭГ №1

42

Байты 6-8: значение данных для канала ЭЭГ №2 Байты 9-11: значение данных для канала ЭЭГ №3 Байты 12-14: значение данных для канала ЭЭГ №4 Байты 15-17: значение данных для канала ЭЭГ №5 Байты 18-20: значение данных для канала ЭЭГ №6 Байты 21-23: значение данных для канала ЭЭГ №6 Байты 24-26: значение данных для канала ЭЭГ №8

Байты 27-28: значение данных для канала акселерометра X Байты 29-30: значение данных для канала акселерометра Y Байты 31-32: значение данных для канала акселерометра Z

Код хоста удаляет счетчик пакетов и добавляет верхний и нижний колонтитулы. Он может быть модифицирован для работы с другими спецификациями протокола для других программ обработки сигналов.

В ситуациях, когда требуется увеличение частоты дискретизации или большее количество каналов, может быть реализована схема сжатия данных. Как отмечено выше, при отправке только значений с ADS1299 для 8 каналов в радиопакете есть шесть неиспользуемых байтов. Может быть возможным, например, увеличить частоту дискретизации и сжать данные АЦП на две выборки в один радиопакет. Или поместить все 16 каналов данных в один пакет без усреднения, которое используется в настоящее время.

2.8. SDK для платы Cyton

Платы OpenBCI Cyton взаимодействуют с помощью командного протокола байтовой строки (в основном ASCII). Далее описано использование команд для 8-ми битных плат OpenBCI Cyton. Некоторые команды относятся к конкретным платам, если это указано. Кроме того, далее описаны команды, необходимые для изменения системы радиосвязи “v0”. Прошло несколько итераций прошивки 8-битной платы.

2.8.1. Обзор протокола Cyton Command

На платах Cyton есть два мощных микроконтроллера. Радиомодуль RFduino использует стек и библиотеку Nordic Gazelle. Монтируемая на плате микросхема RFduino настроена как отдельное устройство. Микроконтроллер

(PIC32MX250F128B или ATmega328P) программируется с помощью микропрограммы, которая взаимодействует между ADS1299 (аналоговый интерфейс и АЦП), LIS3DH (акселерометр), micro SD (если установлена) и RFduino (радиомодуль). Пользователь, или приложение, управляет платой, отправляя команды через беспроводное последовательное соединение. Для соединения платы Cyton с ПК используется плата Dongle. Плата Dongle также имеет микросхему RFduino, на которой работает библиотека Gazelle, настроенная как HOST, и подключается к компьютеру через виртуальный

COM-порт (FTDI).

43

При запуске 8-битная плата OpenBCI (v0) отправляет по радиоканалу следующий текст:

OpenBCI V3 8bit Board

Setting ADS1299 Channel Values ADS1299 Device ID: 0x3E LIS3DH Device ID: 0x33

$$$

Плата OpenBCI Cyton с прошивкой (v1) отправляет по радио следующий текст:

OpenBCI V3 16 channel ADS1299 Device ID: 0x3E LIS3DH Device ID: 0x33

$$$

Плата OpenBCI Cyton с прошивкой v2.0.0 отправляет по радио следующий текст:

OpenBCI V3 8-16 channel ADS1299 Device ID: 0x3E LIS3DH Device ID: 0x33 Firmware: v2.0.0

$$$

Информация об идентификаторе устройства нужна для общего подтверждения работоспособности платы. Знак $$$ - это четкое указание управляющему приложению, что сообщение завершено и плата Cyton готова к приему команд. В прошивке v2.0.0 реализована дополнительная опция для указания точной версии прошивки.

Необходимо обратить внимание на время при отправке команд при использовании прошивок v0 и v1. Должна быть некоторая задержка до и после отправки командного символа с ПК (для нормальной работы управляющей программы или пользователя, использующего терминал). В версии прошивки v2.0.0 эта функция исключена.

2.9.Набор команд

2.9.1.Выключение каналов

Символы “1 2 3 4 5 6 7 8” в формате ASCII отключают соответствующие каналы [1-8]. Каждый канал будет считывать значение “0,00,” когда он выключен в режиме “streamData”. Данные команды работают в режиме “streamData” и без него. Подтверждающие символы не возвращаются.

Символы “**! @ # $% ^ & * **” в формате ASCII включают соответствующие каналы [1-8]. Канал будет читать выходные значения АЦП в

44

режиме “streamData”. Эти команды работают в режиме “streamData” и вне его. Подтверждающие символы не возвращаются.

2.9.2. Команды управления тестовым сигналом

Команда “0 - = p []” включает все доступные каналы и подключает их к внутреннему тестовому сигналу. Это полезно для самопроверки и калибровки. Например, можно измерить внутренний шум канала, отправив значение “0”. Выполнение данной команды соединяет все входы с внутренней “землей” “GND”. При потоковой передаче поток будет остановлен, но при восстановлении соответствующих регистров на ADS1299 поток будет возобновлен.

Список команд:

“0” - подключение к внутренней “GND” (VDD - VSS);

“-“ - подключите к тестовому сигналу “1xAmplitude”, медленный импульс;

“=” - подключить к тестовому сигналу “1xAmplitude”, быстрый импульс;

“p” - подключение к сигналу постоянного тока;

“[“ - подключить к тестовому сигналу “2xAmplitude”, медленный импульс;

“]” - подключение к тестовому сигналу “2xAmplitude”, быстрый импульс.

Вплате реализованы не все возможные внутренние тестовые соединения. Если нет потоковой передачи, плата возвращает “Success: Configured internal test signal.$$$”, если есть потоковая передача, то подтверждения нет.

2.9.3. Команды настройки канала

Следующие команды: “** x (CHANNEL, POWER_DOWN, GAIN_SET, INPUT_TYPE_SET, BIAS_SET, SRB2_SET, SRB1_SET) X **” являются командами настройки канала. Команды настройки канала имеют шесть параметров для каждого канала АЦП. Чтобы получить доступ к настройкам канала, сначала надо отправить “x. Затем плата Cyton будет ожидать, что следующие 7 байтов будут определенными командами настроек канала. Первый байт - номер канала (если подключен модуль Daisy, то можно выбрать до 16 каналов для установки параметров). Следующие шесть символов ASCII принимаются в качестве параметров для установки. Наконец, отправка символа “Xзафиксирует настройки на канале АЦП.

Далее рассмотрим основные команды системы. Выбор канала (команда “CHANNEL) “1 2 3 4 5 6 7 8”для одноплатного выбора канала. Команды “Q W E R T Y U I” для выбора каналов в модуле Daisy. Команда “POWER_DOWNвключения каналов: 0 = ВКЛ (по умолчанию) 1 = ВЫКЛ. Команды установки усиления “GAIN_SET”:

0 = усиление 1;

1 = усиление 2;

45

2 = Прибыль 4;

3 = усиление 6;

4 = усиление 8;

5 = усиление 12;

6 = усиление 24 (по умолчанию).

Команда “INPUT_TYPE_SET” выбор источника входного сигнала канала

АЦП:

0 ADSINPUT_NORMAL (по умолчанию);

1 ADSINPUT_SHORTED;

2 ADSINPUT_BIAS_MEAS;

3 ADSINPUT_MVDD;

4 ADSINPUT_TEMP;

5 ADSINPUT_TESTSIG;

6 ADSINPUT_BIAS_DRP;

7 ADSINPUT_BIAS_DRN.

Команда “BIAS_SET” выбирается, чтобы подключить на вход канала генерированный сигнал “BIAS”. Значение “0” = выключает BIAS, значение “1” = включает BIAS (по умолчанию). Команда “SRB2_SET”используется для подключения входа “P” этого канала к выводу “SRB2”. Это замыкает переключатель между входом “P” и “SRB2’ для данного канала и позволяет входу “P” также оставаться подключенным к АЦП. Значение “0” = отключает этот вход от “SRB2”, значение “1” = подключает этот вход к “SRB2” (по умолчанию). Команда “SRB1_SET” используется для подключения входов “N” всех каналов к “SRB1”. Это влияет на все контакты и отключает все входы “N” от АЦП. Значение “0” = отключает все входы “N” от SRB1 (по умолчанию), значение “1” = подключает все входы “N” к ‘SRB1”.

Рассмотрим пример отправления запроса “х 3 0 2 0 0 0 0 Х”. Символ «х» позволяет войти в режим настроек канала. Канал 3 настроен на включение с усилением 2, нормальный вход BIAS выключен, SRB2 выключен, SRB1 выключен. Последняя буква «X» фиксирует настройки в регистре настроек канала АЦП ADS1299.

Для прошивки “v0” и “v1” требуется, чтобы была добавлена задержка (> 10 мс) при настройке канала и параметров. Начиная с v2.0.0, можно объединить несколько настроек канала вместе, как рассмотрено в примере: запрос “x1020000Xx2020000Xx3020000X”. Этот запрос установит первые три канала.

В случае успеха при потоковой передаче подтверждения не последует. Плата WiFi Shields всегда будет получать ответ, даже в потоковом режиме. В случае успеха, но если нет потоковой передачи, то возвращается сообщение

“Success: Channel set for 3$$$”, где 3 - канал, который был запрошен для установки.

46

При неудаче выполнения команды:

1.Если нет потоковой передачи, плата WiFi Shield всегда отправляет ответы без “$$$”:

1.1. Получено недостаточно символов. В этом случае будет сообщение:

“Failure: too few chars$$$” (например, пользователь отправляет команду

“x102000X”).

1.2.9-й символ не является верхним регистром “X”. В этом случае будет сообщение: “Failure: 9th char not X$$$” (например, пользователь отправляет команду “x1020000V”).

1.3.Слишком много символов в команде или другие проблемы. В этом случае будет сообщение: ”Failure: Err: too many chars$$$”.

2.Если в течение 1 секунды не все команды получены. В этом случае будет сообщение: “Timeout processing multi byte message - please send all commands at once as of v2$$$”.

2.9.4. Настройки канала по умолчанию

Команда “d” используется, чтобы установить все каналы по умолчанию.

Команда возвращает сообщение “updating channel settings to default$$$”, если нет потока данных. Команда “D” используется для получения отчета о настройках по умолчанию. После запроса настроек по умолчанию команда возвращает 6 символов ASCII, за которыми следует “$$$”.

Пользователи могут изменять настройки канала по умолчанию в функции инициализации внутри библиотеки OpenBCI. Но для этого требуется перепрограммирование платы

2.9.5. Команды для включения/отключения измерения импеданса

Команды “z” (CHANNEL, PCHAN, NCHAN), “Z” работают аналогично командам настройки канала. Для прошивок “v0” и “v1” необходимо позаботиться, чтобы были задержки между отправкой символов. Для прошивки “v2.0.0” поток байтов можно отправлять без задержки. Настройки импеданса имеют два параметра для каждого канала АЦП. Импеданс измеряется путем подачи низкоуровневого сигнала переменного тока с частотой 31,5 Гц на данный канал. Команда имеет значение “0”, если тестовый сигнал не применяется (по умолчанию). Команда имеет значение “1”, если тестовый сигнал применен.

Например, пользователь отправляет запрос вида “z 4 1 0 Z”. Команда 'z' осуществляет вход в режим настроек импеданса. Канал 4 настроен на измерение импеданса на входе “P”. Последняя буква «Z» фиксирует настройки в регистрах АЦП.

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

47

1.В случае успеха:

1.1.При потоковой передаче не будет подтверждения успеха. Плата “WiFi Shields” всегда будет получать ответ, даже в потоковом режиме.

1.2.Если нет потоковой передачи, возвращается сообщение “Success: Lead off set for 4$$$”, где 4 - канал, который был запрошен для установки.

2.При неудаче:

2.1.Если нет потоковой передачи, плата WiFi Shield всегда отправляет следующие ответы без символов “$$$”:

2.1.1.Получено недостаточно символов: “Failure: too few chars$$$” (например, пользователь отправляет запрос “x102000X”).

2.1.2.5-й символ не является верхним регистром 'X': “Failure: 5th char not Z$$$” (например, пользователь отправляет запрос “x1020000V”).

2.1.3.Слишком много символов в команде или другие проблемы: “Failure: Err: too many chars$$$”.

2.2.Если не все команды получены в течение 1 секунды, то будет выдано сообщение “Timeout processing multi byte message - please send all commands at once as of v2$$$”.

2.9.6. Команды для работы SD-картой

Команды “A S F G H J K L” предназначены для работы с SD-картой. Данные команды необходимо отправить, чтобы начать регистрацию данных на SD-карту за указанное время:

A = 5 мин;

S = 15 мин;

F = 30 мин;

G = 1 час;

H = 2 час;

J = 4 часа;

K = 12 часов;

L = 24 часа;

а = около 14 секунд для тестирования.

Команда “j” служит для остановки записи регистрируемых данных и закрытия файла на SD-карте.

2.9.7. Команды потоковых данных

Команда “b” служит для начала потоковой передачи данных. Она не возвращает подтверждений. Когда команда поступает от платы WiFi, то поступает подтверждение и начинается потоковая передача.

48

Команда “s” служит для остановки потоковой передачи данных. Она не возвращает подтверждений. Когда команда поступает от платы WiFi, то поступает подтверждение и потоковая передача останавливается.

2.9.8. Остальные команды

Команда “?” служит для настройки регистра запросов. Она возвращает “Read” и сообщает обо всех настройках регистра для АЦП ADS1299 и акселерометра LIS3DH. После выполнения данной команды надо ожидать получения подробного последовательного отчета от платы Cyton, за которым следуют символы “$$$”.

Команда “v” осуществляет мягкий сброс для периферийных устройств. 8- битная плата Cyton получает сигнал сброса от устройства Dongle каждый раз, когда приложение открывает последовательный порт, как в Arduino. Сама плата Cyton не имеет этой функции. Итак, для того чтобы выполнить мягкий сброс платы Cyton (с прошивкой “v1” или “v2.0.0”), необходимо отправить запрос v. Команда сброса возвращает сообщение следующего вида для платы OpenBCI V3: идентификатор 8-16 - канального ADS1299: 0x3E, идентификатор устройства LIS3DH: 0x33, прошивка: v3.1.1 $$$

2.9.9.Команды для 16-канальной системы

Внастоящее время модуль Daisy реализован только на плате Cyton. Модуль Daisy добавляет еще 8 входных каналов, что в общей сложности составляет 16. Далее описаны специфичные команды для управления АЦП

ADS1299 на модуле Daisy.

Выключение каналов:

Символы “q w e r t y u I” в системе ASCII отключают соответствующие каналы [9-16]. Канал будет читать значение “0,00” в режиме “streamData”. Эти команды работают в режиме “streamData” и вне его. Команды не возвращают подтверждающих сообщений.

Включение каналов:

Символы “Q W E R T Y U I” в системе ASCII включают соответствующие каналы [9-16]. Канал будет содержать значения АЦП в режиме “streamData”. Эти команды работают в режиме “streamData” и вне его. Команды не возвращают подтверждающих сообщений.

2.9.10.Выбор максимального числа каналов

Команда “с” используется для включения 8-канальной системы. Если подключен модуль Daisy, он не будет использован и будут доступны только каналы 1-8.

При выполнении данной команды возвращается сообщение:

49