Skip to the content
PCBKitNew board
4 layers52 × 41.4 mmEMG PCB, the printed circuit board in 3D

code repo for EMG PCB

Size
52 × 41.4 mm
Copper layers
4
Thickness
1.6 mm
Parts
97
Nets
66
Pads
307
Tracks, vias
771, 215
Pours
11
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
17 Jul 2026
Updated
7 Sep 2026

Overview

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.

Main components

6

README

README.md

EMG PCB Project

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:

  • A custom 4-layer KiCad PCB
  • Arduino firmware for ADS1299 configuration and sampling
  • Bluetooth Low Energy (BLE) data streaming
  • A Python receiver for live plotting, diagnostics, and CSV recording
  • Project-local KiCad symbols, footprints, and 3D models

Project status: Active prototype development. The hardware, firmware, BLE protocol, and signal-processing workflow are still being tested and refined.


Project Overview

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.

text
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 recording

Add image: photo of the assembled PCB and battery-powered


Current Capabilities

  • Reads the ADS1299 device ID successfully
  • Configures the ADS1299 through SPI
  • Supports internal test-signal and input-short testing
  • Samples at 250 samples per second
  • Currently focuses on ADS1299 Channel 4
  • Decodes signed 24-bit two's-complement ADC samples
  • Streams custom BLE notifications from the XIAO nRF52840
  • Receives and plots samples in Python
  • Optionally records received samples to CSV
  • Tracks malformed, missing, duplicate, and out-of-order packets
  • Includes project-local KiCad libraries for portability

Current development work includes:

  • Reducing electrode-motion artifacts
  • Investigating clipping during movement
  • Improving the flexed-muscle signal-to-noise ratio
  • real-time data processing
  • Comparing operation with and without ADS1299 BIAS drive
  • Refining packet reliability and receiver-side validation
  • Developing a future Android application

Repository Structure

text
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

Hardware

Main Components

ComponentPurpose
ADS1299-4PAGRFour-channel, 24-bit biopotential analog front end
XIAO nRF52840Microcontroller, SPI controller, and BLE radio
External 2.048 MHz clockADS1299 master clock
Li-ion batteryPortable isolated power source
Custom analog power suppliesGenerate the required analog and digital rails
Input protection/filter networkProtects and filters electrode inputs
Electrode connectorConnects the measurement and reference electrodes

Main Power Rails

The PCB uses the following rails:

  • +2.5 V
  • -2.5 V
  • 3.3 V
  • Li-ion battery input
  • USB VBUS for development and charging

The ADS1299 analog supply and reference arrangement are implemented on the custom board. The XIAO nRF52840 provides the embedded processing and BLE connection.

image image

KiCad Design

Open the complete project using:

text
hardware/kicad/EMG_PCB/EMG_PCB.kicad_pro

Do not normally open one of the child schematic files directly.

Schematic Hierarchy

The root schematic is:

text
EMG_PCB.kicad_sch

It references these hierarchical child sheets:

text
ADS1299_Section.kicad_sch
MCU_Section.kicad_sch
Power_Supplies.kicad_sch

The child .kicad_sch files are not duplicates. Each file stores one hierarchical page used by the root schematic.

Project-Local Libraries

Custom KiCad resources are stored in:

text
hardware/kicad/EMG_PCB/lib/

This includes:

  • Custom symbols
  • Custom footprints
  • STEP/STP 3D models
  • Project library tables

Keeping these resources in the repository makes the project easier to open on another computer without losing custom parts.

Manufacturing Files

The EMG_PCB_Manufacture folder contains generated Gerber and drill files. Snapshot of a specific manufactured board revision.

Firmware

The firmware is currently developed in the Arduino IDE for the XIAO nRF52840; however, switching over to platformer.io and Cursor for serious development.

Current Acquisition Configuration

The active configuration has included:

  • 250 SPS output data rate
  • Channel 4 enabled for acquisition
  • Channels 1–3 powered down during single-channel testing
  • 24-bit signed conversion data
  • Internal square-wave test mode
  • Input-short noise testing
  • Optional normal electrode mode
  • Experimental operation with ADS1299 BIAS disabled or enabled

Register settings may change as testing continues. The firmware source should be treated as the authoritative current configuration.


BLE Data Receiver

The Python receiver is located at:

text
python/emg_project/emg_ble_receiver.py

It scans for the BLE device:

text
Nykin-EMG

The receiver decodes the custom BLE packet format implemented by the firmware and can:

  • Plot samples live
  • Print samples
  • Record data to CSV
  • Run for a fixed duration
  • Operate without plotting
  • Report packet and protocol statistics

Development Roadmap

  • Design custom ADS1299/XIAO PCB
  • Assemble initial prototype
  • Verify main power rails
  • Read ADS1299 device ID
  • Capture internal test signal
  • Perform input-short noise testing
  • Stream samples over BLE
  • Plot and save data in Python
  • Finalize safe electrode-mode register configuration
  • Improve motion-artifact rejection
  • Validate voltage scaling and gain calculations
  • Add repeatable electrode-placement documentation
  • Add digital filtering and signal-quality metrics
  • Develop Android receiver application
  • Complete a revised PCB based on prototype findings

