Skip to content

Repository files navigation

SOUL_EEG (ARM edition)

A 32-channel, ARM Cortex-M3-based EEG / biopotential acquisition board — quad Texas Instruments ADS1299 analog front ends driven by an Atmel ATSAM3U4EA-AU (AT91 ARM Cortex-M3), designed in Altium Designer in 2015.

License: Apache 2.0 CAD: Altium Designer Channels: 32 AFE: ADS1299 x4 MCU: ARM Cortex-M3

This is the ARM-based sibling to Adam-EEG — same core idea (4× TI ADS1299 for 32 truly-simultaneous EEG channels, from the same "Soul Scientific" project era), but a different implementation: Altium instead of EAGLE, and a single ARM Cortex-M3 controller instead of dual ATmega328s. The project name inside the CAD files is SOUL_EEG; the archive's own raw folder structure (preserved below, untouched) traces it to a contributor's machine under the name Luke — this board's own history, not assumed or invented.


Table of contents


The original archive

SOUL_EEG (5-2-2015 7-50-45 PM).zip is preserved exactly as uploaded, byte-for-byte — it is not modified, re-packed, or removed by this cleanup. It's a raw Windows backup snapshot from 2 May 2015, taken as-is off the original design machine (user folders Public\Documents\Altium\... and Luke\Documents\... / Luke\Downloads\..., nested five levels deep). That's the authoritative, unaltered historical record of this board, timestamped the day it was captured — kept intact on purpose.

What's in this board

Everything below was read directly out of the real Altium files (.PrjPcb, .SchDoc, .BomDoc) — not inferred from the README's own prior description or assumed from the project name.

  • 4× identical ADS1299 analog channel sheets (EEG_1.SchDocEEG_4.SchDoc), 42 real component instances each: 1× TI ADS1299 (24-bit, 8-channel simultaneous-sampling biopotential ADC), 21 capacitors, 16 resistors, and 4 header connectors (2× 2-pin, 1× 8×2, 1× 4-pin) per sheet. Four sheets × 8 channels per ADS1299 = the full 32-channel front end.
  • Microcontroller.SchDoc — U1 ATSAM3U4EA-AU: Atmel/Microchip AT91 ARM Cortex-M3, 2×128KB flash, 52KB SRAM, 96 user I/Os, 4× USART, 144-pin LQFP, industrial grade (−40°C to 85°C). Driven by a dedicated ABM8 SMD crystal, with local decoupling, an indicator LED, and a bias resistor.
  • USB_Controller.SchDoc — U2 TPS63001DRCR, TI's buck-boost converter (1.8–5.5V in → fixed 3.3V out), feeding a through-hole USB Type-B connector for host communication/power, plus an inductor, LED, and decoupling.
  • Libraries/JTAG_Connector.SchDoc — the shared JTAG programming/debug header for the ARM core.
  • SOUL_EEG_PCB_Rev1.PcbDoc — the board itself: 2 copper layers (only TOP/BOTTOM referenced in the layer set; no internal planes).

Technical specifications

Subsystem Detail
Analog front end 4 × Texas Instruments ADS1299 — 24-bit, 8-channel, simultaneous-sampling, low-noise biopotential ADC
Total channels 32 channels across 4 ADS1299 devices (8 per chip)
Controller 1 × Atmel ATSAM3U4EA-AU — AT91 ARM Cortex-M3, 2×128KB Flash, 52KB SRAM, 96 I/Os, 4×USART, 144-pin LQFP
Clocking ABM8 SMD crystal oscillator (microcontroller)
Power TI TPS63001DRCR buck-boost, 1.8–5.5V in → 3.3V regulated out
Host interface USB Type-B (through-hole)
Debug Dedicated JTAG header (shared library sheet)
Board 2-layer (TOP/BOTTOM copper only)
CAD format Altium Designer, 2015 (native .SchDoc/.PcbDoc/.PrjPcb binary + text project files)
License Apache License 2.0

Signal names found in the schematics

