Над основной платой ставится вторая такая же плата со своим ADS1299. Плата внизу (A) остаётся главной и отдаёт по Bluetooth все 16 каналов. Плата сверху (B) читает каналы 9–16 и передаёт их на A по трём проводам через разъём J5. Пайки к ножкам микросхем в основном варианте нет. То же самое по шагам в 3D: 06 Второй этаж в 3D.
В OpenBCI второй ADS1299 передаёт данные через вход DAISY_IN первого. На нашей плате этот вывод (41) припаян к земле. Вывод тактовой частоты CLK (37) никуда не разведён, а шину SPI к разъёмам не вывели. Свободен только J5. Поэтому вторая плата получает свой ESP32 и шлёт готовые отсчёты на A по UART. Нужна вторая плата из заказа в Резоните и второй комплект деталей. Новую печатную плату заказывать не надо.
Каждый ADS1299 работает от своего генератора. Частоты отличаются на доли процента, поэтому прошивка A берёт к каждому своему отсчёту самый свежий отсчёт B. Сдвиг между половинами шапки не больше одного отсчёта (4 мс). Для нейрофидбека, мощности ритмов и BCI этого хватает. Если нужна точная фаза между каналами 1–8 и 9–16 (когерентность, источники), сделайте шаг 9: один провод даёт общий такт.
| Что | Сколько | Где | Заметка |
|---|---|---|---|
| Вторая плата из заказа Резонит | 1 | уже есть | Плата B |
| Детали на вторую плату | 1 комплект | список покупок | Если брали детали на одну плату. Дороже всего ADS1299 (AliExpress 3,3–5,3 тыс. ₽) и ESP32-S3-WROOM-1-N16R8 (Чип и Дип 0,7–1 тыс. ₽). SW1 на B не нужен, см. шаг 1 |
| Стойки M3 латунные «папа–мама» 12 мм | 4 | Ozon, AliExpress | Вкручиваются в стойки платы A сверху, на них ложится B |
| Винты M3×6 | 4 | Ozon | Крепят B сверху |
| Гнёзда TouchProof EE-B05 | 8 | AliExpress | Если осталось меньше 8 из прошлых лотов, нужен ещё лот на 8 |
| Электроды с разъёмом TouchProof 1,5 мм | 8 | как для первых восьми | Или шапка на 16+ позиций |
| Провод МГТФ 0,12–0,2 мм² или Dupont F-F | ≈ 1,5 м | Чип и Дип, Ozon | J5, питание, REF, 8 каналов |
| Разъём PH-2.0 с проводами (2 pin) | 1 | AliExpress, Чип и Дип | Питание на J1 платы B |
| Для шага 9: провод ПЭЛ/ПЭТВ 0,1 мм, флюс, лупа | по желанию | Чип и Дип | Общий такт для двух ADS1299 |
Паяйте по тем же 3D-инструкциям части 1, что и A. Отличия:
Пройдите часть 2 с прошивкой самотеста, как для A. Питание B на время проверки дайте с аккумулятора на J1 (перемычка вместо SW1 уже стоит), USB-C подключите к компьютеру для монитора. Обязательно: ID = 0x3E, DRDY 250 Гц, тестовый сигнал и шум с замкнутыми входами в норме.
Откройте папку firmware/eeg16 в PlatformIO. В ней две конфигурации:
board_a заливается в A по её USB-C. Это замена прошивки firmware/eeg.board_b заливается в B по её USB-C (B при этом на аккумуляторе).В PlatformIO внизу слева выберите окружение (env) и нажмите Upload. Шлите прошивки до установки этажа: потом USB-C платы B закрыт стенкой корпуса.
Три провода по 6–8 см, скрутите их между собой. Надпись на плате у разъёма: GND-RX-TX.
| Плата A, J5 | Плата B, J5 | Сигнал | |
|---|---|---|---|
| TX (GPIO43) | → | RX (GPIO44) | команды от A: проверка контакта, тест, старт |
| RX (GPIO44) | ← | TX (GPIO43) | отсчёты каналов 9–16, 921600 бод |
| GND | — | GND | общая земля |
TX одной платы всегда идёт на RX другой. Если соединить TX с TX, ничего не сгорит, но данных не будет.
Обе платы питаются от одного аккумулятора через тот же тумблер. Припаяйте второй разъём PH-2.0 параллельно первому: красный к выходу тумблера (OUT+ TP4056 после тумблера), чёрный к OUT−. Вставьте его в J1 платы B. Проверьте полярность по шагу «Аккумулятор» в части 3: квадратная площадка J1 это минус.
Две платы берут примерно в полтора раза больше тока, аккумулятор сядет быстрее. Когда к A подключён USB для монитора, B всё равно питается от аккумулятора, это нормально: земли плат соединены через J5 и минус аккумулятора.
| Гнездо на панели | Куда паять |
|---|---|
| REF | отверстие «REF» на A и «REF» на B: один электрод, провод раздваивается |
| BIAS | только «BIAS» на A, как раньше. На B «BIAS» пустой |
| К9 … К16 | «1+» … «8+» на B (К9 = 1+, К10 = 2+, … К16 = 8+) |
| «1−» … «8−», «SRB2», «GND» | не используются, как и на A |
Цвета проводов К9–К16 повторяют К1–К8 (цветовой код резисторов). На каждый провод B наденьте кусочек термоусадки или малярного скотча с буквой B.
Гнёзда. В торцевой стенке места больше нет. Восемь новых гнёзд ставятся в заднюю длинную стенку F (137 × 38 мм, сторона без антенны) двумя рядами по четыре, с тем же шагом: 11 мм по горизонтали, 15 мм между рядами. Шаблон сверловки панели подходит, если взять из него четыре столбца.
Электродов на голове нет. Тумблер включён, к A подключён USB, в PlatformIO открыт монитор порта A (115200).
Board A, 16 channels и Board B: data is coming. Если пишет NO DATA, проверьте J5 крест-накрест и питание B.B samples used … repeated …. Первое число растёт примерно на 2500, второе маленькое (единицы–десятки), bad frames около нуля.t и Enter. Обе платы включают внутренний тестовый сигнал.t: тестовый сигнал выключен.Предлагаемая раскладка 10-20: на A ваши восемь отведений как раньше, на B К9 Fp1, К10 Fp2, К11 F7, К12 F8, К13 T7, К14 T8, К15 P7, К16 P8. Вместе с F3, F4, C3, Cz, C4, Pz, O1, O2 на плате A это покрывает всю голову.
Делайте только после того, как шаг 8 прошёл. Нужны лупа, флюс и провод 0,1 мм в лаке.
firmware/eeg16/platformio.ini замените -D SYNC_CLOCK=0 на -D SYNC_CLOCK=1 и перепрошейте обе платы.Board B ready, а repeated в отчёте почти не растёт. Если B пишет no ADS1299 answer, такт до B не доходит: проверьте провод 37 и CLKSEL на земле.После шага 9 плата B без A не работает: её ADS1299 молчит без внешнего такта. Чтобы вернуть B в самостоятельный режим, поставьте R29 обратно и уберите перемычку CLKSEL–GND.
A5 5A, счётчик, 27 байт данных (3 статуса + 8 каналов по 3 байта), контрольный XOR. 250 кадров в секунду идут на скорости 921600 бод, это меньше 10 % канала. Bluetooth на B выключен.C3 cmd ~cmd: проверка контакта вкл/выкл (кнопка SW3 на A), тестовый сигнал (t в мониторе), старт для режима общего такта. Загрузочный текст ESP32 на тех же проводах отбрасывается.EEG_BLE_Receiver.exe 16 каналов не читает.| Признак | Что проверить |
|---|---|
Board B: NO DATA | Питание B (TP6 VIN около 3,7–4,2 В), J5 крест-накрест, GND между J5. Монитор B по его USB: должна быть строка Sending samples to board A. |
Много bad frames | Провода J5 длиннее 15 см или не скручены, плохая пайка на J5. |
B пишет ADS1299 ID … expected 0x3E | Как для A: пайка U4, питание AVDD/AVSS/DVDD на TP2–TP4, подлинность чипа. |
| К9–К16 шумят сильнее, чем К1–К8 | REF не доходит до B (прозвоните REF на панели до отверстия «REF» на B), нет общей земли через J5. |
| Bluetooth стал хуже | Антенна B над антенной A может слегка расстроить её. Сдвиньте B на 1–2 мм назад или разверните провода J5 подальше от антенн. |
Прошивка проверена компилятором только на синтаксис, на живых двух платах ещё не запускалась. Если что-то работает не так, как здесь написано, напишите в Issues. Основа: Xavier Asghar, Low-Cost-EEG, GPL v3.