Lab LogoFletch's Fab Academy 2014 Blog

16. Final Project - A Digital, Modular Synthesizer


16.01 Concept.

I originally planned a different final project, but I've changed my mind about it so many times during the semester whilst searching for something that I feel has merit that changing once more won't hurt.  Neils comment about the Moog synth last week caught my imagination and so my final project concept is now as follows:
Re-create a modular Moog synth loosely based on the capabilities of the Minimoog where all signals are processed digitally and each module contains a single ATTiny to perform the digital signal processing.
I'm not musical, don't play any instrument and before this project have never investigated how a Moog synth works in anything more than a cursory way, so this should be 'interesting'!

For old project concepts see here and here.

16.02 Design Brief.

Create a series of separate 'modules' which can be connected together in different orders to configure the signal path of the synth.  There should be an input device so that the synth can be 'played'.  There should be an output device that can be connected to standard audio equipment so that the user can here the sounds produced.  There should be no need to compromise on audio quality.  The device should be fun and easy to connect up in different sequences, allowing the user to take pleasure in exploring the sounds produced.  The device should be visually appealing, maybe even beautiful!
All signals between modules should be digital, including any control and gate voltages.  The final project is only required to be mono as opposed to stereo and isn't required to be polyphonic.

16.03 Final Evaluation.

Once complete I'll ask Hayden the Manchester Fab Lab Manager to 'test' my synth.  Hayden plays keyboards professionally, if he can make my project sound even vaguely musical then I've succeeded!

16.04 Other Work in the Same Field.

I've not done an exhaustive search.  Obviously there are the commercial digital synthesizers from companies like Roland and Korg, but most of the open source synths I could find are all analog based or where they're digital they're monolithic designs not modular.  Some interesting links:
Shawn Wallace Fluxamasynth - http://www.fluxly.com/blog/2010/11/fluxamasynth.html
Cool hexagon touch pad chord generator input device - http://cucfablab.org/image/hyveworkshopflyer10png
Bhoreal, Midi input device - http://www.fablabbcn.org/2013/04/fab-lab-bcn-recommends-bhoreal-midi-controller-in-goteo/
Little Bits synth kit, it's analog but similar to my modular concept - http://littlebits.cc/kits/synth-kit
Fabbermuino, digital but based on a single arduino - http://jackletjacklet.blogspot.co.uk/2011/08/fabbermuino.html
Bob Moog talks about analog vs. digital sound synthesis - http://www.moogmusic.com/legacy/conversation-bob-moog-analog-vs-digital-sound-generation

16.05 Design.

As a starting point for the functionality and signal path of this design I've referred a lot to the original Minimoog documentation from www.fantasyjackpalance.com.  However visually I intend to make it completely different.

16.05.1 The Modules Concept.

Rather than patch leads I'd like physical modules that you connect to make the signal path by either stacking or connecting at the edges.  The intention is that almost all of the modules will actually be the same design, they will have different software loaded onto them and may have different components (such as control knobs or connectors) actually populated on the PCB. 
Looking at the signal paths in more detail (see below) 5 control pots should be the max required by any module, these would be used to generate analog control or to select between module functions.  Switches would be replaced by the concept of adding / removing modules from the signal path.

Module conceptModules

Each module is intended to be approx 70mm to 100mm square, in a colourful molded plastic case, with connectors on the edges and control knobs on the top.  It would be good if the case molding was a two stage process, the first as a hard plastic, the second then soft silicon over molded in some areas to allow hard plastic to show through forming control decals and logos.  This would also give a nice 2 colour and soft textured finish.

Two stage mold detail

I'd like to implement one standard 'bus' connetor on all modules so that any module can be connected to any other in any order.  All communications between modules will be digital.  This connector would carry the following signals:
I propose to use a 8 pin SIL header at the edge of each module to provide this bus.  Male connectors will be signals into the module, female connectors will be signals out.  The connector should be designed so that ISP pins are available to ease re-flashing.

Connector detail

Connector Concepts - Part 2

I've had difficulty sourcing SIL connectors in the time frame for the final project, so Initially I plan to use IDC headers and cables.  Moving on I plan to make my own connectors from layers of 3mm ply and vinyl cut tracks.
Connector idea 1Connector idea 2

16.05.2 Audio Data Protocol.

