Skip to the content
4 layers160 × 170 mmAnalog matrix 4x4 3d, the printed circuit board in 3D

DC-coupled 4x4 programmable analog matrix: signed gains, 1 MHz target, BNC I/O, Pico control, KiCad PCB and enclosure CAD.

Size
160 × 170 mm
Copper layers
4
Thickness
1.6 mm
Parts
434
Nets
296
Pads
1,591
Tracks, vias
7,959, 998
Pours
411
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
1 Oct 2026
Updated
3 Oct 2026

Overview

Analog matrix 4x4 3d is an open-source printed circuit board by tim4431, from the tim4431/analog_programmable_matrix repository on GitHub. It is a 4-layer board of 160 × 170 mm with 434 parts on 296 nets, routed with 7,959 tracks and 998 vias.

It is built around the OPA197ID, ADA4899-1YRDZ and OPA810ID, with the AD5544BRSZ, THS3091DDAR and TMUX6219DGKR among its other parts. Its parts include 200 capacitors, 146 resistors, 71 ICs, 9 connectors and 2 diodes. It belongs with the lEDs and displays boards and the RP2040 boards of this library.

Main components

10

README

README.md

Analog Programmable Matrix

A four-input, four-output, DC-coupled analog matrix for programmable addition, subtraction, and signal mixing. A Raspberry Pi Pico sets sixteen static signed coefficients over USB; the signals remain in the analog domain.

$$b_i = \sum_{j=0}^{3} M_{ij}a_j, \qquad -1 \leq M_{ij} \leq 1$$

This first public version contains PCB D and enclosure M3, without the added power-indicator LED. It is an unbuilt prototype: the 1 MHz bandwidth and approximately 1% gain accuracy are design targets supported by circuit simulations, not measured hardware specifications.

A separate LC1 lower-cost 12-bit design is also included. It preserves the original design and enclosure interface, reduces the listed component count from 428 to 387, and replaces the expensive multiplying DACs. LC1 has its own schematic, PCB, firmware, sourcing notes and simulation evidence. The renders below show the original Revision D.

PCB and enclosure

These are renders generated from the CAD, not photographs of manufactured hardware.

Populated PCB with BNC connectors and regulator heatsinks

PCB in its enclosure

Exploded enclosure render · Dimensioned drawing

Design at a glance

ItemDesign
Matrix4 × 4, independently programmable signed coefficients
Signal rangeDC through 1 MHz target; ±1 V peak per input
InputsFour vertical BNCs; high impedance by default
OutputsFour vertical BNCs; up to ±4 V peak into an external 50 Ω load
Output termination49.9 Ω series source resistor; a high-impedance receiver sees approximately twice the loaded voltage
Coefficient control16-bit multiplying DACs and analog polarity switches
ControllerOriginal Raspberry Pi Pico, MicroPython, USB serial JSON commands
SupplyExternal regulated ±15 V plus USB for the Pico; onboard ±5 V analog regulators
PCB160 × 170 mm, four copper layers, nominal 1.6 mm FR-4
Enclosure180 × 192 × 60 mm; 62.5 mm including feet
CoolingTwo 38.1 mm heatsink envelopes; passive ventilation

How it works

The input amplifiers generate buffered positive and negative versions of each input. Each matrix cell selects a polarity with a TMUX6219 and sets its magnitude with an AD5544 multiplying DAC and ADA4899-1 transimpedance stage. A summing amplifier combines the four contributions for each output, followed by a THS3091 driver and a 49.9 Ω source resistor. A fifth AD5544 supplies four offset-trim controls.

The Pico changes DAC codes and switch states; it does not digitize or synthesize the waveform. Firmware starts with the outputs muted and temporarily mutes them during coefficient changes. Coefficient and offset calibration are performed through USB commands.

Open the design

The Releases page contains ZIP downloads, including the complete populated-board and enclosure STEP assemblies. The two large assembly STEP exports are distributed there rather than duplicated in Git.

Set a matrix

Install the supplied firmware/main.py on the original Pico running MicroPython. Apply the analog supplies before USB power, then send newline-terminated JSON commands over the Pico's USB serial console:

json
{"cmd":"set","matrix":[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]}
{"cmd":"arm"}

Rows select outputs and columns select inputs. For example, [0.5,-0.5,0,0] makes that output half the difference between the first two inputs. Use {"cmd":"mute"} to mute the outputs and {"cmd":"status"} to read the current state.

The initial gain scale is an estimate. Follow the calibration procedure to measure both coefficient signs and each row's offset with the intended 50 Ω loads.

Validation and limits

The supplied checks report zero KiCad schematic errors, PCB design-rule violations, unrouted connections, or schematic/PCB mismatches. Nominal enclosure collision checks pass, and all three printable parts are watertight, single-shell meshes. The BNC access review checks all eight straight-plug positions; the two beside the raised hood need a side grip.

Circuit-level SPICE results show about 0.758% gain reduction at 1 MHz after DC normalization and approximately 119 ns settling to 1% in the nominal row model. Read MODEL_SCOPE.txt: the multiplying-DAC model is approximate, parts of the full-row test are idealized, and the 1 nF load transient remains unresolved. These results do not establish 1% relative accuracy at small coefficients or validate PCB parasitics.

