
Vbench pod
embeddedci-com/benchpod
An open hardware bench tool that plugs into your CI: sensor sim, CAN, analog I/O, power control, and a Python SDK with pytest integration

An open hardware bench tool that plugs into your CI: sensor sim, CAN, analog I/O, power control, and a Python SDK with pytest integration
Vbench pod is an open-source printed circuit board by embeddedci-com, from the embeddedci-com/benchpod repository on GitHub, published under the CERN-OHL-W-2.0 licence. It is a 4-layer board of 98.5 × 120.2 mm with 247 parts on 138 nets, routed with 1,474 tracks and 757 vias.
It is built around the MCP33131D-10-E/MS, THS4551IRUNR and TPS65131RGER, with the AP2112K-3.3, 24C32 and ADR4540BRZ-R7 among its other parts. Its parts include 125 capacitors, 60 resistors, 20 ICs, 13 diodes and 5 connectors.
NOTE1: Some tagged versions will have obvious mistakes in them, but as those got built, they're in the repo for historical reasons.
NOTE2: Don't build these boards yourself without any necessary changes. The current tagged versions are not production-ready yet.
An open hardware bench tool with sensor sim, CAN, analog I/O, and power control, with a Python SDK and pytest integration.
Embedded teams often end up with a bench full of equipment that's hard to share, hard to automate, and difficult to use remotely. Setting up tests often means being physically present, and that doesn't scale well across a team.
BenchPod is an attempt to make that easier. One board with sensor simulation over I2C and SPI, CAN bus, analog input and output, programmable power control, a logic analyzer, and an FPGA for fast protocol mocking, connected over WiFi so it can be shared across a team or accessed remotely. A Python SDK and pytest integration make it straightforward to go from manual bench work to automated tests without changing your setup.
This repo contains the KiCad source files for the board, plus the SPICE simulations used while designing the analog front ends.
pcb/
benchpod/ # KiCad project for the analog + digital board
vbench-pod.kicad_pro # KiCad project file
vbench-pod.kicad_pcb # PCB layout
vbench-pod.kicad_sch # Top-level schematic
analog-power-v2.kicad_sch # Analog supply rails
analog-switching.kicad_sch # Analog signal routing / muxing
analog-to-digital-v2.kicad_sch # ADC front end
digital-to-analog-v2.kicad_sch # DAC output stage
LogicAnalyzer.kicad_sch # Logic analyzer
power.kicad_sch # Power control
ethernet.kicad_sch # Ethernet
usb.kicad_sch # USB
fp-lib-table # Footprint library references
sym-lib-table # Symbol library references
benchpod-digital/ # KiCad project for the digital-only board (same sheet layout)
libs/ # Shared symbol, footprint, and 3D-model libraries
spice/ # LTspice / ngspice simulations for the analog front ends
adc-v1/ adc-v2/ dac-v2/Library paths in fp-lib-table, sym-lib-table, and the PCB are stored relative to
the project (${KIPRJMOD}/..), so the project opens in KiCad straight after cloning.
The board name is printed on the silkscreen (for example "BenchPod v3-r1"). Find it in the table below to get the git tag with the exact design files for your board:
| Silkscreen | Board | Tag | KiCad project | What changed |
|---|---|---|---|---|
| BenchPod v3 | Analog + digital | analog-v3 | pcb/benchpod | First v3 board. STM32H563ZIT6, INA238 current monitors. |
| BenchPod v3-Digital | Digital only | digital-v3 | pcb/benchpod-digital | First digital-only board: the v3 without the analog section. STM32H563ZGT6 (1 MB flash), INA226 current monitors. |
| BenchPod v3-r1 | Analog + digital | analog-v3r1 | pcb/benchpod | STM32H563ZGT6 and INA226 like the digital board. Monitors the pod's own current (INA226 at 0x41). The 5.5 V analog rail comes from a 7 V boost instead of the 14 V rail, so U50 no longer runs hot. TPS65131 compensation caps fixed. THS4551 and TPS7A2050 in their smaller packages (RUN, DQN). |
| BenchPod v3r2-Digital | Digital only | digital-v3r2 | pcb/benchpod-digital | Monitors the pod's own current (INA226 at 0x41). |
| BenchPod v3-r2 | Analog + digital | analog-v3r2 | pcb/benchpod | One DAC8554 quad DAC (a channel per output) replaces the DAC8551 and its two TMUX1104 muxes. The ±14 V supply starts off and the firmware switches it on. 0.1 % resistors around the ADC driver for a smaller zero offset between pods. Fixed 9.1 pF ADC compensation instead of the trimmer. SWD and USART2 on DNP 2x2 headers instead of H1-H3. More ESD clamps (USB CC, +1V8, LA_VCCIO, the 0-5 V SMA). Board revision strap 2.70 V. |
| BenchPod v3r3-Digital | Digital only | digital-v3r3 | pcb/benchpod-digital | 24-pin FFC connector (CN1) for the analog module. The module 5 V and the USB-A bridge 5 V are switched by SY6280AAC power switches, with TVS diodes on the 5 V outputs. 3.3 V buck becomes a TPS62130A with a 2.2 uH inductor. PSRAM in SOP-8. Ethernet EMI changes from the Microchip and TI reference designs: RJ45 chassis ground straight to GND, center taps fed through a 0 ohm resistor, 8.2 pF on the four data lines, a flow-through TPD4E05U06 ESD clamp. 100 nF + 470 pF at the J4, J5 and J6 terminals. Connectors placed for the enclosure. |
| BenchPod v3-r3-analog | Analog module | analog-v3r3 | pcb/benchpod-analog | First analog module: the analog section on its own board, connected to the v3r3 digital board by a 24-pin FFC (CN1). Front-panel connectors for the enclosure: a lead-free BNC for the ADC input (ready for 10x probes), pluggable terminal blocks for the DAC outputs (one 6-pin block) and the 4-20 mA loop. Module ID EEPROM. +3V3 from an AP2112K-3.3. |
To get the files for your board, check out its tag:
git checkout analog-v3r1Every tag holds all KiCad projects; use the folder from the table. Older boards: v1.0.0 and
v1.0.1 are v1, v2.0.0 is v2.
The v3 tags used to be named v3.0.0 (now analog-v3), v3.0.1-digital (now digital-v3),
v3.0.1-analog (now analog-v3r1) and v3.0.2-digital (now digital-v3r2).
One firmware runs on all v3 boards. The pod's own current needs firmware newer than 3.5.1. The v3-r2 board needs firmware newer than 3.9.4: older firmware runs it as a v3-r1 and its DAC outputs and ±12 V stay off.
Hardware (schematics, PCB layout) is released under CERN OHL-W v2.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 49 | 100n | Capacitor_SMD:C_0402_1005Metric | C109, C114, C128, C129, C132, C135, C138, C141, C143, C144, C146, C148, C152, C156, C159, C162 +33 |
| 40 | 1u | Capacitor_SMD:C_0402_1005Metric | C107, C110, C126, C127, C130, C133, C134, C136, C137, C145, C147, C149, C151, C155, C158, C161 +24 |
| 10 | 10u | Capacitor_SMD:C_0603_1608Metric | C61, C77, C106, C170, C175, C178, C210, C246, C262, C263 |
| 8 | FerriteBead | lcsc_footprints:C85833_L0603 | FB4, FB5, FB6, FB7, FB8, FB9, FB10, FB11 |
| 7 | 22u | Capacitor_SMD:C_0805_2012Metric | C154, C157, C181, C186, C196, C197, C250 |
| 5 | 4.7k | Resistor_SMD:R_0402_1005Metric | R170, R171, R172, R173, R185 |
| 5 | G6K-2F-Y DC5 | lcsc:RELAY-TH_G6K-2F-Y | K1, K2, K3, K4, K5 |
| 4 | 10k-0.1pct | Resistor_SMD:R_0402_1005Metric | R109, R110, R111, R123 |
| 4 | 11.8k | Resistor_SMD:R_0402_1005Metric | R127, R129, R132, R133 |
| 4 | 2k | Resistor_SMD:R_0402_1005Metric | R126, R128, R130, R131 |
| 4 | 33 | Resistor_SMD:R_0402_1005Metric | R99, R100, R101, R106 |
| 4 | LBAT54SLT1G | lcsc:SOT-23_L2.9-W1.3-P1.90-LS2.4-BR | D13, D14, D17, D18 |
| 4 | MountingHole | MountingHole:MountingHole_2.7mm_M2.5_Pad_Via | H10, H11, H12, H14 |
| 3 | 10k | Resistor_SMD:R_0402_1005Metric | R114, R120, R161 |
| 3 | 10n | Capacitor_SMD:C_0402_1005Metric | C191, C195, C243 |
| 3 | 49.9 | Resistor_SMD:R_0402_1005Metric | R125, R134, R135 |
| 3 | SMF13CA | lcsc:SOD-123FL_L3.0-W1.8-LS3.7-BI | D19, D20, D21 |
| 3 | SS34 | lcsc:SMA_L4.3-W2.6-LS5.2-RD | D9, D15, D16 |
| 2 | 0 | Resistor_SMD:R_0402_1005Metric | R168, R169 |
| 2 | 0 | Resistor_SMD:R_0603_1608Metric | R183, R184 |
| 2 | 1.5k | Resistor_SMD:R_0402_1005Metric | R94, R102 |
| 2 | 100k | Resistor_SMD:R_0402_1005Metric | R105, R136 |
| 2 | 10p | Capacitor_SMD:C_0402_1005Metric | C185, C190 |
| 2 | 1M | Resistor_SMD:R_0603_1608Metric | R115, R118 |
| 2 | 1k | Resistor_SMD:R_0402_1005Metric | R92, R93 |
| 2 | 22 | Resistor_SMD:R_0402_1005Metric | R97, R98 |
| 2 | 270p | Capacitor_SMD:C_0402_1005Metric | C74, C139 |
| 2 | 3.3u | lcsc:IND-SMD_L2.0-W1.6_AOTA-B201610S3R3-101-T | L2, L3 |
| 2 | 4.7u | Capacitor_SMD:C_0805_2012Metric | C150, C153 |
| 2 | 47p | Capacitor_SMD:C_0402_1005Metric | C269, C270 |
| 2 | 5.1p | Capacitor_SMD:C_0603_1608Metric | C207, C208 |
| 2 | 5k | Resistor_SMD:R_0402_1005Metric | R95, R96 |
| 2 | 95k | Resistor_SMD:R_0402_1005Metric | R116, R180 |
| 2 | AP2112K-3.3 | lcsc:SOT-25-5_L2.9-W1.6-P0.95-LS2.8-BL | U30, U46 |
| 2 | DB2ERC-3.81-2P-BK | lcsc_footprints:C5259145_CONN-TH_2P-P3.81_DB2ERC-3.81-2P-BK | J8, J9 |
| 2 | OPA2992IDR | lcsc:SOIC-8_L4.9-W3.9-P1.27-LS6.0-BL | U45, U51 |
| 2 | SMAJ36CA | lcsc:SMA_L4.3-W2.6-LS5.0-BI | D6, D10 |
| 1 | 1.5n | Capacitor_SMD:C_0402_1005Metric | C131 |
| 1 | 10 | Resistor_SMD:R_0402_1005Metric | R103 |
| 1 | 100 | Resistor_SMD:R_0402_1005Metric | R113 |
| 1 | 102k | Resistor_SMD:R_0603_1608Metric | R162 |
| 1 | 10uH ±20% | lcsc_footprints:C38117_IND-SMD_L4_0-W4_0 | L1 |
| 1 | 12.1k | Resistor_SMD:R_0402_1005Metric | R181 |
| 1 | 2.2k | Resistor_SMD:R_0402_1005Metric | R122 |
| 1 | 2.4k | Resistor_SMD:R_0603_1608Metric | R108 |
| 1 | 220n | Capacitor_SMD:C_0603_1608Metric | C189 |
| 1 | 240k | Resistor_SMD:R_0402_1005Metric | R104 |
| 1 | 249 | Resistor_SMD:R_1206_3216Metric | R81 |
| 1 | 24C32 | lcsc_footprints:C18723546_SOP-8_L4.9-W3.9-P1.27-LS6.0-BL | U61 |
| 1 | 25.5k | Resistor_SMD:R_0603_1608Metric | R82 |
| 1 | 34.8k | Resistor_SMD:R_0402_1005Metric | R121 |
| 1 | 4.7n | Capacitor_SMD:C_0402_1005Metric | C184 |
| 1 | 4.99k | Resistor_SMD:R_0603_1608Metric | R159 |
| 1 | 47p | Capacitor_SMD:C_0603_1608Metric | C271 |
| 1 | 51p | Capacitor_SMD:C_0402_1005Metric | C72 |
| 1 | 82.5k | Resistor_SMD:R_0603_1608Metric | R91 |
| 1 | 82k | Resistor_SMD:R_0603_1608Metric | R119 |
| 1 | 9.1p | Capacitor_SMD:C_0603_1608Metric | C140 |
| 1 | 910k | Resistor_SMD:R_0603_1608Metric | R182 |
| 1 | 910k | Resistor_SMD:R_1206_3216Metric | R90 |
| 1 | ADR4540BRZ-R7 | lcsc:SOIC-8_L4.9-W3.9-P1.27-LS6.0-BL | U38 |
| 1 | AP2112K-1.8TRG1 | lcsc:SOT-25_L3.0-W1.6-P0.95-LS2.8-BL | U39 |
| 1 | BAV199 | lcsc_footprints:C145516_SOT-23_L2.9-W1.3-P1.90-LS2.4-BR | D22 |
| 1 | BCP56 | lcsc:SOT-223-4_L6.5-W3.5-P2.30-LS7.0-BR | Q1 |
| 1 | BNC-KYWE-295-W4-N | lcsc_footprints:C41416668_BNC-TH_BNC-KYWE-295-W4-N | J10 |
| 1 | DAC8554IPWR | lcsc_footprints:C527522_TSSOP-16_L5_0-W4_4-P0_65-LS6_4-BL | U43 |
| 1 | DB2ERC-3.81-6P-BK | lcsc_footprints:C5244107_HDR-TH_DB2ERC-3.81-6P-BK | J11 |
| 1 | KH-FPC1.0-H2.0SMT-24P-QCHF | lcsc_footprints:C5123103_FPC-SMD_24P-P1.00_KH-FPC1.0-H2.0SMT-24P-QCHF | CN1 |
| 1 | LM27761DSGR | lcsc:WSON-8_L2.0-W2.0-P0.65-BL-EP | U41 |
| 1 | LM7705MMX/NOPB | lcsc:MSOP-8_L3.0-W3.0-P0.65-LS5.0-BL | U42 |
| 1 | MCP33131D-10-E/MS | lcsc:MSOP-10_L3.0-W3.0-P0.50-LS5.0-BL | U36 |
| 1 | OPA2365AIDR | lcsc:SOIC-8_L4.9-W3.9-P1.27-LS6.0-BL | U44 |
| 1 | OPA810IDBVR | lcsc:SOT-23-5_L2.9-W1.6-P0.95-LS2.8-TL | U40 |
| 1 | TCA9554PWR | lcsc:TSSOP-16_L5.0-W4.4-P0.65-LS6.4-TL | U58 |
| 1 | THS4551IRUNR | lcsc_footprints:C2060364_QFN-10_L2_0-W2_0-P0_50-BL | U37 |
| 1 | TLV61046ADBVR | lcsc_footprints:C464815_SOT-23-6_L2_9-W1_6-P0_95-LS2_8-BL | U16 |
| 1 | TMCP1A106MTRF | lcsc_footprints:C1969735_CAP-SMD_L2_0-W1_3-FD | U17 |
| 1 | TPL7407LAPWR | lcsc:TSSOP-16_L5.0-W4.4-P0.65-LS6.4-BL | U53 |
| 1 | TPS65131RGER | lcsc:VQFN-24_L4.0-W4.0-P0.50-BL-EP2.5 | U49 |
| 1 | TPS7A1901DRBR | lcsc:TDFN-8_L3.0-W3.0-P0.65-BL-EP | U50 |
The 244 most common of 247 parts.

