Skip to the content
PCBKitNew board
2 layers55.5 × 96.5 mmJDPDIYDECK, the printed circuit board in 3D

STM32 audio effect processor with custom PCB

Size
55.5 × 96.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
417
Nets
17
Pads
453
Tracks, vias
80, 2
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
25 Apr 2026
Updated
16 May 2026

Overview

JDPDIYDECK is an open-source printed circuit board by vaikunth-e, from the vaikunth-e/DIYDECK repository on GitHub. It is a 2-layer board of 55.5 × 96.5 mm with 417 parts on 17 nets, routed with 80 tracks and 2 vias.

It is built around the TLV2372IP. Its parts include 6 capacitors, 4 resistors, 3 ICs and 3 connectors. It belongs with the audio and music boards of this library.

Main components

1

README

README.md

DIYDECK: STM32 Audio Effects Processor with Custom PCB

DIYDECK is a custom audio-processing board/system that takes an external audio signal, conditions it for an STM32 ADC, applies real-time embedded DSP effects, and outputs the processed signal through the STM32 DAC into the audio board/amplifier path.

Demo

Features

  • STM32 Nucleo-F303RE firmware using PlatformIO
  • Real-time ADC-to-DAC audio passthrough
  • Timer-driven sampling using TIM3
  • Freeverb-style reverb
  • Ring modulation
  • Rotary encoder control for PWM-selected filter settings
  • Mute switch and button-controlled effects
  • Custom KiCad PCB files included

System overview

Input audio is AC-coupled and biased around mid-supply so the STM32 ADC can sample the waveform safely. The firmware removes the measured DC bias, applies optional effects, recenters the signal around the DAC midpoint, and outputs it through DAC channel 1.

Signal chain:

Laptop / audio source
→ AC coupling and biasing
→ STM32 ADC input
→ real-time DSP
→ STM32 DAC output
→ PCB audio path / amplifier / speaker

Hardware

  • STM32 Nucleo-F303RE
  • ADC input: A0 / PA0 / ADC1_IN1
  • DAC output: A2 / PA4 / DAC_OUT1
  • Rotary encoder for filter selection
  • Effect buttons for reverb and ring modulation
  • Mute switch
  • Custom PCB designed in KiCad

Firmware architecture

  • src/main.cpp: ADC/DAC setup, audio ISR, effect toggles, timer setup
  • src/encoder_control.cpp: rotary encoder decoding and PWM setting selection
  • lib/my_reverb: Freeverb-style reverb implementation
  • lib/my_ringmod: ring modulation effect

Audio processing

Each sample is read from the ADC, denoised slightly by masking noisy LSBs, centered by subtracting a moving DC estimate, optionally processed through reverb and/or ring modulation, clipped to the DAC range, and written to the DAC.

Filter / PWM control

The rotary encoder selects one of 16 predefined cutoff settings. Each setting maps a target cutoff frequency to two PWM duty cycles used by the external board.

Debugging and validation

During bring-up, I debugged DC offset, clipping, low output volume, scratchiness, sample-rate instability, and ADC/DAC scaling. I used serial diagnostics and lab equipment including an oscilloscope, multimeter, function generator, and bench power supply to validate the signal path.

Known limitations

  • Audio quality depends heavily on input biasing and gain staging
  • Some sample rates produced more noise or unstable effect behavior
  • Reverb quality is constrained by STM32 memory and real-time processing budget

Build and upload

bash
pio run
pio run --target upload
pio device monitor

Parts

417
QtyValueFootprintReferences
2180Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR3, R4
24.7nFFA28X7R1H472KNU00:CAPRB500W50L400T250H550C2, C3
2470kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R2
247uFRDEC71E476MWK1H03B:CAP_RDEC71E476MWK1H03BC1, C4
2NSL-32OptoDevice:Luna_NSL-32U1, U2
1100nFCapacitor_THT:C_Rect_L4.0mm_W2.5mm_P2.50mmC7
1100uFCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC6
110kPotentiometer_THT:Potentiometer_Bourns_PTV09A-1_Single_VerticalRV1
1Conn_01x02Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_VerticalJ3
1Conn_01x05Connector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_VerticalJ2
1Conn_01x05Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ1
1TLV2372TLV2372IP:P8U3

The 17 most common of 417 parts.

Questions

How big is the JDPDIYDECK PCB?

It measures 55.5 × 96.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the JDPDIYDECK use?

417 parts, built around the TLV2372IP. 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 JDPDIYDECK KiCad files?

From the vaikunth-e/DIYDECK repository on GitHub, at the commit this page was made from: the board is JDPDIYDECK_KICAD/JDPDIYDECK.kicad_pcb and its schematic JDPDIYDECK_KICAD/JDPDIYDECK.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the JDPDIYDECK design in my own project?

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

Similar boards

  • 2 layers101.6 × 53.3 mmBatteryAnalyzer MkII, the printed circuit board in 3D

    BatteryAnalyzer MkII

    Moragor/BatteryAnalyzer_MkII

    Updated Version of the battery analyzer, now with constant current

    25 parts12MIT
  • 2 layers105.5 × 86 mmECE302 Lab8, the printed circuit board in 3D

    ECE302 Lab8

    alexcjang/20V-5V-Buck-Converter

    41 parts
  • 2 layers52 × 48 mmSTM32-Based Programmable Waveform Generator, the printed circuit board in 3D

    STM32-Based Programmable Waveform Generator

    devjamescollier/STM-32_Based_Waveform_Generator

    USB-powered programmable function generator built around an STM32C031K6T6 microcontroller and MCP4901 DAC. Generates clean sine, triangle, and square waveforms with amplitude control via potentiometer, mode selection…

    48 partsCERN-OHL-P-2.0
  • 2 layers30 × 30 mmSteering Sensor (1), the printed circuit board in 3D

    Steering Sensor (1)

    dnz1666/impedance-buffer-pcb

    Analog circuit design (impedance buffer + LP filter) – KiCad schematic & PCB layout for a student EV project at RWTH Aachen

    14 parts
  • 4 layers160 × 70 mmAfternoonBlend, the printed circuit board in 3D

    AfternoonBlend

    dumaiss/PercolatorLabs

    Repo for all the Coffee Series pBITz multimedia cards

    81 parts
  • 2 layers53.3 × 99.8 mmAdapater a, the printed circuit board in 3D

    Adapater a

    jensboe/Modellbahn

    columns 1 block:selfmade block:base columns 1 nucleo adapter["adapter board A"] end space expansion1["expansion board A 1"] space expansionn["expansion board A n"] space expansionb["expansion board B"] adapter…

    58 parts
  • 4 layers70 × 30 mmHarm meas using os, the printed circuit board in 3D

    Harm meas using os

    jkbkwcn/harm_meas_using_os

    An electronic circuit project designed to measure mains current harmonics with amplitudes below one Least Significant Bit (LSB) of an Analog-to-Digital Converter.

    67 parts
  • 2 layers130 × 44.4 mmTurbine, the printed circuit board in 3D

    Turbine

    JohnRipple/turbine-sensor

    After taking a look at the kit it was lacking content. It could be built in about 10 minutes. With a 45 minute time slot for each class there was a lot of time to fill, so I decided to make a more interesting turbine…

    10 parts