Thermal testing is still required. The analog circuit dissipates roughly 10 W at idle; each ±5 V regulator loses roughly 3 W. The modeled heatsinks are clearance envelopes, not qualified purchased parts. Follow the thermal calculation and first-article acceptance procedure before sustained operation.

Manufacturing

The assembly export contains 406 fitted SMT components, 18 separate through-hole/module items, and four intentionally unpopulated input-termination resistors. Upload these files to JLCPCB:

  1. Gerber_JLCPCB.zip
  2. BOM_JLCPCB.csv
  3. CPL_JLCPCB.csv

Supplier matching is incomplete. Do not treat the six existing LCSC identifiers as reserved assembly inventory. Check every selected part's package and pin-1 orientation, and obtain CAM acceptance for epoxy-filled/copper-capped via-in-pad fabrication, including the 0.20 mm thermal holes. The handoff notes describe the exact stack, drill and placement conventions.

The requested initial build is two assembled boards. No order has been submitted or paid.

Reproduce checks and CAD

Run python tools/verify_release.py to verify the stored design hash, check reports, BOM/CPL references, and simulation netlist evidence. It checks the delivered files; it does not rerun SPICE or physical tests.

For fresh electrical checks, use KiCad's kicad-cli sch erc and kicad-cli pcb drc --schematic-parity on the project. The scripts in the project's tools/ directory compare symbol pins, footprints, and the exported netlist.

Mechanical sources are mechanical/analog_matrix_package_m3/build_package.py (CadQuery 2.8) and render_package.py (Blender 4.3). The included geometry, models, and PCB texture allow the current assembly and renders to be regenerated. The auxiliary export scripts use KiCad's Python environment and Windows installation paths, which may need adjustment on another system.

Final simulation benches and their recorded results are retained under spice/. Manufacturer macromodel downloads are excluded from Git; use python spice/fetch_models.py with TI's model downloads and a local LTspice installation, then python spice/replay.py --bench a2_row_sine_rc.cir. See simulation setup.

Third-party material

KiCad footprint/model licensing and attribution are included beside the libraries. TI and Analog Devices simulation models retain their manufacturers' terms and are not covered by any implied project-wide license. See third-party notices. A project-wide license for the original design has not yet been selected.

Parts

434
QtyValueFootprintReferences
136100nAnalogMatrix:C_0603_1608MetricC1, C10, C11, C101, C103, C105, C106, C107, C108, C110, C111, C112, C113, C115, C116, C117 +120
321.00 kAnalogMatrix:R_0603_1608MetricR15, R16, R17, R18, R24, R25, R26, R27, R33, R34, R35, R100, R112, R116, R120, R124 +16
32150R 0.1%AnalogMatrix:R_0603_1608MetricR37, R38, R41, R42, R45, R46, R49, R50, R109, R110, R113, R114, R117, R118, R121, R122 +16
20100 kAnalogMatrix:R_0603_1608MetricR39, R43, R47, R51, R57, R63, R67, R71, R75, R81, R105, R111, R115, R119, R123, R129 +4
20TMUX6219DGKRAnalogMatrix:VSSOP-8_3x3mm_P0.65mmU40, U41, U42, U43, U44, U45, U46, U47, U48, U49, U50, U51, U52, U53, U54, U55 +4
1810uAnalogMatrix:C_0805_2012MetricC7, C8, C15, C16, C23, C24, C31, C32, C63, C64, C131, C132, C165, C166, C185, C186 +2
162.2pAnalogMatrix:C_0402_1005MetricC41, C46, C51, C56, C75, C80, C85, C90, C109, C114, C119, C124, C143, C148, C153, C158
16ADA4899-1YRDZAnalogMatrix:ADA4899_RD8_EP2.29x2.29U60, U61, U62, U63, U64, U65, U66, U67, U68, U69, U70, U71, U72, U73, U74, U75
16OPA810IDAnalogMatrix:SOIC-8_3.9x4.9mm_P1.27mmU1, U2, U3, U4, U5, U6, U7, U8, U9, U10, U11, U12, U80, U81, U82, U83
121uAnalogMatrix:C_0805_2012MetricC34, C36, C68, C70, C102, C104, C136, C138, C170, C172, C188, C190
910 kAnalogMatrix:R_0603_1608MetricR138, R139, R140, R141, R142, R143, R144, R145, R146
933RAnalogMatrix:R_0603_1608MetricR1, R10, R19, R28, R133, R134, R135, R136, R137
849.9RAnalogMatrix:R_0603_1608MetricR3, R12, R21, R30, R56, R80, R104, R128
8499RAnalogMatrix:R_0603_1608MetricR4, R5, R13, R14, R22, R23, R31, R32
86.8uAnalogMatrix:CP_EIA-3216-18_Kemet-AC65, C66, C99, C100, C133, C134, C167, C168
8BNC 031-5329-52RFXAnalogMatrix:BNC_Amphenol_031-5329-52RFX_VerticalJ1, J2, J3, J4, J5, J6, J7, J8
6MountingHole_3.2mm_M3MountingHole_3.2mm_M3H1, H2, H3, H4, H5, H6
5AD5544BRSZAnalogMatrix:SSOP-28_5.3x10.2mm_P0.65mmU20, U21, U22, U23, U30
41 MAnalogMatrix:R_0603_1608MetricR2, R11, R20, R29
41.21 kAnalogMatrix:R_0603_1608MetricR58, R82, R106, R130
410.0 kAnalogMatrix:R_0603_1608MetricR54, R78, R102, R126
4100p C0GAnalogMatrix:C_0603_1608MetricC175, C178, C181, C184
420.0 kAnalogMatrix:R_0603_1608MetricR55, R79, R103, R127
4402RAnalogMatrix:R_0603_1608MetricR59, R83, R107, R131
449.9RAnalogMatrix:R_2512_6332MetricR60, R84, R108, R132
4523RAnalogMatrix:R_0603_1608MetricR53, R77, R101, R125
4OPA197IDAnalogMatrix:SOIC-8_3.9x4.9mm_P1.27mmU100, U101, U102, U103
4THS3091DDARAnalogMatrix:SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.71x3.4mm_ThermalViasU90, U91, U92, U93
210uAnalogMatrix:C_Radial_D5.0mm_H11.0mm_P2.00mmC195, C199
21N4002AnalogMatrix:D_DO-41_SOD81_P10.16mm_HorizontalD1, D2
247uAnalogMatrix:C_Radial_D5.0mm_H11.0mm_P2.00mmC193, C197
2SN74HC595DAnalogMatrix:SOIC-16_3.9x9.9mm_P1.27mmU121, U122
12.2uAnalogMatrix:CP_EIA-3216-18_Kemet-AC198
13-pin terminalAnalogMatrix:TerminalBlock_Phoenix_MKDS-1,5-3-5.08_1x03_P5.08mm_HorizontalJ9
1330nAnalogMatrix:C_0603_1608MetricC194
1ADR4525BRZAnalogMatrix:SOIC-8_3.9x4.9mm_P1.27mmU110
1L7805CVAnalogMatrix:TO-220-3_VerticalU130
1L7905CVAnalogMatrix:TO-220-3_VerticalU131
1PicoAnalogMatrix:Pico_2x20_Socket_17.78mmU120

More from tim4431/analog_programmable_matrix

1
  • 4 layers160 × 170 mmAnalog matrix lc1, the printed circuit board in 3D

    Analog matrix lc1

    tim4431/analog_programmable_matrix

    DC-coupled 4x4 programmable analog matrix: signed gains, 1 MHz target, BNC I/O, Pico control, KiCad PCB and enclosure CAD.

    393 parts

Similar boards

  • 2 layers32.4 × 16.3 mmSensor, the printed circuit board in 3D

    Sensor

    YiyoChimal/NASA_Space_Apps_2024_Mecha_Cintli

    Leveraging Earth Observation Data for Informed Agricultural Decision-Making

    45 parts1
  • 4 layers129 × 79.5 mmStimjim, the printed circuit board in 3D

    Stimjim

    open-ephys/stimjim

    A precise intra and extracellular electrical stimulator

    236 parts7
  • 4 layers175 × 155 mmCurrent driver, the printed circuit board in 3D

    Current driver

    pratham-cloud-ctrl/Project-SCCI-RH

    A digital spinal cord-computer interface concept: research, eight KiCad boards, nRF5340 firmware and FreeCAD assemblies.

    160 parts
  • 4 layers100 × 100 mmPhmod, the printed circuit board in 3D

    Phmod

    gallicchio/AMOD-and-RFMOD

    The tutorial's 2x12 adapter (/mudd/133electronics/icepi-zero-dac-adc/adapterboard/) with a 2 x 6 right-angle Pmod socket on a 15 mm extension of its right-hand end, so an Icepi Zero can drive AMOD-A's and RF-MOD's Pmod…

    234 parts
  • 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
  • 2 layers75 × 40 mmPulse shaping extension v1.1, the printed circuit board in 3D

    Pulse shaping extension v1.1

    MKesenheimer/fault-injection-library

    Python library to perform fault-injection attacks on microcontrollers

    86 parts218GPL-3.0
  • 2 layers160 × 99.1 mmFM VCO, the printed circuit board in 3D

    FM VCO

    mimeiners/ans

    HSB B.Eng. ET M 6.10 ANS

    104 partsApache-2.0

Questions

How big is the Analog matrix 4x4 3d PCB?

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

What parts does the Analog matrix 4x4 3d use?

434 parts, built around the OPA197ID, ADA4899-1YRDZ, OPA810ID and AD5544BRSZ. 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 Analog matrix 4x4 3d KiCad files?

From the tim4431/analog_programmable_matrix repository on GitHub, at the commit this page was made from: the board is mechanical/analog_matrix_package_m3/analog_matrix_4x4_3d.kicad_pcb and its schematic pcb/analog_matrix_4x4_rev_d/analog_matrix_4x4.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Analog matrix 4x4 3d design in my own project?

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