embeddedci-com/benchpod
An open hardware bench tool that plugs into your CI: sensor sim, CAN, analog I/O, power control, and a Python SDK with pytest integration

embeddedci-com/benchpod
An open hardware bench tool that plugs into your CI: sensor sim, CAN, analog I/O, power control, and a Python SDK with pytest integration


karlp/kcell-faker
fake a load cell, for testing functional behaviour with changing loads.




gallicchio/motor-pid
The motor-position feedback loop of Learning the Art of Electronics (Hayes & Horowitz), Lab 10L, as a 170 x 120 mm printed circuit board whose silkscreen is the schematic.

gallicchio/op-amp-pcb
The op-amp of Learning the Art of Electronics (Hayes and Horowitz, 2016), Lab 5L, built from six 2N3904 / 2N3906 transistors on a 100 x 100 mm board whose silkscreen is the schematic.

pms67/BananaSchplit
Single rail DC (<12V) to split rail DC supply (+/-12V and +5V).
It measures 98.5 × 120.2 mm and has 4 copper layers, 1.61 mm thick.
247 parts, built around the MCP33131D-10-E/MS, THS4551IRUNR, TPS65131RGER and AP2112K-3.3. 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.
From the embeddedci-com/benchpod repository on GitHub, at the commit this page was made from: the board is pcb/benchpod-analog/vbench-pod.kicad_pcb and its schematic pcb/benchpod-analog/LogicAnalyzer.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the CERN-OHL-W-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).