Author Nykin Leskiw

Developed as a personal electrical engineering and embedded-systems project

Parts

97
QtyValueFootprintReferences
201uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC1, C4, C10, C15, C17, C18, C21, C30, C32, C34, C36, C37, C43, C44, C45, C46 +4
120.1uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC12, C14, C16, C19, C26, C29, C31, C38, C40, C41, C47, C48
910uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC2, C3, C7, C13, C20, C22, C24, C25, C27
610kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR3, R4, R8, R9, R10, R11
43.3Inductor_SMD:L_0805_2012Metric_Pad1.05x1.20mm_HandSolderL1, L2, L3, L4
4TestPointTestPoint:TestPoint_Pad_D2.5mmTP2, TP3, TP4, TP7
30kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR5, R12, R16
32.2uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC23, C28, C35
3MountingHole_PadTestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmH1, H2, H3
24.99kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR1, R6
25.1kResistor_SMD:R_0201_0603Metric_Pad0.64x0.40mm_HandSolderR17, R18
2MountingHole_PadADS1299-4PAG:UntitledH4, H5
2TPD4E001DRLRPackage_TO_SOT_SMD:SOT-23-6U8, U11
2TestPointTestPoint:TestPoint_Pad_D4.0mmTP6, TP10
10.01uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC33
11.5nFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC42
1100kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR13
1100uFCapacitor_SMD:C_1210_3225Metric_Pad1.33x2.70mm_HandSolderC11
1102010448XIAO_nRF52840:MODULE_102010448U1
11MResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR2
11kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR7
1200kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR14
14700pFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC39
147kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR15
1500mA tripFuse:Fuse_0805_2012Metric_Pad1.15x1.40mm_HandSolderF1
1ADS1299-4PAGRADS1299-4PAG:QFP50P1200X1200X120-64NU3
1Conn_01x03_PinConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ3
1Conn_01x04Molex_connector:MOLEX_874370443J1
1HC735-2.048MHZOscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mm_HandSolderingOSC2
1LEDDiode_SMD:D_0603_1608Metric_Pad1.05x0.95mm_HandSolderD1
1SW_SPDTADS1299-4PAG:MHSS1105SW1
1TPS60403DBVPackage_TO_SOT_SMD:SOT-23-5U2
1TPS72325DBVPackage_TO_SOT_SMD:SOT-23-5U4
1TPS73225DBVTPackage_TO_SOT_SMD:SOT-23-5U5
1TPS7A2033Package_TO_SOT_SMD:SOT-23-5U6
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U9
1USB_C_Receptacle_PowerOnly_6PConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-17J2

Questions

How big is the EMG PCB PCB?

It measures 52 × 41.4 mm and has 4 copper layers, 1.6 mm thick.

What parts does the EMG PCB use?

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.

Where can I download the EMG PCB KiCad files?

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.

Can I use the EMG PCB design in my own project?

Its repository states no licence, so its author keeps all rights: ask PsXcor before reusing the design.

Similar boards

  • 4 layers85 × 125 mmRobustEEG Base, the printed circuit board in 3D

    RobustEEG Base

    ppolGTMonster/RobustEEG_forUHFMRI

    Hardware for an Open Source EEG usable in high magnetic Fields

    107 parts1
  • 2 layers54 × 35 mmController, the printed circuit board in 3D

    Controller

    kamilix2003/Phase-Shifter

    Interface for RF phase shifter as part of phased antenna array

    67 parts3MIT
  • 4 layers120 × 88 mmDual adc, the printed circuit board in 3D

    Dual adc

    devbisme/ai-circuit-design-tests

    Tests of KiCad-related AI tools.

    163 parts10
  • 6 layers60 × 30 mmUdsp card, the printed circuit board in 3D

    Udsp card

    crsknr/hw_udsp-card

    A compact DSP development board for real-time embedded audio and sensing

    221 parts2GPL-3.0
  • 4 layers249.5 × 95 mmEEZ BB3 CM4 R1B0, the printed circuit board in 3D

    EEZ BB3 CM4 R1B0

    intergalaktik/bb3-cm4

    CM4 compatible MCU board

    251 parts35
  • 4 layers233 × 230.5 mmBB3plus mainboard, the printed circuit board in 3D

    BB3plus mainboard

    eez-open/eez-bb3plus

    EEZ Bench Box 3 Plus (BB3+) Modular T&M chassis

    439 parts13
  • 2 layers175.3 × 95.3 mmLCD PMOD, the printed circuit board in 3D

    LCD PMOD

    goran-mahovlic/LVDS_RGB_experimental

    174 parts5
  • 4 layers63.2 × 70.5 mmHomectrl v2, the printed circuit board in 3D

    Homectrl v2

    jeevan9s/homectrl-sys

    home automation controller

    141 parts2