Extracted directly from the schematic files' own net labels and ports — real signal names, not guessed from silkscreen or footprint alone.

  • Per-channel analog inputs (×8 per ADS1299 sheet, ×4 sheets): IN1P_1/IN1N_1IN8P_1/IN8N_1 (differential electrode pairs), each with a matching bias-drive pair C_IN1P_1/C_IN1N_1 … etc.
  • Analog supply: VCAP1_1VCAP4_1 (ADS1299's internal charge-pump decoupling nodes), 5V, GND
  • Microcontroller: XIN/XOUT (crystal), GND
  • USB/power: USB_POWER, 5V, GND

Connectors

Real header connectors present on the board, per sheet (verified by counting LIBREFERENCE= entries directly in each .SchDoc) — what each one carries is stated only where the schematic's own net labels confirm it, not guessed:

Sheet Connector Type Confirmed signals
Each EEG_x.SchDoc (×4) (unlabeled) 1× 8×2 header Not confirmed — no net labels cross this header in the schematic; almost certainly the ADS1299↔MCU SPI/control bus, but the exact pin assignment isn't recoverable from these files. See System architecture.
Each EEG_x.SchDoc (×4) (unlabeled) 1× 4-pin header, 2× 2-pin headers Not confirmed — same limitation as above
Libraries/JTAG_Connector.SchDoc JTAG 1× 10×2 (20-pin) header Standard 20-pin ARM JTAG/SWD debug header, shared across the design
USB_Controller.SchDoc USB-B THT USB Type-B USB_POWER, 5V, GND (confirmed via net labels)

System architecture

flowchart LR
    subgraph AFE["Analog Front End"]
        A1["ADS1299 #1<br/>ch 1-8<br/>(EEG_1.SchDoc)"]
        A2["ADS1299 #2<br/>ch 9-16<br/>(EEG_2.SchDoc)"]
        A3["ADS1299 #3<br/>ch 17-24<br/>(EEG_3.SchDoc)"]
        A4["ADS1299 #4<br/>ch 25-32<br/>(EEG_4.SchDoc)"]
    end
    MCU["ATSAM3U4EA-AU<br/>ARM Cortex-M3"]
    A1 -- "8x2 header" --- MCU
    A2 -- "8x2 header" --- MCU
    A3 -- "8x2 header" --- MCU
    A4 -- "8x2 header" --- MCU
    XTAL["ABM8 crystal<br/>XIN/XOUT"] --> MCU
    JTAG["JTAG header"] -.-> MCU
    USB["TPS63001 buck-boost<br/>+ USB Type-B"] -- "USB_POWER" --> PWR
    PWR["5V / 3.3V / 1.8V rails"] --> AFE
    PWR --> MCU
Loading

Each ADS1299 sheet is identical (42 parts) and samples 8 channels; four of them make the full 32. What's verified vs. what isn't: the shared power rails (5V/3.3V/1.8V/GND) and the USB/crystal/ JTAG connections above are real, confirmed directly from net labels and ports in the schematic files. The digital bus between each ADS1299 sheet and the MCU (SPI clock/data/chip-select/data-ready) is not carried by named net labels anywhere in these files — it's wired through each sheet's 8×2 header connector instead, without descriptive pin names. Unlike Adam-EEG (where the SPI daisy-chain was explicitly labeled net-by-net and could be verified), this board's exact SPI topology — daisy-chain vs. individual per-chip bus vs. something else — is a real, disclosed gap: not fabricated as a "probably daisy-chained like Adam-EEG" guess, and not hidden either.

Parts catalog

The real 39-line-item catalog from Soul_EEG.BomDoc (Altium's "Live BOM"), grouped by distinct part/footprint. This lists what part types exist in the design, not a per-designator BOM with a value for every individual resistor/capacitor instance — the live-BOM export groups those by generic footprint (C1206, Res3) rather than by real per-instance value, and that per-designator linkage isn't recoverable from these files without a full Altium binary parser (not attempted — stated honestly rather than guessed at).

Part / footprint Value / variant Description Qty (catalog entries)
ADS1299 TI 24-bit 8-ch biopotential ADC 1
ATSAM3U4EA-AU AT91 ARM Cortex-M3, 144-pin LQFP 1
TPS63001DRCR TI buck-boost converter, 10-pin SON 1
ABM8 Crystal 4-SMD XTAL_1 SMD crystal 1
USB_TypeB USB-B THT USB Type-B connector 1
Cap Semi 4.7nF Capacitor (semiconductor SIM model) 1 real value + 25 generic-footprint entries
Res3 4.99KΩ Resistor 1 real value + 13 generic-footprint entries
Inductor Inductor 1
LED0 Green LED 1
Header 2 2-pin header 1
Header 4 4-pin header 1
Header 8×2 16-pin dual-row header 1
Header 10×2 20-pin dual-row header (JTAG) 1

Repository contents

SOUL_EEG (5-2-2015 7-50-45 PM).zip   ← original 2015 backup, untouched, kept for provenance
SOUL_EEG/                            ← the same real files, extracted and reorganized for browsing
├── SOUL_EEG.PrjPcb                  ← Altium project file (library paths fixed, see below)
├── SOUL_EEG.PrjPcbStructure
├── SOUL_EEG.OutJob                  ← output job (Gerbers/drill/reports)
├── Soul_EEG.BomDoc                  ← live BOM (39 catalog line items)
├── SOUL_EEG_PCB_Rev1.PcbDoc         ← the board
├── EEG_1.SchDoc … EEG_4.SchDoc      ← the 4 ADS1299 analog channel sheets
├── Microcontroller.SchDoc           ← ATSAM3U4EA-AU ARM Cortex-M3 sheet
├── USB_Controller.SchDoc            ← TPS63001 + USB-B sheet
├── ADS1299.SchLib / ADS1299.PcbLib  ← project-local ADS1299 symbol/footprint
└── Libraries/                       ← shared libraries the project depends on
    ├── common.SchLib / common.PcbLib
    ├── JTAG_Connector.SchDoc
    ├── PBL - THD Packages.PcbLib
    ├── PBL - SMD Packages.PcbLib
    ├── PBL - Connectors.SCHLIB
    └── Create Digikey BOM.OutJob

One real fix made during extraction: the original .PrjPcb's 7 library references pointed at absolute paths five directories up a specific Windows machine's user folder (e.g. ..\..\..\..\..\Luke\Downloads\Libs_RRutledge 2013-12-23\PBL - THD Packages.PcbLib) — meaning the project could never actually reopen correctly on any other computer, even with the whole zip intact, unless that exact folder structure was recreated. In SOUL_EEG/SOUL_EEG.PrjPcb, those 7 paths now point at the sibling Libraries/ folder above, relative to the project file itself. This is the only content change made anywhere in this cleanup — every .SchDoc/.PcbDoc/.SchLib/.PcbLib/.BomDoc binary file is byte-identical to what's inside the original zip.

Opening the project

Open SOUL_EEG/SOUL_EEG.PrjPcb in Altium Designer (2015-era or newer — Altium maintains backward file-format compatibility). All 7 library references now resolve relative to the project file, so no manual path fix-up is needed after cloning.

Getting started

  1. You'll need Altium Designer — unlike Adam-EEG's EAGLE source, there's no free-tier open-source viewer that renders native .SchDoc/.PcbDoc files (Altium's own free "Altium 365 Viewer" can open them read-only in a browser if you don't have a full license).
  2. Clone this repo and open SOUL_EEG/SOUL_EEG.PrjPcb directly — no path fix-up needed (see above).
  3. Reference datasheets, for the exact part numbers used in this design: ADS1299 · ATSAM3U4EA-AU · TPS63001
  4. Gerbers/drill files are not checked in — generate them from SOUL_EEG_PCB_Rev1.PcbDoc via SOUL_EEG.OutJob if you're sending this to fab.

Safety & disclaimer

This is a research/hobbyist biopotential acquisition board, not a certified medical device. If building this to record real physiological signals, use proper isolation (USB isolation, battery power, no mains-referenced ground) and follow standard biopotential safety practice before connecting anything to a person.

Roadmap

This 2015 quad-ADS1299 ARM board is a real, standalone alternative to Adam-EEG's EAGLE/dual-ATmega328 design — not a fork of it, and not superseded by it. The single biggest open item is documented above in System architecture and Connectors: the real ADS1299↔MCU SPI bus topology and per-pin header signal names aren't recoverable from the schematic files as they stand, only from opening the project in Altium and tracing the routed wires directly.

Contributing

Issues and pull requests are welcome — see CONTRIBUTING.md. Whether it's tracing the real SPI bus topology, a KiCad conversion, a BOM/sourcing update, or a build log from your own fab run, please open an issue first so we can track it.

License

Apache License 2.0 — see LICENSE.

About

Open-hardware 32-channel EEG/BCI acquisition board — quad TI ADS1299 AFE + ARM Cortex-M3 (ATSAM3U4EA-AU), Altium source, 2015. ARM sibling to Adam-EEG.

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors