DCO build – Update 4: the RUNO-4!

After my first attempt to build a polyphonic synth, I realise I’ll have to upgrade my technique to something more reliable. Having always been a big JUNO-60 fan, I thought I would try to build Digitally Controlled Oscillators instead.

Fortunately there some very good sources on the subject:
https://electricdruid.net/roland-juno-dcos/
https://github.com/polykit/dco?tab=readme-ov-file
https://blog.thea.codes/the-design-of-the-juno-dco/#fnref:schmitt

If you ever tried to tune ONE AS3340 oscillator, you’ll understand that the most difficult part is keeping the 4 or 6 VCOs in tune with each other..Hence the need for a centralised digital control spread across all oscillators of the synth.

The basic oscillator block here is an op-amp in integrator mode, so it is strictly analog, and it looks like this:

In this implementation, the frequency is controlled by a digital square clock than can be distributed to several oscillators.
One caveat of this op-amp configuration is that some compensation voltage must be introduced at the inverting input, otherwise the amplitude of the signal decreases as the frequency increases.

So the trick would be to generate a DC voltages that correspond the frequencies on a certain scale.
I will try to use an Arduino Nano and a MCP4822 DAC for the job.

I opened my first GitHub repository to host my attempts to get some working code. So I tried to drive one DCO for the beginning. It’s far from perfect as the Ramp wave is not ideal, but it kinda works. I guess I will have to work on the scale of the ‘compensation voltage’.

So here’s the code and a short video.

https://github.com/cmosorchestra/ARDUINO-DCO

The next step to drive 2 DCOs simultaneously, but I’ll have to build them first!

UPDATE 1:

I build 3 oscillators and have them play a Minor chord:

Now to the 4th DCO and better mixing.

UPDATE 2:

I just built the 4th DCO, so I can play my beloved Minor (add9) chord! The sound is a bit rough when the four oscs are mixed together, but I’m still working on the code and the hardware. Starts to sound cool though. Here is a sound snippet of the 4 Ramp waves going through an Low-Pass AS3320, plus a short vid.

Next step: the PWM waveform, maybe the Sub-oscillator, and then MIDI!

UPDATE 3:

So first, the PWM waveform, which is basically turning the Ramp wave into a Pulse wave with variable Duty cycle. Again it’s an opamp doing the job, this time in Comparator mode. It looks like this:

So because my Ramp wave is about 8Vpp, I want the voltage driving the Pulse modulation to go a little bit above -4V (10% Duty cycle) to a little bit below +4V (90% Duty cycle). I’m using a simple potentiometer in Voltage divider mode.

Here is the result on the oscilloscope for one DCO:

And this how it sounds and look playing a chord with all 4 DCOs, you can clearly hear the changes in harmonic content typical of a PWM wave when I change the Duty cycle:

So now to the MIDI. It was not the most difficult part, I just added a 5-pin DIN female Jack followed by an SFH618A-4 opto-coupler to the RX pin of the Arduino and updated the code to follow the Note-On, Note-off MIDI messages and here it is:
The RUNO-4, 4 DCOs, Ramp and PWN, 4 voices, Polyphonic MIDI synth!

Leave a Reply

Your email address will not be published. Required fields are marked *