Skip to the content
4 layers50 × 50 mmChua x7r, the printed circuit board in 3D

5D chaos monitor: XIAO RP2350 + ADS1262 streaming Chua attractor data at 12kHz/ch over USB CDC to Linux

Size
50 × 50 mm
Copper layers
4
Thickness
1.6 mm
Parts
17
Nets
12
Pads
41
Tracks, vias
53, 17
Pours
3
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
7 Aug 2026
Updated
10 Aug 2026

Overview

Chua x7r is an open-source printed circuit board by heurstc, from the heurstc/Chua-memcapacitor repository on GitHub. It is a 4-layer board of 50 × 50 mm with 17 parts on 12 nets, routed with 53 tracks and 17 vias.

It is built around the TL072 and MMBF4118. Its parts include 10 resistors, 4 capacitors, 1 IC, 1 transistor and 1 inductor. It belongs with the computers and single-board computers boards of this library.

Main components

2

README

README.md

Chua-memcapacitor — 5D Chaos Monitor

Real-time acquisition and visualisation of a 5-dimensional chaotic attractor using a Seeed Studio XIAO RP2350 and two ADS1262 32-bit ADCs, streaming to Linux at 12 kHz per channel over USB CDC.


System Overview

text
Chua Circuit (±8 V)
  │
  ▼
Signal Conditioning Board  (×5 channels)
  │  R_IN 1kΩ → ±9V clamp → TL072-A input buffer
  │  → ÷4 attenuator (30k/10k) → TL072-B divider buffer
  │  → Sallen-Key 2nd-order Butterworth LPF @ 4.95 kHz
  │  → ±2.5V clamp → ADS_CHn
  ▼
XIAO RP2350
  │  Core 1: tight-poll SPI sampling (ADS1262 × 2)
  │  Core 0: USB CDC packetiser (14-byte frames, XOR checksum)
  ▼
Linux Host  /dev/ttyACM0
  │  capture.py  — packet parser, drop/error stats
  │  buffer.py   — lock-free circular numpy buffers
  │  plotter.py  — real-time 3D attractor + 2D projections
  ▼
matplotlib FuncAnimation @ 30 Hz

Hardware

PartRole
Seeed XIAO RP2350Dual-core Cortex-M33 MCU, USB FS CDC
ADS1262 × 232-bit delta-sigma ADC, 38,400 SPS max
TL072 × 8Signal conditioning op-amps (SOIC-8)
BAT54 Schottky × 20Input (±9V) and output (±2.5V) clamps
R 0402, C 0402 C0GDivider and Sallen-Key filter passives

Channel mapping:

ChannelChua variableADC
CH0xADS1262-0 AIN0
CH1yADS1262-0 AIN1
CH2zADS1262-0 AIN2
CH3wADS1262-1 AIN0
CH4vADS1262-1 AIN1

SPI0 pin assignments (RP2350):

SignalGPIO
SCKGP6
MOSIGP7
MISOGP4
ADC0 CS / DRDY / RSTGP5 / GP0 / GP1
ADC1 CS / DRDY / RSTGP3 / GP2 / GP28

Signal Conditioning (Rev 2)

Each of the 5 channels uses a 3-op-amp topology:

text
Chua ──[R_IN 1kΩ]──[±9V clamp]──[TL072-A]──[÷4]──[TL072-B]──[SK LPF]──[TL072-C]──[±2.5V clamp]──► ADS1262
  • TL072-A — unity-gain input buffer; isolates Chua source impedance
  • ÷4 attenuator — 30kΩ/10kΩ voltage divider; maps ±8V Chua → ±2V
  • TL072-B — unity-gain divider buffer; eliminates 7.5kΩ Thevenin source loading that would shift the filter cutoff from 4.95 kHz to 3.74 kHz
  • Sallen-Key LPF — 2nd-order Butterworth, fn = 4.95 kHz, Q = 0.731; R1=R2=10kΩ, C_FB=2.2nF C0G, C_SH=4.7nF C0G
  • TL072-C — SK active element / output buffer
  • ±2.5V clamp — BAT54 Schottky protecting ADS1262 AVDD/AVSS rails

IC count: 15 TL072 units → 8 SOIC-8 packages (U1–U8, U8B spare).


Firmware

Built with the Pico SDK and TinyUSB.

text
firmware/
├── CMakeLists.txt
└── src/
    ├── ads1262.h / .c      ADS1262 SPI driver
    ├── ring_buffer.h       Lock-free SPSC ring buffer (4096 samples, ARM DMB)
    ├── sampler.h / .c      Core 1 entry — tight-poll sampling loop
    ├── main.c              Core 0 — USB CDC packetiser
    ├── tusb_config.h       TinyUSB configuration
    └── usb_descriptors.c   CDC descriptor

ADS1262 configuration:

  • Data rate: 38,400 SPS, filter: SINC1 (mandatory for single-cycle mux settling)
  • PGA bypassed; internal 2.5V reference

USB packet format (14 bytes):

text
[0xAD][0xC0][ch][seq_lo][seq_hi][ts0][ts1][ts2][ts3][val0][val1][val2][val3][XOR]
  sync         chan  seq (LE16)    timestamp µs (LE32)  value (LE32)   checksum

Build:

bash
mkdir firmware/build && cd firmware/build
cmake .. -DPICO_BOARD=seeed_xiao_rp2350
make -j$(nproc)
# flash: hold BOOT, connect USB, copy .uf2 to RPI-RP2 drive

Host Software

text
host/
├── capture.py    PacketParser — serial reader thread, sync/checksum/drop detection
├── buffer.py     ChannelBuffer — circular numpy arrays; SampleStore for 5 channels
├── plotter.py    FuncAnimation plots: 3D attractor, xy/xz projections, time series
└── main.py       Entry point — fanout thread, optional CSV logging

Install dependencies:

bash
pip install -r host/requirements.txt

Run:

bash
python3 host/main.py /dev/ttyACM0
# options:
#   --fps 30        animation frame rate
#   --trail 10000   number of points in attractor trail
#   --save FILE     log raw samples to CSV

The plotter opens a live window showing:

  • Left: 3D x/y/z attractor trajectory
  • Top centre: x–y phase portrait
  • Top right: x–z phase portrait
  • Bottom centre: w–v projection
  • Bottom right: per-channel time series + sample rate / error stats

SPICE Simulation

text
spice/
├── signal_cond.spice    ngspice netlist (BAT54 + TL072 behavioral models)
├── plot_response.py     scipy Bode / step / pole-zero plots
└── run_ngspice.sh       run simulation + plot (falls back to scipy-only if no ngspice)
bash
cd spice
./run_ngspice.sh

Produces ac_bode.dat, tran_1k.dat, tran_8k.dat, tran_step.dat and a Bode plot PNG.


KiCad Schematic

text
kicad/
├── gen_schematic.py              Python generator — run to rebuild .kicad_sch
├── signal_conditioning.kicad_sch KiCad 7 schematic (A2, 5 channels)
├── signal_conditioning.kicad_pro KiCad project file
└── bom.csv                       Bill of materials

To regenerate the schematic after editing the generator:

bash
python3 kicad/gen_schematic.py

Open signal_conditioning.kicad_sch directly in KiCad 7.


Throughput Budget

ParameterValue
Channels5
Effective SPS per channel~12,800 (CH0–2) / ~19,200 (CH3–4)
Packet size14 bytes
Raw USB data rate~840 kB/s
USB FS CDC practical limit~1 MB/s

License

MIT

Parts

17
QtyValueFootprintReferences
218kResistor_SMD:R_0402_1005MetricR3, R6
222kResistor_SMD:R_0402_1005MetricR2, R5
23.3kResistor_SMD:R_0402_1005MetricR1, R4
11.8kResistor_SMD:R_0402_1005MetricR7
1100nFCapacitor_SMD:C_0402_1005MetricC3
1100nF X7RCapacitor_SMD:C_0402_1005MetricC2
110nF X7RCapacitor_SMD:C_0402_1005MetricC1
112RResistor_SMD:R_0402_1005MetricR8
118mHInductor_SMD:L_Bourns_SRR1260L1
11MResistor_SMD:R_0402_1005MetricR9
147kResistor_SMD:R_0402_1005MetricR10
147pF C0GCapacitor_SMD:C_0402_1005MetricC4
1MMBF4118Package_TO_SOT_SMD:SOT-23Q1
1TL072Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU1

Similar boards

  • 2 layers148 × 84.5 mmPanel daisy, the printed circuit board in 3D

    Panel daisy

    ohmtech-rdi/eurorack-blocks

    Software to Hardware Prototyping for Eurorack using C++, Max/Gen~ or Faust

    259 parts410
  • 2 layers39.6 × 99.1 mmESP32-Eurorack Audio, the printed circuit board in 3D

    ESP32-Eurorack Audio

    ctag-fh-kiel/ctag-tbd

    CTAG TBD >>to be determined<< an extendible open source Eurorack sound module

    128 parts260
  • 4 layers121.9 × 109.2 mmPlinkyblack hwmidi jacks, the printed circuit board in 3D

    Plinkyblack hwmidi jacks

    plinkysynth/plinky_public

    a public release of the plinky sw and hw

    300 parts227
  • 2 layers58 × 110 mmVco core, the printed circuit board in 3D

    Vco core

    shmoergh/moduleur

    Fully analog DIY-friendly modular synth

    146 parts222
  • 2 layers37 × 113.9 mmVCO, the printed circuit board in 3D

    VCO

    nickajeglin/Eurorack-pcbs

    A collection of easy to solder DIY eurorack PCB's

    104 parts208
  • 2 layers111.3 × 106.4 mmSuper Sixteen v1, the printed circuit board in 3D

    Super Sixteen v1

    matthewcieplak/super-sixteen

    Code and schematics for the Super Sixteen Eurorack sequencer

    141 parts171
  • 2 layers85.1 × 62.2 mmMic extension board, the printed circuit board in 3D

    Mic extension board

    StoneRose35/cortexguitarfx

    guitar effects processor implemented on various arm cortex platforms

    75 parts146

Questions

How big is the Chua x7r PCB?

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

What parts does the Chua x7r use?

17 parts, built around the TL072 and MMBF4118. 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 Chua x7r KiCad files?

From the heurstc/Chua-memcapacitor repository on GitHub, at the commit this page was made from: the board is kicad/chua_x7r.kicad_pcb and its schematic kicad/chua_x7r.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Chua x7r design in my own project?

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