
RobustEEG Base
ppolGTMonster/RobustEEG_forUHFMRI
Hardware for an Open Source EEG usable in high magnetic Fields

code repo for EMG PCB
EMG PCB is an open-source printed circuit board by PsXcor, from the PsXcor/EMG_PCB_PROJECT repository on GitHub. It is a 4-layer board of 52 × 41.4 mm with 97 parts on 66 nets, routed with 771 tracks and 215 vias.
It is built around the ADS1299-4PAGR, TPD4E001DRLR and TPS60403DBV, with the TPS72325DBV, TPS7A2033DQN and USBLC6-2SC6 among its other parts. Its parts include 48 capacitors, 18 resistors, 9 ICs, 4 inductors and 3 connectors.
A custom wearable electromyography (EMG) acquisition system built around the Texas Instruments ADS1299-4 analog front end and the Seeed Studio XIAO nRF52840.
The project includes:
Project status: Active prototype development. The hardware, firmware, BLE protocol, and signal-processing workflow are still being tested and refined.
The system measures small differential biopotential signals using the ADS1299-4, transfers samples to the XIAO nRF52840 over SPI, and sends the data wirelessly to a computer over BLE.
Skin electrodes
│
▼
Input protection and filtering
│
▼
ADS1299-4 analog front end
│ SPI + DRDY
▼
XIAO nRF52840
│ Bluetooth Low Energy
▼
Python receiver
├── Live plot
├── Packet diagnostics
└── CSV recordingAdd image: photo of the assembled PCB and battery-powered
Current development work includes:
EMG_PCB_PROJECT/
├── firmware/
│ ├── emg.ble/
│ │ └── emg.ble.ino
│ └── test_ads_mcu_communication_preinstal/
│ └── test_ads_mcu_communication_preinstal.ino
│
├── python/
│ └── emg_project/
│ ├── emg_ble_receiver.py
│ ├── requirements.txt
│ └── .venv/
│
├── hardware/
│ └── kicad/
│ └── EMG_PCB/
│ ├── EMG_PCB.kicad_pro
│ ├── EMG_PCB.kicad_sch
│ ├── ADS1299_Section.kicad_sch
│ ├── MCU_Section.kicad_sch
│ ├── Power_Supplies.kicad_sch
│ ├── EMG_PCB.kicad_pcb
│ ├── fp-lib-table
│ ├── sym-lib-table| Component | Purpose |
|---|---|
| ADS1299-4PAGR | Four-channel, 24-bit biopotential analog front end |
| XIAO nRF52840 | Microcontroller, SPI controller, and BLE radio |
| External 2.048 MHz clock | ADS1299 master clock |
| Li-ion battery | Portable isolated power source |
| Custom analog power supplies | Generate the required analog and digital rails |
| Input protection/filter network | Protects and filters electrode inputs |
| Electrode connector | Connects the measurement and reference electrodes |
The PCB uses the following rails:
+2.5 V-2.5 V3.3 VVBUS for development and chargingThe ADS1299 analog supply and reference arrangement are implemented on the custom board. The XIAO nRF52840 provides the embedded processing and BLE connection.
Open the complete project using:
hardware/kicad/EMG_PCB/EMG_PCB.kicad_proDo not normally open one of the child schematic files directly.
The root schematic is:
EMG_PCB.kicad_schIt references these hierarchical child sheets:
ADS1299_Section.kicad_sch
MCU_Section.kicad_sch
Power_Supplies.kicad_schThe child .kicad_sch files are not duplicates. Each file stores one hierarchical page used by the root schematic.
Custom KiCad resources are stored in:
hardware/kicad/EMG_PCB/lib/This includes:
Keeping these resources in the repository makes the project easier to open on another computer without losing custom parts.
The EMG_PCB_Manufacture folder contains generated Gerber and drill files. Snapshot of a specific manufactured board revision.
The firmware is currently developed in the Arduino IDE for the XIAO nRF52840; however, switching over to platformer.io and Cursor for serious development.
The active configuration has included:
Register settings may change as testing continues. The firmware source should be treated as the authoritative current configuration.
The Python receiver is located at:
python/emg_project/emg_ble_receiver.pyIt scans for the BLE device:
Nykin-EMGThe receiver decodes the custom BLE packet format implemented by the firmware and can:
Developed as a personal electrical engineering and embedded-systems project
| Qty | Value | Footprint | References |
|---|---|---|---|
| 20 | 1uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C1, C4, C10, C15, C17, C18, C21, C30, C32, C34, C36, C37, C43, C44, C45, C46 +4 |
| 12 | 0.1uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C12, C14, C16, C19, C26, C29, C31, C38, C40, C41, C47, C48 |
| 9 | 10uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C2, C3, C7, C13, C20, C22, C24, C25, C27 |
| 6 | 10k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R3, R4, R8, R9, R10, R11 |
| 4 | 3.3 | Inductor_SMD:L_0805_2012Metric_Pad1.05x1.20mm_HandSolder | L1, L2, L3, L4 |
| 4 | TestPoint | TestPoint:TestPoint_Pad_D2.5mm | TP2, TP3, TP4, TP7 |
| 3 | 0k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R5, R12, R16 |
| 3 | 2.2uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C23, C28, C35 |
| 3 | MountingHole_Pad | TestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mm | H1, H2, H3 |
| 2 | 4.99k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R1, R6 |
| 2 | 5.1k | Resistor_SMD:R_0201_0603Metric_Pad0.64x0.40mm_HandSolder | R17, R18 |
| 2 | MountingHole_Pad | ADS1299-4PAG:Untitled | H4, H5 |
| 2 | TPD4E001DRLR | Package_TO_SOT_SMD:SOT-23-6 | U8, U11 |
| 2 | TestPoint | TestPoint:TestPoint_Pad_D4.0mm | TP6, TP10 |
| 1 | 0.01uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C33 |
| 1 | 1.5nF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C42 |
| 1 | 100k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R13 |
| 1 | 100uF | Capacitor_SMD:C_1210_3225Metric_Pad1.33x2.70mm_HandSolder | C11 |
| 1 | 102010448 | XIAO_nRF52840:MODULE_102010448 | U1 |
| 1 | 1M | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R2 |
| 1 | 1k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R7 |
| 1 | 200k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R14 |
| 1 | 4700pF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C39 |
| 1 | 47k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R15 |
| 1 | 500mA trip | Fuse:Fuse_0805_2012Metric_Pad1.15x1.40mm_HandSolder | F1 |
| 1 | ADS1299-4PAGR | ADS1299-4PAG:QFP50P1200X1200X120-64N | U3 |
| 1 | Conn_01x03_Pin | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J3 |
| 1 | Conn_01x04 | Molex_connector:MOLEX_874370443 | J1 |
| 1 | HC735-2.048MHZ | Oscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mm_HandSoldering | OSC2 |
| 1 | LED | Diode_SMD:D_0603_1608Metric_Pad1.05x0.95mm_HandSolder | D1 |
| 1 | SW_SPDT | ADS1299-4PAG:MHSS1105 | SW1 |
| 1 | TPS60403DBV | Package_TO_SOT_SMD:SOT-23-5 | U2 |
| 1 | TPS72325DBV | Package_TO_SOT_SMD:SOT-23-5 | U4 |
| 1 | TPS73225DBVT | Package_TO_SOT_SMD:SOT-23-5 | U5 |
| 1 | TPS7A2033 | Package_TO_SOT_SMD:SOT-23-5 | U6 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U9 |
| 1 | USB_C_Receptacle_PowerOnly_6P | Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-17 | J2 |
It measures 52 × 41.4 mm and has 4 copper layers, 1.6 mm thick.
97 parts, built around the ADS1299-4PAGR, TPD4E001DRLR, TPS60403DBV and TPS72325DBV. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the PsXcor/EMG_PCB_PROJECT repository on GitHub, at the commit this page was made from: the board is hardware/kicad/EMG_PCB/EMG_PCB.kicad_pcb and its schematic hardware/kicad/EMG_PCB/ADS1299_Section.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask PsXcor before reusing the design.

ppolGTMonster/RobustEEG_forUHFMRI
Hardware for an Open Source EEG usable in high magnetic Fields

kamilix2003/Phase-Shifter
Interface for RF phase shifter as part of phased antenna array


crsknr/hw_udsp-card
A compact DSP development board for real-time embedded audio and sensing



