Skip to the content
PCBKitNew board
4 layers50 × 65 mmMulti Ferro DAQ, the printed circuit board in 3D

Measurement Setup to analyze multiple ferroelectric sensors simultaneously

Size
50 × 65 mm
Copper layers
4
Thickness
1.56 mm
Parts
149
Nets
127
Pads
555
Tracks, vias
1,107, 277
Pours
14
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
7 Oct 2024
Updated
5 Nov 2026

Overview

Multi Ferro DAQ is an open-source printed circuit board by TUDA-MUST, from the TUDA-MUST/Multi-Ferro-DAQ repository on GitHub. It is a 4-layer board of 50 × 65 mm with 149 parts on 127 nets, routed with 1,107 tracks and 277 vias.

It is built around the ESP32-S3-MINI-1-N8, ADS131E08IPAGR and LM2775QDSGRQ1, with the AD8608ARUZ-REEL, ICM-42670-P and TP4056 among its other parts. Its parts include 21 resistors, 16 capacitors, 10 ICs, 7 connectors and 6 diodes. It belongs with the sensors and measurement boards and the ESP32 boards of this library.

Main components

12

README

README.md

Multi-Ferro-DAQ

Wearable 8-channel charge amplifier and data acquisition system for piezo- and ferroelectric sensors.

The system reads up to 8 charge sources simultaneously via two RJ45 connectors (4 sensors per connector). The PCB is designed for mobile use: it can be strapped to a test person, runs on battery power, and streams data in millivolts (mV) via Wi-Fi at up to 2000 samples per second.


📋 Specifications

ParameterValue
Channels8, simultaneously sampled
ADCTI ADS131E08, 24 bit ΔΣ, programmable gain G = 1, 2, 4, 8, 12
Charge amplifierAD8608 (quad CMOS op-amp), one per channel
Feedback networkC_F = 680 pF (C0G, ±5 %) ∥ R_F = 1 GΩ (±10 %)
Sensitivity1 / C_F ≈ 1.47 mV/pC
Time constant / lower cut-offτ = R_F · C_F = 0.68 s → f_c = 1 / (2π τ) ≈ 0.23 Hz
Output range (vs. V_bias)±2.5 V at G = 1, ±4 V / G for G ≥ 2
Charge range±1.70 nC at G = 1 (fault flag above ±2.375 V ≈ ±1.62 nC)
Sample rate1–2 kSa/s recommended (ADC supports up to 64 kSa/s, but samples are lost above 2 kSa/s)
MicrocontrollerESP32-S3-MINI-1-N8
Data interfaceWi-Fi 2.4 GHz access point, TCP port 8080
Power1S Li-ion/LiPo (protected cell, JST-PH) or USB-C; on-board charger ≈ 336 mA
On-board supplies5 V analog (LM2775 charge pump), 3.3 V digital (TPS7A91 LDO), V_bias = 2.5 V
Extras6-axis IMU (ICM-42670-P), 2 RGB status LEDs, board-level RF shield over the analog front end
PCB4 layers, 50 mm × 65 mm

⚙️ How it works

mermaid
flowchart LR
    S["Sensors<br/>2 × RJ45, 4 each"] --> CA["8 × charge amplifier<br/>AD8608<br/>C_F = 680 pF ∥ R_F = 1 GΩ"]
    VB["V_bias = 2.5 V<br/>TLV9051 buffer"] --> CA
    VB --> ADC
    CA --> ADC["ADS131E08<br/>8 ch, 24 bit, simultaneous"]
    ADC -- "SPI + DRDY" --> MCU["ESP32-S3"]
    MCU -- "Wi-Fi, TCP :8080" --> PC["Client<br/>MATLAB / MMM"]
    IMU["IMU ICM-42670-P"] -.-> MCU

Analog front end. The board runs from a single 5 V analog supply. To process bipolar charge signals, all analog circuitry is referenced to a mid-supply voltage V_bias = 2.5 V. V_bias is generated by the ADS131E08's internal op-amp and buffered by a TLV9051. Each channel is an inverting charge amplifier: the non-inverting input is tied to V_bias, the inverting input is the summing node the sensor connects to, and C_F ∥ R_F form the feedback. R_F provides the DC path that keeps the output from drifting, and sets the lower cut-off frequency.

Digitization. The ADS131E08 samples all eight amplifier outputs simultaneously and measures each one differentially against V_bias, so the result is the amplifier's output voltage relative to mid-supply. The analog front end and the ADC sit under a board-level RF shield.

Firmware. The ESP32-S3 uses both cores. An interrupt on the ADC's DRDY signal reads each sample into a queue. A second task converts the raw values to mV, removes the selected PGA gain, and sends packets of 64 samples to the client over TCP.

Power. The board runs from a 1S Li-ion/LiPo cell or USB-C. A TP4056 charges the cell from USB. An LM2775 charge pump supplies the 5 V analog rail, and a TPS7A91 low-noise LDO supplies the 3.3 V digital rail.


🧮 Converting the output to charge

The firmware streams each channel as the amplifier output voltage U (in mV, relative to V_bias, with the PGA gain already removed). For signal frequencies well above the cut-off f_c ≈ 0.23 Hz, the charge Q delivered by the sensor into the amplifier input is

$$Q = -C_F \cdot U$$

With C_F = 680 pF:

$$Q,[\mathrm{pC}] = -0.68 \cdot U,[\mathrm{mV}]$$

Example: U = 100 mV → Q = −68 pC. The amplifier is inverting, so the sign of the output is opposite to the sign of the charge flowing into the input.

The feedback resistor makes the amplifier a high-pass. A charge step decays as e^(−t/τ) with τ = 0.68 s: after 0.68 s only 37 % of the step remains, and after 3.4 s (5τ) less than 1 %. For slow or quasi-static signals, correct for this with the transfer function

$$H(f) = -\frac{1}{C_F} \cdot \frac{j 2\pi f \tau}{1 + j 2\pi f \tau}$$


🔌 Sensor connection (RJ45 pinout)

Each RJ45 port carries four sensors. Each sensor uses one wire pair: one pin goes to the amplifier input (signal), the other to V_bias. Pin numbers follow the jack; wire colors follow the T-568B standard.

PairSignal pinV_bias pinSignal wire / V_bias wire (T-568B)Port IPort II
A54white-blue / blueIN4IN8
B21orange / white-orangeIN3IN7
C63green / white-greenIN2IN6
D87brown / white-brownIN1IN5

INx corresponds to CHANx in the data stream.

Important: the V_bias pins sit at 2.5 V above board ground. Never connect them to GND or to the cable shield. Shorting V_bias to ground loads the reference and drives the channels into saturation. Use the RJ45 shield for the cable screen. It connects to the board's shield net.

The pinout is also printed on the PCB silkscreen.


🛠️ Building the hardware

  1. Order the PCB with assembly (e.g. JLCPCB) using the files in PCB/jlcpcb/production_files: Gerber archive, BOM and CPL.
    • 4-layer board, stackup JLC041611-3313, 1 oz inner copper (see PCB/jlcpcb/Added Info.txt).
  2. Order separately (not part of the assembly BOM):
    • Laird BMI-S-204-C RF shield cover.
    • A protected 1S Li-ion/LiPo cell with a JST-PH 2-pin plug. The on-board TP4056 charger has no cell protection.
    • RJ45 cables or adapters for your sensors.
  3. After assembly:
    • Press the shield cover onto the soldered J7 frame.
    • Check the solder jumpers. The factory states are listed in the BOM documentation.
    • Connect the battery and flash the firmware (see below).

The complete bill of materials, with manufacturer part numbers, key specs and datasheet links, is in PCB/BOM (CSV). The design files require KiCad 9. All project-specific symbols, footprints and 3D models are in PCB/components.


⚡ Flashing the firmware

The ESP32-S3 is flashed with the Arduino IDE using Software/ADC_readout/ardu_adc_dual_core_wifi_tcp/ardu_adc_dual_core_wifi_tcp.ino. The sketch includes the driver from Software/ADC_readout/lib/, so keep the folder structure intact.

Required:

  • Arduino-ESP32 core (Espressif), installed via the Boards Manager
  • FastLED library
  • ArduinoJson library (only for the MultiMeasurementMonitor firmware)

Board settings (Tools menu):

SettingValue
BoardAdafruit Feather ESP32-S3 No PSRAM
USB CDC On BootEnabled
CPU Frequency240 MHz (WiFi)
Events Run OnCore 0
Arduino Runs OnCore 0
Flash ModeQIO 80 MHz
Flash Size8 MB (64 Mb)
Partition SchemeTinyUF2 8MB (2MB APP/3.7MB FATFS)
Upload ModeUSB-OTG CDC (TinyUSB)
USB ModeUSB-OTG (TinyUSB)
Arduino IDE board settings

For the first flash, or if the upload fails, put the ESP32 into programming mode: press and hold BOOT, briefly press RESET, then release BOOT. The ESP32 is then detected automatically, or can be selected as an "ESP32 Family Device" under the port selection.

Only enter programming mode after a compile/upload for the board above has started. Otherwise the IDE tries, and fails, to build for an "ESP32 Family Device".

The firmware is tested with the MATLAB script Software/ADC_readout/Matlab/ADC_WiFi_readout_TCP.m using MATLAB R2024b.


🧩 Setup

1. Power On

  • Flip the power switch to ON, or reset the powered-on PCB.
  • During startup, the status LED turns YELLOW, indicating the setup phase.

2. Ready State

  • When the LED turns MAGENTA, the ESP32 is ready to start a measurement.
  • A white flash under the shielding of the charge amplifiers and ADC indicates that the ADC is set up and communicating.

3. Wi-Fi Connection

Connect to the ESP32's Wi-Fi hotspot:

  • SSID: ESP32_Hotspot
  • Password: 123456789

Then connect to IP address 192.168.4.1 on TCP port 8080 (see this MATLAB script for details).

The hotspot credentials are hard-coded in the firmware. Change them in the sketch if the board is used outside the lab.

4. Initialization

The ESP32 expects initialization values in a fixed format and order (36 bytes, little-endian). Garbage bytes can be sent to initialize with the ADC's own default values.

Data TypeCountDescription
int641Maximum number of samples to collect (PCB resets afterwards).
uint321ADC sample rate. Choose from 1000, 2000, 4000, 8000, 16000, 32000, 64000.
Rates above 2000 cause sample loss and are not recommended.
uint168ADC settings registers for CHAN1–CHAN8.
Only the lower byte is used; set the upper byte to zero.
uint88PGA gain for CHAN1–CHAN8 (1, 2, 4, 8 or 12).
These overwrite the gain previously set in the settings registers. The microcontroller removes the gain before transmitting the data.

5. Start Measurement

Once initialized, the status LED turns GREEN. It stays green until:

  • the measurement times out, or
  • it is stopped manually.

🔋 Power Supply

  • The PCB can be powered via USB-C or the battery port.
  • The battery is charged directly by the PCB.

Battery indicator LED:

  • Solid RED: battery is charging.
  • Fast blinking RED (while powered on): no battery detected.

📡 Usage

After setup, the microcontroller sends data via TCP to the client until:

  • the measurement times out, or
  • it is stopped by the client sending any byte via TCP.

Data Output Format

The TCP stream consists of samples of nine little-endian float32 values (36 bytes per sample), sent in packets of 64 samples (2304 bytes):

ChannelDescription
CHAN1–CHAN8Amplifier output in mV relative to V_bias (–2500 mV to +2500 mV). See Converting the output to charge.
CHAN9Timestamp in µs since the last ESP32 reset

Fault Flags:

  • A value of –9999 mV or +9999 mV means the ADC's negative or positive fault flag was triggered. This happens when the measured value exceeds ±2375 mV (≈ 95 % of the input range).

Timestamp resolution: the timestamp is transmitted as float32, so its resolution decreases with time since reset. The step size is 2 µs after 16.8 s, 64 µs after 9 min, and 512 µs after 71.6 min. Reset the board before long measurements if exact sample timing matters.


📡 Usage with MultiMeasurementMonitor

The DAQ can also be used as a client for the MMM (MultiMeasurementMonitor) project with this firmware.

The available settings stay the same, but you get the benefits of the MMM. The ClientName is set via the JSON file when programming, and the Wi-Fi credentials can be changed via the Serial Monitor at startup.

For further details on using clients with the MMM, see the MMM project on GitHub.

Client Tab


🔁 Post-Measurement

  • After a measurement ends, the PCB automatically reinitializes.
  • It is ready again when the status LED turns MAGENTA.
  • The PCB can also be reinitialized manually by pressing RESET.

🧭 Additional Features

  • An IMU (ICM-42670-P) is included on the PCB. It has been tested, but is not used by the current firmware.

📄 License

ContentLicense
Hardware (PCB design and production files)CERN-OHL-W-2.0
Software (firmware, scripts)MIT
Documentation and imagesCC BY 4.0

Copyright (c) 2024–2026 Measurement and Sensor Technology Group (MUST), TU Darmstadt and contributors. See LICENSE for details and THIRD_PARTY_NOTICES.md for third-party components.

📝 Citation

If you use Multi-Ferro-DAQ in your research, please cite it using the metadata in CITATION.cff (GitHub: "Cite this repository").


🙏 Acknowledgements

  • The ADS131E08 driver is based on the ads131e08 STM32 library by Minchul Jun, ported to the ESP32 by Thomas Schreck. See THIRD_PARTY_NOTICES.md for its license.

Developed at the Measurement and Sensor Technology Group (MUST), Technische Universität Darmstadt.

Parts

149
QtyValueFootprintReferences
20TestPointTestPoint:TestPoint_Pad_D1.0mmADC_Daisy1, ADC_TESTN1, ADC_TESTP1, TP_3.3V2, TP_5V1, TP_ADC_*PWDN1, TP_ADC_*RST1, TP_CS1, TP_DRDY1, TP_GND1, TP_GND2, TP_MISO1, TP_MOSI1, TP_OP_N1, TP_OP_OUT1, TP_OP_P1 +4
1610uCapacitor_SMD:C_0603_1608MetricC1, C8, C9, CS2, CS9, CS11, CS16, CS18, CS31, CS34, CS39, CS40, CS41, CS42, CS50, CS52
14100nCapacitor_SMD:C_0603_1608MetricCS1, CS3, CS15, CS17, CS19, CS29, CS32, CS37, CS38, CS43, CS44, CS46, CS51, CS53
111uCapacitor_SMD:C_0603_1608MetricCCH1, CS4, CS5, CS7, CS8, CS10, CS12, CS13, CS14, CS47, CS48
81GResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderRF1, RF2, RF3, RF4, RF5, RF6, RF7, RF8
8680pCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderCF1, CF2, CF3, CF4, CF5, CF6, CF7, CF8
710kResistor_SMD:R_0603_1608MetricR1, R2, R12, R13, R15, R16, R17
40RResistor_SMD:R_0603_1608MetricR28, R29, R30, Rf_Op1
3100RResistor_SMD:R_0603_1608MetricR3, R4, R5
322uCapacitor_SMD:C_0603_1608MetricCS6, CS28, CS30
3LOGOLOGOG***, G***, G***
210nCapacitor_SMD:C_0603_1608MetricCS33, CS49
23.57kResistor_SMD:R_0603_1608MetricR7, R33
25.1kResistor_SMD:R_0603_1608MetricR19, R20
28P8C_ShieldedR-RJ45R08P-B000:R-RJ45R08P-B000J1, J5
2AD8608ARUZ-REELAD8608ARUZ:RU_14_ADIU1, U4
2Conn_01x02_PinConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalGPIO1, GPIO2
2Conn_01x04_SocketConnector_JST:JST_SH_BM04B-SRSS-TB_1x04-1MP_P1.00mm_VerticalJ2, J3
2FerriteBeadInductor_SMD:L_0603_1608MetricFB1, FB2
2LED_RLED_SMD:LED_0603_1608MetricD2, D3
2SK6812MINI-HSSK6812MNI-HS:SK6812MNI-HSD5, D6
2SKRPABE010SKRPABE010:SW_SKRPABE010S2, S3
2SolderJumper_2_BridgedJumper:SolderJumper-2_P1.3mm_Bridged2Bar_RoundedPad1.0x1.5mmJP_SH/GND1, JP_SH/USB1
2SolderJumper_3_Bridged12Jumper:SolderJumper-3_P1.3mm_Bridged2Bar12_RoundedPad1.0x1.5mmJP1, JP4
11.15kResistor_SMD:R_0603_1608MetricR32
11kResistor_SMD:R_0603_1608MetricR6
127RResistor_SMD:R_0603_1608MetricR27
1680nCapacitor_SMD:C_0603_1608MetricCS21
1ADS131E08IPAGRADS131E08IPAGR:QFP50P1200X1200X120-64NIC1
1Choke_Wurth_WE-CNSW_744232090Inductor_SMD:L_CommonMode_Wurth_WE-CNSW-1206L1
1Conn_01x02_PinConnector_PinHeader_1.27mm:PinHeader_1x02_P1.27mm_VerticalUART0
1Conn_01x02_PinConnector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ4
1DMG2305DMG2305UX:DMG2305UXQ1
1D_SchottkyDiode_SMD:D_SOD-323D1
1ESP32-S3-MINI-1-N8ESP32-S3-MINI-1-N8:XCVR_ESP32-S3-MINI-1-N8U2
1ICM-42670-PICM-42670-P:LGA14_2.5X3X0.76_IVSU3
1JP_Pullup_MOSI/SDAJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP3
1JP_Pullup_SCL/SCLKJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP2
1LED_WLED_SMD:LED_0603_1608MetricD4
1LM2775QDSGRQ1LM2775QDSGRQ1:SON50P200X200X80-9NIC7
1MountingHole_PadMountingHole:MountingHole_3.2mm_M3_PadH2
1RFShield_TwoPiecesRF_Shielding:Laird_Technologies_BMI-S-204-F_32.00x32.00mmJ7
1SK-12D02-VG3SK-12D02-VG3:SK12D02VG3S1
1SolderJumper_2_OpenJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP_ADC_RefP1
1TLV9051IDBVRTLV9051IDBVR:SOT95P280X145-5NIC3
1TP4056TP4056:SOP127P600X175-9NIC2
1TPS7A9101DSKRTPS7A9101DSKR:SON50P250X250X80-11N-DIC5
1TYPE-C-31-M-12TYPE-C-31-M-12:HRO_TYPE-C-31-M-12J6
1TestPointTestPoint:TestPoint_THTPad_D1.0mm_Drill0.5mmCS_External1
1WE-TVS-82400102Package_TO_SOT_SMD:SOT-23-6U5

Questions

How big is the Multi Ferro DAQ PCB?

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

What parts does the Multi Ferro DAQ use?

149 parts, built around the ESP32-S3-MINI-1-N8, ADS131E08IPAGR, LM2775QDSGRQ1 and AD8608ARUZ-REEL. 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 Multi Ferro DAQ KiCad files?

From the TUDA-MUST/Multi-Ferro-DAQ repository on GitHub, at the commit this page was made from: the board is PCB/Multi-Ferro-DAQ.kicad_pcb and its schematic PCB/ADC.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Multi Ferro DAQ design in my own project?

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

Similar boards

  • 4 layers78 × 46.3 mmChrisPCB, the printed circuit board in 3D

    ChrisPCB

    TUDA-MUST/ChrisBox

    4 Channel Charge Amplifier PCB

    197 parts6
  • 4 layers68.6 × 53.3 mmEos lpc55s69-board, the printed circuit board in 3D

    Eos lpc55s69-board

    embeddedos-org/eCAD-Hardware-Products

    Hardware designs + EE docs + Board datasheets of Multiple products

    99 parts8MIT
  • 4 layers50 × 50 mmHARPY REV2, the printed circuit board in 3D

    HARPY REV2

    lewipewi/harpy-board

    Hard real-time sequencer and power hub for a Canopy Hunter hopping robot (coming soon!). Drives four servos and one brushed motor, holds attitude across a 512 ms ballistic arc, charges the cell, and logs every hop to…

    85 parts
  • 4 layers55 × 50 mmDisplay adapter, the printed circuit board in 3D

    Display adapter

    daleondev/ProtoMate_Control

    Open ProtoMate.kicadpro in KiCad 10. The complete system schematic and linked perfboard layout share the same project name and component identities.

    55 parts
  • 4 layers46.5 × 38.7 mmCLK BOARD, the printed circuit board in 3D

    CLK BOARD

    MortenSorensenNOR/Long-Distance-Radio

    81 parts
  • 4 layers40 × 69 mmMateRix, the printed circuit board in 3D

    MateRix

    FBIopeningUPP/MateRix

    MateRix a esp32 s3 and ws2812b 2020 40x40 matrix display with joystick and imu and some buttons for fun

    145 parts
  • 4 layers19 × 9.5 mmSmart Watch, the printed circuit board in 3D

    Smart Watch

    centaurids-hub/Smart-Watch-Design

    Baby, I'm back

    53 parts
  • 4 layers23 × 51.5 mmPower meter pcb, the printed circuit board in 3D

    Power meter pcb

    monash-human-power/power-meter

    Power meter designed as part of Oscar Varney and Jotham Gates' FYP in 2024

    64 partsMIT