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.
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.
- The original archive
- What's in this board
- Technical specifications
- Signal names found in the schematics
- Connectors
- System architecture
- Parts catalog
- Repository contents
- Opening the project
- Getting started
- Safety & disclaimer
- Roadmap
- Contributing
- License
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.
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.SchDoc–EEG_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).
| 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 |
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_1…IN8P_1/IN8N_1(differential electrode pairs), each with a matching bias-drive pairC_IN1P_1/C_IN1N_1… etc. - Analog supply:
VCAP1_1–VCAP4_1(ADS1299's internal charge-pump decoupling nodes),5V,GND - Microcontroller:
XIN/XOUT(crystal),GND - USB/power:
USB_POWER,5V,GND
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) |
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
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.
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 |
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.
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.
- You'll need Altium Designer — unlike Adam-EEG's EAGLE source, there's no free-tier open-source
viewer that renders native
.SchDoc/.PcbDocfiles (Altium's own free "Altium 365 Viewer" can open them read-only in a browser if you don't have a full license). - Clone this repo and open
SOUL_EEG/SOUL_EEG.PrjPcbdirectly — no path fix-up needed (see above). - Reference datasheets, for the exact part numbers used in this design: ADS1299 · ATSAM3U4EA-AU · TPS63001
- Gerbers/drill files are not checked in — generate them from
SOUL_EEG_PCB_Rev1.PcbDocviaSOUL_EEG.OutJobif you're sending this to fab.
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.
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.
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.
Apache License 2.0 — see LICENSE.