Polynorth - a hybrid analog/digital polyphonic synthesizer

img

Summary

The Polynorth is my first attempt at designing a polyphonic synthesizer. It's got a completely analog filter section, combined with a powerful 200 MHz 32-bit microcontroller.

Introduction

I've always wanted to build an analog polyphonic synthesizer, but they often end up being very large and complex because the size of the electronics pretty much scales linearly with the number of voices.

In many ways I think the filters are the hardest part of a digital synthesizer to get to "sound analog", so I figured out a good compromise would be to keep the filters analog and do all the rest with a microcontroller. The mostly digital architecture also has some important benefits:
  • Flexible internal signal routing like a modular synth, but without a ton of patch leads
  • More advanced modulation options (FM)
  • Patch store/recall (including the routing)
  • Much smaller size
I stumbled upon the SSI2144 filter, which is a modern remake of the classic SSM2044. It's very similar in many ways, but in a much more compact package and with better dynamic range, so a 6 voice synth could be made pretty compact. This is what kicked off the project.

Let's start with a demo:

Hardware

The system architecture is explained in this block schematic:

img

A single DC input with a wide voltage span (8-20 V) is sufficient to generate all voltages used internally. +/- 6 V is generated with high effeciency, and LDOs takes the final drop to +/- 5 V with very low noise. This is used to power the filters and OP-amps. 3.3 V is used to power all digital electronics.

A single microcontroller does pretty much everything except filtering. Each filter module is fed with a separate DAC channel, before the filters are finally mixed to one output. An auxillary unfiltered output is provided for future use.

The first prototype is shown below:

img img

Prototype hardware:
  • PCB: Cheapo 2-layer 100*100 mm
  • Microcontroller: PIC32MZ2048EFG, 200 MHz, 512 kB RAM, 2 MB flash, floating point unit
  • Audio DAC: 3 x PCM1753 24-bit delta sigma DAC (6 audio channels feeding the filters)
  • Control DAC: 2 x DAC60508 (to control the analog filters)
  • Filters: Separate PCB modules based on the SSI2144 4-pole low pass filter
  • Display: 256*64 pixel 16 level grayscale OLED
  • Optoisolated MIDI interface
  • 3.3 V buck converter
  • 6 V buck converter
  • -6 V generated by LC7660 switched capacitor inverter, clocked at 50 KHz from the MCU (to make it inaudible)
  • Low noise 5 V and -5 V LDO
Second revision hardware is nearly finished and improves on some important points:
  • PCB: 4-layer with improved signal integrity
  • Lower noise regulator section
  • Single 8 channel DAC with TDM interface and differential outputs
  • Better filtering of audio DAC before being passed into the filters

Firmware

The firmware for this project will most likely not be open source. This is what is implemented as of now:
  • Voice allocation (which oscillators and filter to use when a note is pressed)
  • Waveform generation (three oscillators per voice, 18 total)
  • Digital signal mixing
  • ADSR envelopes
  • LFOs
  • Mapping of envelope and LFO to any possible destination
  • MIDI handling
  • Display routines
  • Preset storage
  • All communication peripheral drivers (5 x SPI, 2 x UART)
All SPI/UART drivers for display, DACs etc. uses DMA and/or interrupts.

A high rate task runs at the audio sample rate (48 KHz):
  • Fixed point aritmetics (despite having an FPU, fixed point is more than twice as fast)
  • Update accumulators for the oscillators
  • Generates the waveforms directly from the accumulator (for saw wave) or by using look-up tables
  • Prepares samples to be loaded to the audio DACs
Mid rate task runs at 1 KHz:
  • All floating point
  • Handles parameter changes
  • Updates envelope and LFO
  • Updates gain and frequency increment for the oscillators
  • Updates the control DACs for cutoff/resonance
Low rate task runs at 20 Hz:
  • Updates UI/display

Next steps

Other than the next prototype PCB I'm also working on a user interface add-on with 16 illuminated buttons for a step sequencer, potmeters, a shaft encoder, and some basic buttons. I also got this nice block of mahogny (?) probably dating back to the 80's which will be milled into an enclosure, with an aluminium front- and rear panel.

img img img

Comments



Design: Jon Petter Skagmo