This page is a brief look at the technology of the Roland Juno series digitally controlled oscillators. The specific scheme presented here was introduced in the Juno 106 in 1984, but the same basic DCO design turned up in many Roland instruments through the 1980s (including the JX-3P, JX-8P, JX-10 and the MKS modules based on these) up until the D-50 in 1987.
The Roland DCO is an interesting hybrid design. Although digitally controlled and digitally stable, the oscillator produces a true analogue output, even for ramp waves, rather than the typical staircase waveform produced by feeding an incrementing count to a DAC or from a wavetable.
Here we will look at how this is done.
- General Scheme
- Master Clock
- Frequency accuracy and smoothness
- Pros and Cons
There are six voices in the Juno series synths. Each voice has a single DCO. All of the oscillators derive their pitch from one high frequency master clock.
For each voice, there is a programmable counter that counts pulses from the master clock. The output of the counter produces a square wave for each timed interval. Thus the microprocessor is able to produce any of the required pitches by programming the counter with the required number. This is essentially a divide-by-x scheme.
The second part of the DCO is a waveshaper. This takes the raw square wave output from the counter and produces a ramp wave, a sub-octave square wave and a PWM output. Of these, generating the ramp wave is the hardest part.
The master clock runs at 8MHz and is followed by a programmable divider that divides its output by 2, 4 or 8 corresponding to the setting (4, 8, 16) of the Range switch on the front panel. The use of the divider ensures that the master clock output has a perfect 50% duty cycle.
The counters are Intel 8253 16-bit programmable interval timers. A more recent version of the chip is the triple counter 82C54 (also made by NEC as the uPD71054) which can be bought for around £2.50. The chip operates in Mode 3, its square wave output mode. This was originally intended for baud-rate generation, but here is used for audio. Each counter divides the master clock by a number set by the divide data from the microprocessor. The divide data is the sum of a key number and the outputs from the LFO, Bender, Portamento and Tune. It falls to the microprocessor to perform this sum.
The waveshapers are built on custom ICs which in the later Junos contain all the parts for two entire circuits. This means the waveshapers for six voices can be done with only three chips! The following diagram shows half of one waveshaper chip and its associated circuitry:
This is a very simple flip-flop divider. The output level is controlled by the collector supply voltage (SUB-LEVEL) on transistor TR19.
The sawtooth waveform is generated by charging a capacitor linearly in an op-amp integrator configuration. A rising edge on the square waveform discharges the capacitor and resets the sawtooth.
The problem with this arrangement is that as the frequency of the square wave increases, the capcitor will have less time to charge, so the output amplitude of the sawtooth will decrease. The CPU provides a control voltage (DCO CV) which is designed to compensate for this effect by increasing the voltage that the capacitor charges from, thereby increasing its rate of charging. Thus the DCO CV keeps the sawtooth amplitude nearly constant (approx 12Vp-p) over the whole frequency range. In order to do this, the DCO CV has to include LFO, BENDER, PORTAMENTO and TUNE data as well as key value. Note that it does not contain RANGE data; instead the RANGE data is used to switch resistor values using a 4052 analogue switch. This also alters the rate at which the capacitor charges.
The PWM output is generated in the standard way by feeding the Ramp output and a PWM LFO control voltage to a comparator. This allows the duty cycle to vary from 50% at +6V PWM CV to 95% at +0.6V PWM CV. The PWM CV is also used to disable the PWM output by setting the CV to -0.8V. This keeps the output high and effectively turns off the PWM audio output.
Although this design can produce a true analog ramp wave, it is based on a digital divider, and so cannot produce a smooth variable frequency. Instead it can only produce various discrete frequencies, depending on the value in the divider. When a modulation is applied to the DCO, the frequency actually steps through various values of the divider under control of the microprocessor. If these steps are not close enough, the result will be audible zippering noise.
This introduces various questions:
- How closely do the frequencies produced match the true values required for in-tune notes?
- How small are the steps between adjacent frequencies?
If we think about the way the division produces frequencies, we can see that if dividing the master clock (2MHz in this example) by 2000 produces a note of 1KHz, then dividing by 1000 gives a frequency of 2KHz, one octave higher. If we halve the division again, we raise the frequency another octave, and so on. This means that the following series of division ratios gives us equal octaves: 2000, 1000, 500, 250, 125. The importance of this is that between the first of these are 999 steps, but in the next octave up there are only 499 steps. The situation gets progressively worse as the frequency climbs, with only 124 steps between the top and bottom of the highest octave shown. In actual fact, the situation on the Juno isn’t quite this bad, but the principle still applies – frequency errors (and steps) are worse at higher frequencies. For most of the range of the instrument, the errors are much less than a single cent, and six cents is smallest difference in frequency detectable by the ear. Only the highest MIDI note 127 reaches this.
At the low end of the range, another problem occurs, which is that the 16-bit counter only allows a maximum division ratio of 131072. If the master clock is set at 4MHz, this gives a lowest possible frequency of 30.5175Hz, roughly MIDI note 23. This is why the Juno uses the Range divider to reduce its master clock frequency. This allows it to produce frequencies another two octaves lower, all the way down to MIDI note 0. This extra division stage essentially gives the Juno a 18-bit divider rather than a 16-bit divider.
There are certain advantages and disadvantages to the design. Some of the plus points also have a flipside.
- All oscillators remain in tune between voices, even if the master pitch drifts. This is highly unlikely since it is a digital crystal oscillator.
- Waveforms generated are genuine analogue waveforms, with no digital stepping.
- All oscillators are phase-locked to the master clock.
- Much effort and circuitry is expended to keep the RAMP output level constant.
Despite the disadvantages, I think the Roland Juno DCO design is a legitimate and useful strategy. Whilst I’m no expert on the 8253 Programmable Interval counter, initially I thought that it resets to zero when a new count is applied. However, I’ve since been informed this is not the case. So the oscillators are free-running from one note to the next, giving an uncertain phase at the note start, even if locked to the same master pitch.
The problem of the oscillators being locked to the master clock is easily solved by having more than one master clock. I suspect that much of the reason these synths are thought thin is because of the single oscillator, rather than because that oscillator is a DCO. Put a second master clock, controlling a second set of oscillators for two-per-voice, and I expect you’d have all the free-phase fatness and beating that anyone could wish for. I believe some of the later Oberheim analogue modules used this technique – the Matrix6 or 1000, can’t remember which.
The RAMP level problem is not as easily surmountable. Roland’s solution works reasonably well, and if a microprocessor is used to calibrate the amplitude compensation CVs, an accurate output can be generated. This is all quite involved though, and I haven’t been able to find a way to avoid it.
Still, this technique provides true analogue waveforms and digital stability and tuning, without any of the aliasing issues that come with digital oscillators. This surely makes it a valid approach. Rather than use the 8253, a modern solution might be to implement a similar system using the 16 or 32-bit timers on a microcontroller like the AVRs, PIC or dsPIC series. The DSI Prophet 08 used the 32-bit timers on a dsPIC for the DCOs.