NucleoSynth - Audio Synthesizer based on STM32 Nucleo-F446
This is a DIY construction manual for a digital 10 voices polyphonic Audio Synthesizer
based on STM32 Nucleo-F446, which is plugged onto a specific low-tech PCB described here.
The instrument is controlled completely digitally. Internal digital data are transformed to an analog output signal using the internal DAC of the STM32F446 processor and finally amplified to headphone impedance with an audio amplifier IC.
For comfortable handling, a local operator panel with LCD display, 4 pushbuttons, 1 encoder, 2LEDs and flexible wire connection with the base board is added.
To play the instrument and for external configuration, communication is possible via USB and USART.
MIDI and RS-232 modes are selectable with a dual DIP switch.
To save space and supply current, the standard version uses the Nucleo with cut-off ST-Link part and 8MHz crystal oscillator added. A modified firmware for an unmodified Nucleo module to fit on the standard hardware is provided. For a first test or as "embedded instrument" without operator panel, a minimal hard- and firmware design for an unmodified Nucleo is available.
NucleoSynth built into aluminium box and the complete hardware pulled out of the box
A design intention was to keep the additional hardware technology as low as possible. For most people, making a PCB is the biggest barrier. For this reason a completely 2.54mm Veroboard compatible design is proposed here. It can be wired manually or manufactured as a one layer PCB too. Smallest PCB wire width is 0.8mm, smallest distance between wires etc. is 0.4mm, optimized for most simple PCB production technologies.
Most essential features of the NucleoSynth:
- Two oscillators, each is configured independently with a variety of waveforms, detune, transposition and modulation. In addition to additive mixture of both waveforms, Oscillator1 can be frequency modulated by Oscillator2 in a basic way.
- Both oscillators work 10 voices polyphonic, can be switched to monophonic.
- A white noise generator and a soft clip distortion stage is implemented.
- Three Lfo's with a simple scheme to use them together with different features.
- Digital delay up to 300ms at the output stage with Chorus, Feedback and simple Comb Filter effect.
- Five digital IIR filters with adjustable filter type, mid/edge frequency, bandwidth/resonance and peak. The first three filters (one of them for noise sound shaping) are arranged in parallel, followed by the other ones in serial cascade.
- Two routing schemes: The "easy" one preconfigures filters for home-stereo like bass, treble and presence control. The alternative "flex" allows free configuration of all filters.
- Many features have an individually configurable ADSR.
- A simple Drum Set is included with Kick Drum, High Tom, Snare, RimShoot, Clap, HiHat, Cymbal and Cowbell. It uses its own MIDI channel.
- The proposed Operator Panel is a minimal mechanical skills construction. It is connected flexibly with wires crimped on 2.54mm connectors. This way the design can be easily modified and improved for different cases and user's taste.
- A 2 lines x 16 digits LCD display, 1 rotary encoder (with pushbutton), 4 pushbuttons and 2 LEDs at the Operator Panel. Though it is a minimal operator interface, the bushbuttons and the encoder provide an efficient scheme to select different themes for parameter change and to change the items of the selected theme.
- The instrument can be played via USB and conventional (USART) MIDI interface. Configuration is possible (in addition to the Operator Panel) via COM port with ASCII text commands and by MIDI interface (Program Change and Control Change messages).
- USB and legacy MIDI IN are merged correctly and can be played simultaneously (e.g. keyboard against PC based sequencer)
- Up to 60 user configurable sound sets are stored in SRAM memory to be stored permanently in /reloaded from microcontroller flash. Furthermore, sound sets can be dumped/uploaded externally as SysEx formatted files.
- Up to 4 user defined waveforms can be uploaded as SysEx formatted files. Primarily stored in SRAM memory, they can be stored permanently in /reloaded from microcontroller flash.
- Powered by USB 5Volt, optionally a Li-Ion accu with charger can be added. Supply current ca. 130mA (unmodified Nucleo) or ca.75mA (ST-LINK cut off from STM32F446 kernel)
At the version with unmodified Nucleo board and minimal additional hardware, the keyboard is connected via legacy MIDI IN. Configuration is made with ASCII text via the virtual USB COM port provided by the ST-LINK part of the Nucleo board --- or less comfortable with MIDI Control Change and Program Change messages. Down- and upload of dumps and user waves is made via virtual ST-LINK COM port. Apart from these limitations, the features of the synthesizer engine are the same as the standard version.
A detailled Operation Manual is provided here (PDF file),
and >a detailled hardware DIY Construction Manual is provided here (PDF file).
Downloads:
The subsequently downloadable material is copyrighted (c)2019-23 by Wolfgang Schemmert.
Assembly and use of the device is permitted for free by everybody for any purpose ("freeware").
All information is based on best knowledge, but "as is" and without any warranty. Any responsibility is excluded.
Veroboard compatible PCB layout for the "base board"
(1:1 TIF format, BOTTOM layer as well as component placement view "from component side"(as needed for PCB production)
Veroboard compatible PCB layout proposal for the "operator panel"
(1:1 TIF format, BOTTOM layer as well as component placement view "from component side" (as needed for PCB production)
Firmware "nucleosynth39-cutoff.hex" for the NucleoSynth with operator panel. ST-LINK part cut off from the Nucleo module
(Version 3.9, 11 January 2023) -- MIDI commands for parameter configuration reorganized, minor bugfixes
Firmware "nucleosynth39-orig.hex" for the NucleoSynth with operator panel. Nucleo module unmodified.
(Version 3.9, 11 January 2023)
USART1 works as legacy MIDI IN. USART2 is activated for additional communication and configuration via the ST-LINK USB (virtual COM port). USB communication with STM32F446 onboard peripheral. Else same additional hardware and synthesizer engine with same features as tbe "cutoff" version.
Firmware "nucleosynth39-minhw.hex" for minimal additional hardware
(Version 3.9, 11 January 2023)
Minimal hardware add-on for unmodified Nucleo. The STM32F446 onboard USB is not used. Instead USART2 is activated for communication and configuration via the ST-LINK USB (virtual COM port). USART1 works as legacy MIDI IN. Else synthesizer engine with same features as tbe "cutoff" version.
Source code "nucleosynth39.zip"
(status 11 January 2023) This source code is provided as complete "EmBitz 1.11" project (ZIP file, 4.383 kB). Can been compiled and has been coarsely tested with Embitz 2.41.
Parts published by EmBitz are under license of EmBitz, parts published by STM are under license of STM, parts programmed by me are provided under GNU GPL3 license.)
My own help file:
"waves14bit.zip" archive contains source code for a Windows console app to design and calculate user waveforms based on simple mathematical models. Furthermore a set of example userwaves (MIDI SysEx conformant .syx files) is included, generated with this software.
(status 12 July 2019) It generates the corresponding SysEx (.syx) files for direct upload to NucleoSynth. Furthermore, C-Code compatible source code snips of waveform data are generated. Developed with good old Dev-C++ 9.9.9.2, other compilers may require changes.
* State of information January 2023.
* Right of technical modifications reserved. Provided 'as is' - without any warranty. Any responsibility is excluded.
* This description is for information only. No product specification or useability is assured in juridical sense.
* Trademarks and product names cited in this text are property of their respective owners.