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

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

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

В течение этого времени в строке помощи внизу графического интерфейса OpenBCI должны мигать слова: «Попытка установить соединение с вашей платой OpenBCI ...» («Attempting to establish a connection with your OpenBCI Board... ») (рис. 2.22).

Рис. 2.22. Запуск системы

2.5.4.9. Устранение неисправностей

Если инициализация не удалась, то можно попробовать сделать следующие шаги по порядку:

1.Убедиться, что выбран правильный последовательный COM-порт.

2.Выключить плату Cyton и отсоединить USB-ключ. Затем снова подключить USB-ключ и включить плату Cyton в указанном порядке. Затем попробовать перезапустить систему, и снова нажать кнопку ‘START SYSTEM”.

3.Если это не работает, то надо попробовать перезапустить приложение OpenBCI GUI и повторить шаг 2, описанный выше. Затем перенастроить настройки панели управления системой и повторить попытку запуска системы.

4.Убедиться, что батареи, питающие плату, полностью заряжены, и повторить шаги, описанные выше.

5.Если номер канала не отображается, то необходимо выбрать пункт меню

«AUTOSCAN» в настройках “RADIO CONFIGURATION”.

Если проблемы с подключением к плате Cyton все еще возникают, то необходимо обратиться к форуму за дополнительными советами по устранению неполадок.

30

2.5.4.10. Проверка работоспособности платы Cyton

Теперь, когда OpenBCI_GUI подключен к плате Cyton, необходимо нажать “Start Data Stream” в верхнем левом углу программного обеспечения

(рис. 2.23).

Рис. 2.23. Запуск принятия данных

После этого можно будет увидеть поток данных с платы в графическом интерфейсе GUI. Можно попробовать провести пальцами вдоль электродных выводов верхней части платы (рис. 2.24).

Рис. 2.24. Запуск принятия данных

После этого можно увидеть, что 8 (или 16, если используется модуль Daisy) каналов в виджете «Time Series» ведут себя хаотично в ответ на прикосновение к контактам. При этом все графики БПФ (быстрого преобразования Фурье) в правом верхнем углу мгновенно сместятся вверх (рис. 2.25).

31

Рис. 2.25. Рабочее окно программы

2.6. Характеристики платы и вспомогательные устройства

Печатные платы OpenBCI Cyton были разработаны с помощью бесплатной программы проектирования печатных плат Design Spark. Все пассивные элементы (Rs и Cs) являются стандартными и легко доступными компонентами. Разъем батареи является стандартным разъемом JST типа, имеющим два положения (с ключом полярности вверху), а держатель SD карты, который использовался: ST-TF-003A.

2.6.1.Характеристики платы

1.Питание: 3-6 В постоянного тока.

2.PIC32MX250F128B - микроконтроллер с начальным загрузчиком ChipKIT - UDB32-MX2-DIP.

3.ADS1299 - аналоговый интерфейс и АЦП.

4.3-х осевой акселерометр LIS3DH.

5.Радио RFduino BLE.

6.Слот для карты Micro SD.

7.Регуляторы напряжения (3,3 В + 2,5 В -2,5 В).

32

2.6.2.Выводы на плате

Контакты для программирования и загрузки PIC: PGC, PGD, VDD, MCLR, GND.

Серийные контакты для программирования RFduino: RFTX, RFRX, RFRST, GND.

Контакты шины SPI на стороне 3 В для расширения модуля Daisy: DVDD, GND, MISO, MOSI, SCK, CS, CLK, RST.

Неиспользуемые контакты PIC32: D11 (A5), D12 (A6), D13 (A7), D17, D18.

Выводы шины SPI на стороне 3 В включают вывод CLK, который связан

с выводом ADS1299. CLK необходим для синхронизации модуля Daisy. Вывод RST связан с выводом ADS1299 MCLR для аппаратного сброса микросхем АЦП. На плате используется PICkit 3 для загрузки ПО в микросхемы PIC. Контакты D11, D12 и D13 могут быть цифровыми или аналоговыми (для аналоговых целей они называются буквами A и цифрами, указывающими номер порта). Вывод D11 также является PGD и имеет подключенный к AGND последовательно с резистором 1K синий светодиод. Вывод D12 представляет собой PGC для целей загрузки. Выводы D17 и D18 - только цифровые входы / выходы. Вывод D17 подключен к кнопке PROG. Кнопку PROG можно использовать в качестве разрешения начала программирования, установив соответствующее значение в меню “MODE” и выполнив на нем “digitalRead” (кнопка может выдержать 470 тыс. нажатий; нажатие кнопки PROG переводит контакт D17 на DVDD).

2.6.3. Кнопочные выключатели на плате

Кнопка RST подключена к MCLR на PIC. Нажатие на этот кнопочный переключатель сбросит PIC контроллер. Чтобы перевести PIC контроллер в режим загрузки ПО для перепрограммирования, необходимо нажать кнопку RST и удерживать ее. Затем надо нажать кнопку PROG. Затем отпустить кнопку RST. После этого синий светодиод будет мигать, сообщая, что PIC готов принять новый код.

2.6.4. Ползунковые переключатели

Ползунковый переключатель на плате включает питание. Ползунковый переключатель имеет три положения:

BLE - будет активирован BLE и соединен с контактом 4 RFduino;

OFF - отключение батареи от платы;

ПК - BLE не будет активирован и соединен с контактом 4 RFduino (выбор BLE / ПК пока не реализован).

33

2.6.5. Печатная плата Cyton

Печатная плата устройства Cyton имеет 4 слоя (верхний, нижний и два внутренних). Разводка слоев печатной платы представлена на рис. 2.26.

Верхний слой

Внутренние слои

Нижний слой

Рис. 2.26. Слои разводки печатной платы

34

2.7. Формат данных платы Cyton

Приведенное ниже описание формата данных платы Cyton относится только к OpenBCI v1(2014-2016 года) и v2.0.0 (осень 2016 и далее). Платы

Cyton содержат микроконтроллеры ChipKIT или ATmega, которые могут быть запрограммированы через Arduino IDE. На плате Cyton имеется встроенный радиомодуль RFDuino, действующий как самостоятельное устройство. Система Cyton включает в себя USB-ключ для ПК, который выполняет роль хоста RFDuino. Формат данных OpenBCI, видимый на ПК, определяется комбинацией кода Arduino на плате Cyton и кода RFDuino, запущенного на хосте.

2.7.1. RFDuino вместо стандартного Bluetooth

Плата Cyton использует модули RFDuino для своего беспроводного соединения Bluetooth. Для достижения максимальной скорости передачи данных OpenBCI предоставляет USB-ключ RFDuino, который подключается к компьютеру. При использовании этого USB-ключа скорость передачи данных может быть выше, чем при использовании стандартного соединения Bluetooth 4.n BLE.

2.7.2. Скорость соединения с USB-ключом

USB-ключ RFDuino («Хост» RFDuino) подключен к последовательному преобразователю FTDI USB <>, настроенному на работу с компьютером, как если бы это был стандартный последовательный порт, работающий со скоростью 115200 бод с использованием типичного 8-N-1. Можно работать с более быстрой скоростью передачи (FT231XQ-R на тестируемом USB-ключе выдавала скорость до 1 Мбод). Но для стабильного соединения при загрузке кода в целевую микросхему требуется скорость 115200 бод.

2.7.3. Запуск платы Cyton

ChipKIT на 32-битной плате не производит цикл сброса, когда его последовательный порт открыт. Из-за этого можно подключиться к 32-битной плате и не знать ее состояние. В этом случае терминал или приложение должны записать “vв последовательный порт, что заставит систему сбросить свое состояние до значений по умолчанию.

8-битная плата Cyton устарела. Когда компьютер откроет последовательный порт ключа, он сбросит 8-битную плату. Это связано с тем, что сигнал DTR от FTDI передается по радиоканалу, а ATmega настроена как Arduino UNO. После этого можно увидеть мигание светодиода, подключенного к выводу 13. Примерно через секунду плата OpenBCI сгенерирует несколько

35

строк текста ASCII с отображением идентификаторов устройства ADS1299 и акселерометра, заканчивающихся на “$$$”. Если вы пишете клиентское программное обеспечение для ПК, то программное обеспечение должно ожидать при запуске строку ASCII и искать “$$$”, чтобы узнать, что оно готово к приему команд.

2.7.4. Инициирование бинарного перевода

Как только плата Cyton инициализирует себя и отправляет “$$$”, она ожидает команды. Другими словами, она не отправляет данные, пока не получит указание начать отправку данных. Чтобы начать передачу данных, необходимо передать символ “b” в формате ASCII. Как только символ “b” получен, будет происходить непрерывная передача данных в двоичном формате. Чтобы отключить передачу данных, необходимо отправить символ

“s.

2.7.5. Версия прошивки 1.0.0

Радиомодули как хоста, так и устройства принимают к сведению “bи “sи соответственно входят или выходят из режима потоковой передачи. Радиомодули на плате Cyton и плате Dongle имеют два состояния:

1)“! streamingData”;

1.1) радиомодуль выглядит как прозрачный UART между ПК и целевой микросхемой; 1.2) командные символы нуждаются в некоторой задержке до и после

отправки, чтобы перейти с ПК на целевую микросхему;

2)streamingData;

2.1) радиомодуль устройства ожидает получения 31 байта в каждом пакете данных от целевой микросхемы; 2.2) после 1 секунды отсутствия передачи или отсутствия получения 31

байта устройство и хост вернутся в режим “! StreamingData”;

2.3) командные символы могут быть отправлены с ПК в соответствии с протоколом синхронизации, описанным выше.

2.7.6.Версия прошивки 2.0.0

Вновом радиокоде устройства и хоста нет состояний. Однако пришлось ввести формат пакета, который должен соблюдаться при попытке отправить сэмплы на частоте 250 Гц. Поэтому необходимо отправить однобайтовый заголовок “0x41”, затем 31 байт данных (на выбор), а затем “0xCX”, где X - это 0-F в шестнадцатеричном формате. Эта буква X передается на ПК/драйвер и описывается в конце следующего раздела.

36

2.7.7. Двоичный формат

Каждый пакет содержит заголовок, за которым следует счетчик выборок, за которыми следуют 8 данных канала АЦП, затем значения трех осей акселерометра и нижний колонтитул. Данные акселерометра являются необязательными, и их не нужно отправлять с каждым пакетом при использовании. Если акселерометр не используется, байты будут иметь значение 0. Это позволяет отправлять пользовательские вспомогательные данные в последних шести байтах перед нижним колонтитулом. Кроме того, может быть место для сжатия большего количества образцов. Далее приведем подробности формата данных.

1.Заголовок:

Байт 1: 0xA0.

Байт 2: номер образца.

Формат данных ЭЭГ: значения имеют 24-разрядную подпись, сначала MSB:

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

Байты 6-8: значение данных для канала ЭЭГ 2.

Байты 9-11: значение данных для канала ЭЭГ 3.

Байты 12-14: значение данных для канала ЭЭГ 4.

Байты 15-17: значение данных для канала ЭЭГ 5.

Байты 18-20: значение данных для канала ЭЭГ 6.

Байты 21-23: значение данных для канала ЭЭГ 6.

Байты 24-26: значение данных для канала ЭЭГ 8.

2.Aux Data:

Байты 27-32: 6 байтов данных определены и проанализированы на основе нижнего колонтитула.

3.Нижний колонтитул:

Байт 33: 0xCX, где X - 0-F в шестнадцатеричном виде.

2.7.8. Таблица байтов для версии прошивки 1.0.0

Следующая таблица (табл. 2.1) отсортирована по “Stop Byte”. Драйверы должны использовать “Stop Byte”, чтобы определить, как анализировать 6 AUX байтов.

 

 

 

 

 

 

Таблица 2.1

Стоп Байт

Байт 27

Байт 28

Байт 29

Байт 30

Байт 31

 

Байт 32

 

 

 

 

 

 

 

 

0xC0

AX1

AX0

AY1

AY0

AZ1

 

aZ0

 

 

 

 

 

 

 

 

 

 

 

37

 

 

 

 

AX1-AX0: значение данных для канала акселерометра “X”. AY1-AY0: значение данных для канала акселерометра “Y”. AZ1-AZ0: значение данных для канала акселерометра “Z”.

2.7.9. Таблица байтов для версии прошивки 2.0.0

Следующая таблица (табл. 2.2) отсортирована по “Stop Byte”. Драйверы должны использовать ”Stop Byte”, чтобы определить, как анализировать 6 AUX байтов.

 

 

 

 

 

 

 

Таблица 2.2

Стоп

Байт

Байт

Байт

Байт

Байт

Байт

 

 

Байт

27

28

29

30

31

32

Имя

 

 

 

 

 

 

 

 

 

 

0xC0

AX1

AX0

AY1

AY0

AZ1

AZ0

Стандарт с ускорением

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Стандарт с необработанными

 

0xC1

UDF

UDF

UDF

UDF

UDF

UDF

данными

 

 

 

 

 

 

 

 

 

 

0xC2

UDF

UDF

UDF

UDF

UDF

UDF

Определяемые пользователем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ускоренные данные с

 

 

 

 

 

 

 

 

устанавливаемой временной

 

0xC3

AC

AV

T3

T2

T1

T0

меткой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ускоренные данные с

 

0xC4

AC

AV

T3

T2

T1

T0

временной меткой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Необработанные данные с

 

 

 

 

 

 

 

 

устанавливаемой временной

 

0xC5

UDF

UDF

T3

T2

T1

T0

меткой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Необработанные данные с

 

0xC6

UDF

UDF

T3

T2

T1

T0

временной меткой

 

 

 

 

 

 

 

 

 

 

AX1-AX0: значение данных для канала акселерометра “X”. AY1-AY0: значение данных для канала акселерометра “Y”. AZ1-AZ0: значение данных для канала акселерометра “Z”.

Частоту передачи данных акселерометра можно установить 25 Гц с временными метками из-за некоторых чересстрочных и временных ограничений. Так как транслирование данных канала происходит на частоте 250 Гц и данных акселерометра на частоте 25 Гц, по сути, есть 10 выборок для отправки данных акселерометра. Когда “a” будет иметь значение “0xC3” или “0xC4”, необходимо проанализировать 27-й байт, чтобы указать, каким должен быть байт 28 (табл. 2.3).

38

Таблица 2.3

Байт 27

Байт 28

 

 

'X'

AX1

 

 

'x'

AX0

 

 

'Y'

AY1

 

 

'y'

AY0

 

 

'Z'

AZ1

 

 

'z'

AZ0

 

 

Где “AC” обозначает ускоренный код и является символом ASCII. Верхний регистр означает, что байт 28 является старшими 8 битами 16разрядного целого числа со знаком, а нижний регистр представляет младшие 8 бит 16-разрядного целого числа со знаком. Оба байта объединяются, чтобы сформировать одно число. Например, предположим, что сэмпл (образец) приходит с “AC”, равным 'X', тогда мы должны сохранить значение в “AV” во временной переменной. Следующий образец приходит с 'x', поскольку это “AC” байт. Необходимо объединить этот образец в байте 28 с образцом в предыдущем байте, а затем преобразовать полученное значение, как описано ниже в разделе под названием “16-разрядные значения данных”.

T3-T0: 32-разрядное целое число без знака. Это значение времени (в мс) с момента запуска платы. Это значение можно просто сохранять как целое число без знака.

Значения “0xC3”и “0xC5” отличаются тем, что они содержат те же точные данные, что и их встречные части “0xC4” и “0xC5”.

Однако “0xC3” и “0xC5” отправляются только после того, как команда “time stamp/sync” “<” была отправлена с ПК/драйвера на плату. Когда плата анализирует “<”, она устанавливает высокий флаг для отправки на следующей выборке другого конечного байта, чтобы позволить ПК/драйверу рассчитать время отклика в оба конца.

UDF означает «определяемый пользователем» и общую перспективу драйвера, что он должен быть оставлен в покое и отправлен пользователю.

2.7.10. 24-битные значения данных со знаком

Значения данных ЭЭГ передаются в виде 24-разрядного целого числа со знаком, что немного необычно. Этот числовой формат использовался потому, что это родной формат, используемый микросхемой ADS1299, которая лежит в основе платы Cyton. Чтобы преобразовать этот необычный числовой формат в более стандартное 32-разрядное целое число со знаком, можно использовать идеи из примера, представленного ниже (код Processing (aka, Java)).

39