Skip to the content
2 layers92 × 75.8 mmSTM32CrapSynth, the printed circuit board in 3D

STM32CrapSynth

LTVA1/STM32CrapSynth4

A crappy hardware synth using STM32F303 and 4 AD9833 waveform generators

Size
92 × 75.8 mm
Copper layers
2
Thickness
1.6 mm
Parts
70
Nets
85
Pads
328
Tracks, vias
716, 52
Pours
1
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
24 Sep 2024
Updated
24 May 2025

Overview

STM32CrapSynth is an open-source printed circuit board by LTVA1, from the LTVA1/STM32CrapSynth repository on GitHub, published under the MIT licence. It is a 2-layer board of 92 × 75.8 mm with 70 parts on 85 nets, routed with 716 tracks and 52 vias.

It is built around the PJ-320B. Its parts include 26 capacitors, 16 resistors, 14 ICs and 13 connectors. It belongs with the audio and music boards and the STM32 boards of this library.

Main components

1

README

README.md

STM32CrapSynth

A software/hardware synth based on STM32F303RE, 4xAD9833 wave generators, one MM5437 noise generator and LTC1063 lowpass filter. Currently I seem to have burned the filter so instead there's 3rd PCM channel using the timer that was planned for filter clocking.

Music demo

Here's the demo. I recorded each channel separately for channel oscilloscopes and then recorded them all for master sound which you can hear in the video.

Folders

board - KiCAD project of the board that mounts on top of custom teacher's board like Arduino shield. pc_program - small CLI program using serial library to send data to the MCU. There also lies .fur tracker module of the soundtrack (but remember that emulation is finished and it sounds off at times compared to real hardware) STM32CrapSynthFirmware - MCU firmware written only with CMSIS register defs and simple functions. Zero HAL, LL, SPL libraries usage.

Other programs

STM32CrapSynth in Furnace - A fork of Furnace chiptune tracker with added emulation of STM32CrapSynth. Also has an ability to export data (samples and stream of commands/wavetable data) into the file which is then used by pc_program.

Overview and explanation

The device is capable of synthesizing 8 audio channels. Their signals are added together and the resulting sum is available on standard 3.5 mm audio jack.

There also are six phase reset timers. Two of them are MCU's internal timers and four other are four MCU's internal USARTs/UARTs which were made to generate a periodic interrupt (just like the usual timers). Each timer has 8-bit bitmask dictating which channels it affects. Each time timer fires the correspodning channel's signal phase is reset.

The device consists of three PCBs. I designed only the topmost PCB with STM32CrapSynth logo. Lower two PCBs were designed by my teacher.

Here is the overall image of the whole device.

STM32CrapSynth

STM32CrapSynth explanation

Top PCB

Top PCB Top PCB explanation

Muxes are used to connect either MCU timer's PWM signal or AD9833 signal to the attenuator's input. Four channels are formed, each having the ability to play sound from its own PWM timer or from its own AD9833 waveform generator.

Attenuators allow to control the channel's volume with 0.5dB step.

Noise generator can either be clocked from its own internal oscillator or from external signal (the latter is generated by dedicated MCU timer in PWM generation mode). With external clock and another control signal it's also possible to load LFSR directly from MCU, which allows to reset the noise generation at any time. That's how it is possible to "phase reset" noise channel.

The rightmost attenuator controls signals that come from brown wires. These are soldered to the outputs on MCU board that act as MCU's internal DACs outputs.

Eighth channel emerges from PWM signal that comes directly from MCU pin. Since op-amp isn't designed to handle such high frequencies, the form of the signal from this channel is distorted as you can see in demo video (triangle wave is "smoothed" on one side).

Wires were soldered to an external wires-to-audio-jack adapter because, when designing a PCB, I used wrong audio jack footprint.

External Flash memory holds a dump of commands. These commands control frequency, volume and other settings of each audio channel. They also specify the rate of their execution. Each time the timer fires (240 times a second in demo video) command execution happens until a special command is encountered. The special command stops any further execution until the timer fires next time.

Middle PCB

Middle PCB Middle PCB explanation

On the other side on top PCB there are capacitors for power noise elimination and two more AD9833 boards.

On middle PCB you can see the main MCU that performs all the work and USB-UART bridge. The data transfer rate is 2MBaud. Also the places where DAC signal wires are soldered are visible.

Bottom PCB

Bottom PCB

Nothing special here, just a small PCB with custom STLink debugger design. A connector between bottom and middle PCB is visible on top. The USB connector provides power to STLink.

Also this board has 3.3V power regulator that supplies main MCU and external Flash memory.

Parts

70
QtyValueFootprintReferences
190.22uF_0603_25V4ms_Capacitor:C_0603C1, C2, C3, C10, C11, C12, C15, C16, C17, C19, C20, C22, C23, C24, C25, C26 +3
83.0k_0603_0.1%4ms_Resistor:R_0603R3, R4, R5, R7, R9, R11, R13, R16
722uF_0603_16V4ms_Capacitor:C_0805C4, C8, C9, C13, C14, C18, C21
41k_0603_0.1%4ms_Resistor:R_0603R10, R12, R14, R15
4Conn_01x01myLibrary:M3J2, J3, J4, J5
4~Package_SO:SOIC-16W_7.5x10.3mm_P1.27mmU8, U9, U10, U12
4~project:AD9833U1, U2, U3, U4
3100k_06034ms_Resistor:R_0603R1, R2, R6
3Screw_Terminal_01x024ms_Connector:Socket_1x02_2.54mm_THJ6, J7, J8
2Conn_01x25_SocketConnector_PinSocket_2.54mm:PinSocket_1x25_P2.54mm_VerticalJ3, J4
2~4ms_Package_DIP:DIP-8pin_THU7, U14
2~TestPoint:TestPoint_Keystone_5019_MinatureJ1, J2
2~Package_SO:VSSOP-10_3x3mm_P0.5mmU5, U6
12.2k_06034ms_Resistor:R_0603R8
1LOGOproject:logo_big_negativeG***
1PJ-320Bproject:BOOMELE_PJ-320BJ5
1~Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU13
1~project:W25Q128_boardU11
1~project:UART_portJ9

Similar boards

  • 2 layers132.5 × 84.8 mmShieldXL M, the printed circuit board in 3D

    ShieldXL M

    okyeron/shieldXL

    A rework/remix of the monome norns shield

    91 parts179GPL-3.0
  • 4 layers96 × 78 mmMinidisc, the printed circuit board in 3D

    Minidisc

    befinitiv/minidisc_cad

    This repository contains the CAD files (PCB & mechanics) for the 8cm "minidisc" player project.

    145 parts12
  • 2 layers65 × 56 mmPiGarage, the printed circuit board in 3D

    PiGarage

    bryce-builds/PiGarage

    Open-source Raspberry Pi power management and audio HAT for automotive head-unit use

    79 parts9
  • 4 layers88 × 58 mmECG V-0.2, the printed circuit board in 3D

    ECG V-0.2

    Doenec/ecg-esp32

    open source project ecg with esp32 and ad8232

    115 parts8
  • 2 layers46.7 × 40.9 mmCASIO VX4 YM2413 Soundcard v1.1, the printed circuit board in 3D

    CASIO VX4 YM2413 Soundcard v1.1

    hwreverse/PokeConSound

    Soundcard Designs for Pocket Computers (ポケコン) (Sharp, Casio, TRS80-M100,...)

    22 parts7MIT
  • 2 layers45.7 × 20.3 mmTt audio pmod, the printed circuit board in 3D

    Tt audio pmod

    MichaelBell/tt-audio-pmod

    Tiny Tapeout Audio Pmod

    18 parts6Apache-2.0
  • 2 layers56 × 20 mmCartridge pmod, the printed circuit board in 3D

    Cartridge pmod

    joaln27/cartridge_pmod

    QSPI flash + PSRAM + audio cartridge Pmod for TinyTapeout — a drop-in remix of the stock QSPI Pmod with sigma-delta audio (RC filter + amp + jack) on the CS2 pin. KiCad, JLC-assemblable

    25 parts2Apache-2.0

Questions

How big is the STM32CrapSynth PCB?

It measures 92 × 75.8 mm and has 2 copper layers, 1.6 mm thick.

What parts does the STM32CrapSynth use?

70 parts, built around the PJ-320B. 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 STM32CrapSynth KiCad files?

From the LTVA1/STM32CrapSynth repository on GitHub, at the commit this page was made from: the board is board/board.kicad_pcb and its schematic board/_board.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the STM32CrapSynth design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).