It would be nice to use an existing standard to transport the audio data between the modules.  This would allow the modules to directly drive off the shelf external audio equipment such as HiFi Amps etc.
Initially I thought of S/PDif or AES3, but both are overly complicated for this simple task.  Next, although it's not widely supported as an external audio interface on devices I considered using a slightly modified IIS for the inter module comms.  The modification is simply to remove the 'word clock' line as we'll only be dealing with mono audio.
Initial intention is that audio data will be sent as 16bit mono at 44.1KHz sample rate, but this gives us a roughly 0.7MHz bit rate from each data stream which would leave no time for DSP activity if all serial handling is performed in software. So for this reason I've decided that to keep audio quality by using high data rates I'm going to need to use the SPI serial hardware in the AVR.  Obviously this only gives me one input and one output per module.  For modules requiring more input channels such as mixers, the options are to implement extra serial interfaces in software or move up to the ATMega range which has a second SPI interface.

See 16.05.7 below for some limitations that may be encountered.  The data clock will be generated centrally by the power module.

16.05.3 Control Voltage and Gate Data Protocol.

Initial concept is to send the data in a similar way to above but sent at 8bit and 1/8th of the SPI clock, allowing bits to be read in software from these lines on each SPI word complete.  CV and Gate would each be sent on a separate serial line.  However this would require more AVR pins and more CPU clock cycles to implement as it would have to be a software serial interface.
Second concept is to send one serial data stream containing both CV and Gate.  12 bit CV, 1 bit gate, 3 bits spare in a two byte frame at 1/8th the bit rate of the SPI clock.  The 1/8th bit rate allows us to sample the software serial line in the SPI byte rx irq routine, saving irq function prolog / epilog time.

16.05.4 The Signal Path in a Real Minimoog.

Diagram of a simplified basic signal path in an original Minimoog.  This has been used to decide on module requirements etc. for my synth.

Minimoog signal path

16.05.5 My Signal Path Concept.

The intention is that the signal path in my project will be 'created' as required by the user connecting modules in different orders.  Some modules would have inputs on multiple edges.  Whilst it is envisaged that the modules would connect directly to one and other, it may also be required to use bus extender cables between modules that can't physically be next to each other. 
Each module will support up to 5 control knobs.  All will be 10K variable resistors, however some will be used as function selectors rather than analog controls.  Switches in the original Minimoog will be replaced by the ability to add / remove modules.

Module with extender cable

16.05.6 The Module Functions.

A List of the possible modules.
Those required to be able to demonstrate basic functionality:
Those that would be good to have for a basic fun synth:

Extended modules for even more fun:

16.05.7 ATTiny Limitations.

Likely problems due to limitations in the ATTiny will be:
If these problems occur then the sample size and sample rate will be reduced until either a workable system is produced or the sound quality is so poor as to be unusable.

16.06 Project Plan.

Project time line below shows a snapshot of my plan as of Wednesday 21st May, OpenProj file here is continually updated during the project.  I'll keep this project file in Mercurial and updated during the course of the project.  It's just doable for final presentation day on 4th June.  Any errors will involve working evenings and weekends.  I've split the project into separate phases, at the end of each phase there will be a demonstrable system, slowly growing more complete as the phases progress.  By the end of the 1st phase all of the processes I will use will have been demonstrated bar laser cutting and vinyl cutting.  These will be added in the second phase.

Project plan

16.06.1 Phase 1.

This phase is the basic set of work that I must complete to have a project that passes Fab Academy.  It's designed to cover all of the skills required and just make a basic sound from a pair of modules. 
Get a basic oscillator module and output module built so that I can network them together and generate sound.  Will also need to use one of the oscillator modules as a power and clock module.  These should be in a nice cast plastic case and should have nice 3D printed knobs on the controls.

16.06.2 Phase 2.

This phase would be nice to get done before the project presentations as it will add an input device and make the synth a playable instrument. 
Add an input device such as a keyboard.

16.06.3 Phase 3.

This phase will add some basic modules that will make the sounds from the synth more interesting.
Add filters and shapers.  These modules are only software changes from the basic generic oscillator module.

16.06.4 Phase 4.

This phase will add a mixer allowing the synth to make much more complex sounds.

16.06.5 Other Phases.

Add many more input devices...
Make a dedicated power and clock module...

16.07 Machines and Processes.

I'll be using the following machines and processes:

16.08 Materials and Costs.

I plan to use as much from the inventory as possible.  I will need to order: