Wednesday, October 25, 2017

Jupiter 6 filter clone - initial simulation

After the success with simulating the juno filter, I tried the same with the Jupiter 6 multimode filter today. I struggled a lot before I got things up and running - among other things I forgot to connect the power to the resonance OTA of the first cell, and I never got the resonance control from the Jupiter 6 schematic to work so I swapped it for the one from the Juno.

After that however, things turned out VERY nice! What's interesting is that the circuit is exactly the one from the datasheet, with the same component values (replacing the OTAs with LM13700 without the output transistors, and using separate opamp buffers) - and the frequency response tracks the one from the juno clone very well. I got a slightly better tracking by switching from 330pF caps to 323pF, but 330pF will work just fine.

Here are a few plots before I go into details about some discoveries. The output VCA has been tweaked to give us a 0dB output for pass frequencies of the 24dB low pass filter>

This first one shows the frequency response of four of the five possible variations of the two cells. Here the LP output of the first stage is connected to the second stage:



  • Red is LP (12dB) + LP (12dB), or a 24dB LP
  • Green is 12dB LP tapped after the first stage
  • Blue is 12dB HP tapped after the first stage
  • Turquoise is 12dB LP + 12dB HP, or a 12dB BP



In the second one I've connected the HP output from the first stage to the second stage




  • Red is 12dB HP + 12dB LP, or a 12dB BP, similar to the option from plot 1
  • Green is 12dB LP tapped after the first stage
  • Blue is 12dB HP tapped after the first stage
  • Turquoise is 12dB HP + 12dHP, or a 24dB HP


The -3dB cutoff (for the 24dB LP filter) is at 727Hz (measured)


As for the discoveries: For a long time I could not get rid of the resonance. I even tried changing the feedback resistors that tap the stages and send them to the resonance OTAs, but it just didn't want to go away. But then I realised that I had forgotten to connect power to one of the resonance OTAs.

So what did I learn from this? Well, without the resonance OTA, the circuit actually self-oscillates. By adding parts of the signal tapped after the first 6dB cell, we cancel out the feedback that leads to oscillation (or at least that's what I think happens).

This leads to another realization - the control signal for the resonance is reversed. In the Juno, 0V of resonance CV turns off resonance and it increases the closer to 10V we get (also, I think the transistor in the Juno resonance CV circuit acts as an exponential converter, but I have not checked this). In the Jupiter 6 filter, when using the same resonance control circuit, 0V gives a huge (80dB) spike!

Maximum resonance


At 10V resonance is fully turned off. I have yet to confirm that 10V is indeed the correct max voltage for turning off resonance, but with this setting the plot looks exactly like it does for the juno with resonance CV=0V

Oh, and as a closing note - turning up the resonance does NOT attenuate pass frequencies. In the Juno, frequencies below the peak are attenuated up to 8-10dB - but more of that in a separate post comparing the two filters. I'll also post the circuit and work out the necessary control circuitry to get 1V/octave responses for the cutoff, but that's for later.

Update: I just came across a Jupiter 6 filter clone, I belive it is by the guy that writes at polysynth.blogspot.com. It says that the clone is open source, but for my own sake and the fun of working things out by myself, I'll try as hard as I can to not look at his clone before I finish mine :-D

Tuesday, October 24, 2017

BA662 clone

While studying the Juno 106 filter I came across Analogue Renaissance's BA662 clone. It is dirt simple, but when I tried simulating it, I got massive distortion on the output compared to my Xonik linear VCA (based on the research by bergfotron etc, see separate post on the VCA)

When running a 2V p-p signal through it, using a 0.110mA (15V/136k) control current I got an output signal with the same amplitude, but the sine wave had been visibly distorted. Suspecting that this was only a simulation problem, I tried breadboarding the circuit. The distortion was even more visible on the oscilloscope.

2V p-p input (green), distorted output (blue)

I quickly realised that the amplification was not linear close to the maximum signal amplitude, much like a compressor/limiter circuit. Reducing the input to 1V p-p showed that the gain was in fact not 1 but more like 1.5.

Adjusted input, 1V p-p
After readjusting the control current to get unity gain again, I could still see some distortion:

Adjusted amplitude. Output wave is still distorted, though not as much as earlier

After reducing the input further, to 0.5V p-p, and readjusting the control current again, I got this, which seems much better. The control current is now 61.9uA


Then I took a closer look at a document I printed a few years back, that shows what voltages and currents to expect in the Juno:

An annotated Juno 106 service manual showing the various voltages. I can't quite remember where I got it, but I THINK Analogue renaissance made it?

To see how the BA662 is actually used in the circuit, I added the resistors between VCF out and VCA in (though not the VCA offset pot) and set the pot to 25k. Without changing the control current I got this:

Clone as used in the Juno 106 - with the 50k pot centered. Ampitude is MUCH lower.

Notice the significantly lower amplitude. I then adjusted the control current to the maximum according to the document above and got this:

Same configuration but with the control current at 0.3mA, which according to the picture above is the maximum. Notice that the amplitude is alost a quarter of the input. Even if we increase the control current, we are unable to reach unity gain.
So, there is no way to get unity gain out of this. I guess it is compensated elsewhere in the circuit. What troubles me is that with that much attenuation, wouldn't the VCA be unnecessarily noisy?

I will have to recheck the Xonik Linear VCA to see it it suffers from the same distortion problems. From my notes I see that I run it using a control current up to 1.5mA.

Juno filter analysis

I intend to use the Jupiter 6 multi mode filter for the XM8. As this is based on the IR3109, just like the Juno 6/60/106, which is better documented, I took a closer look at that filter first.

Analogue renaissance delivers a great clone of the 106 filter. I am not trying to build a drop-in replacement for anything, so exact component values to match the Juno's are not important, but the idea of using LM13700 in place of the IR3109's OTAs seem to be the go-to solution these days.

In fact, for the filter part (ignoring the resonance and output VCA), part values are mostly the same between the clone and the original Juno 6/60 circuit - 560R and 68k resistors all the way. The caps are 270p in the clone and 240 in the Juno 6/60. I have done a thorough comparison between the various IR3109 filter circuits made by Roland, most of them use 560/68k resistors. The caps have changed from 240p in earlier designs to 330p in later. It probably only affects the exact cutoff-to-CV; I'll test this before I decide on the cap value to use.

I wondered what the linear CV response of the filter would be, so I simulated the circuit in LT-spice. NB: This is the first time I do anything like this, so my findings may not be correct. However, it seems that the current is the case:

For every 2.5kHz increase, the OTA control current increases by 75uA. This means that the LINEAR control current to frequency ratio is (100 * 10^6) / 3 Hz per A. It does not seem perfectly linear however, it drops off somewhat as we go up the scale (an increase from 75 to 150uA increases the frequency by 2,54kHz while an increase from 300 to 375uA increases the frequency by 2.31kHz.

Of course, to properly control the filter, an exponential converter or a DAC output with a high enough resolution is needed. A cutoff of 10Hz requires 0.3uA while 10kHz requires 300uA, a factor of 1000.

Similarly to the DCO frequency calculations, the feasibility of this has to be tested properly, and we may get issues with opamp inaccuracies at the lower end of the scale, though they may not be as severe as with the DCO because the error is not accumulated over time.

PS: The Juno 106 has non-polar caps in line with the signal both before and after the filter. These act as a highpass filter with cutoff around 10Hz.

Filter response with cutoff around 2.5kHz, with HPF included



Update: Replacing the 270p caps with 330p caps changes the control current-to-cutoff frequency from 2.5kHz/75uA to 2.1kHz/75uA, with the same slight dropoff as the frequency increases.

Sunday, October 15, 2017

Noise filter responses


I just downloaded LTspice IV in order to simulate filter responses for the state variable filter for the XM8. To learn, I started out by simulating the various noise filters from the Andromeda A6.

Here are some nice plots to look at (continuous line is frequency response, dashed is phase response):

The A6 noise circuit. I've used LT1001 opamps, just because they where the first in the list.
White noise filter - an HPF. Measured Fc seems to be around 5.3Hz; each of the two filters have an Fc of 3.43Hz. Gain is around 36dB (?)  (multiplier: 72)

Pink noise filter, a 3dB low pass filter approximation, fairly linear from 10Hz to 20kHz. Gain is around 26dB (multiplier around 19.6 measured, as opposed to 21 calculated from the normal non-inverting amplifier formula, due to the 68k resistor)

White and pink noise filters combined

Red noise filter, 12dB low pass with Fc at 107.6Hz. Gain is approx 10dB (multiplier: 3.16)

White, pink and red noise filters combined

Now, after simulating the A6, of course I had to do the same to my pro-one/elliot white/pink noise combination. It turned out like this:
Pro one modificaton white noise. This is an HPF, similar to the one from the A6. The gain is very different though, about 55dB for this one. 

The Elliot 3dB pink noise filter. Not very different from the A6, but with a very different phase change.

White and pink noise filters combined. Fairly similar to the A6.
Now for the interesting part - how do the two circuits compare? Well, first of all, the overall gain of the A6 is significantly less than the pro one/Elliot version. Here is a combined plot:


A6 (green) vs pro one/Elliot (blue).
I did however do a calculation of all expected gains and updated the A6 circuit with a 20k resistor in place of the first 2.43k one in the white noise circuit. It sounded very similar to the pro one/Elliot after that, but what do the plot look like?

A6 after replacing a resistor (green) vs pro one/elliot (blue)
I'd say they are very similar! One thing to notice though, is the difference at the deep end. The pro one/elliot removes much more of the really deep frequencies. This is below what your ear should be able to hear though.


Xonik Waveshaper v1.0

The wave shaper board and Noise board was sent off to DirtyPCBs for production last week. They both turned out rather nice - the waveshaper board measures 28 x 64 mm and the noise around 24 x 25 mm.

Interestingly enough, the sub oscillator circuit takes up more than half of the waveshaper due to the many options (-1/-2 octaves, saw or square wave).

I’ve tested the circuit with the DCO and got some very nice results. There are still some spikes on the sub saw waves, but while adding filter caps did reduce the spike amplitudes, it also widened their base. I’ve chosen to leave the spikes as is but have left room for the filter caps should I redecide.

The noise board requires four external trimmers - one to center the saw wave, one to trim the triangle and sine waves and two to match the saw wave parts in the sub oscillator.

The noise circuit requires an external noisy 2n3904 or, as in the Andromeda A6, 1N5237B/8.2V zener diode. It has the option of adding a trimmer to control the noise amplitude, but also has room to just use an on-board resistor if exact amplitude is not of essence.

The A6 uses an opamp to offset the noise outputs due to its internal offset center (PMID), which also acts as a filter. This is not included in my circuit.

Waveshaper board. All mixing and amplitude control must be done externaly which makes it possible to use this card both with computer control and directly with mechanical switches or potentiometers if one wants to make a mono synth without patch storage.


Here are some photos of the output when the XDCO is connected istead of a function generator:
Saw

Sub oscillator saw, one octave down

Sub oscillator saw, two octaves down

Inverse saw


Triangle
Sine
Square

Sub oscillator square, one octave down

Sub oscillator square, two octaves down

Pulse wave
The results look very good, but I have yet to run it with a amplitude calibrated DCO, so right now wave shaping is not perfect for all frequencies, only the one the waveshaper is manually calibrated for.

Sunday, October 1, 2017

Xonik DCO v1.0

The XDCO board arrived friday, and yesterday I soldered one to test it. I cannot find my 2N3904 SMD transistors for some reason, I was supposed to have received 100 of them in my last Farnell shipment but they were nowhere to be found. Instead, I had to modify a regular 2N3904 to fit the SMD footprint. It works fine but looks rather strange - and is of course not very durable. But for testing, it works just fine.

This wouldn't be a real Xonik project if the first version worked flawlessly however. After some initial problems programming the chip (I connected ISCP data and clock to SPI data and clock....), I discovered that I've used ISCP data as DCO CS, and NOT exposed it as a separate pin! That means that it is not possible to program the chip in circuit. I had to add a thin wire to expose pin 13 on the MCU. After doing this, everything worked as planned and I now have a working DCO.

The ISCP bug may be handled two ways:
- fix the bug and re-order the boards
- develop a boot loader and program the chips before soldering them into the circuit, then use SPI for programming later.

I've wanted to do a boot loader for a long time, so maybe this is the motivation I need - we'll see. The price of the board is not a big issue, they cost less than $20.

As for the crystals and speed - On the breadboard the crystals didn't start properly, resulting in fallback to the internal oscillator. I bought new crystals and did some proper calculation on what caps to use (the crystals require 18pF, using two 27pF in series should result in the correct value, see separate post) and now the crystals oscillate at the desired 32MHz right from the start.

Time to test the DCO with the waveshaper!

Update:
While the frequency is ok, the amplitude is off. The output maxes out at around 8.6V. If removing the cap, we get a flat 8.6V meaning something sinks the rest (?).  I tried removing the transistor collector, the opamp saturated to 15V so it is absolutely capable of delivering the necessary voltage. I also tried disabling resetting of the cap and even then the max was the same. The output stays at 8.6V even while programming the circuit. Someting is definitely wrong around the transistor.

BTW: I tried 5 different transistor and three variants of opamps on the breadboard and it still worked fine.

Update 2:
The amplitude issue was just a miswiring of the external transistor, I had mixed up collector and emitter. After changing this, calibration works again. There are some issues with timing and mcu crashes though, maybe related to unfiltered psu lines?

I've also tested and eliminated the 330k resistor from base to ground. it is necessary in the Juno 6 to keep the base voltage between 1.5 and -12.5 (from a 0 to 5v input) to control a PNP transistor. I am using an NPN which is on when the base is > 0.7V and off when the base is at GND, so it can be controlled directly without any biasing resistor. I've also checked the 68k value, it keeps the I_base high enough to allow I_c to be fully sunk while still being low enough to not damage the transistor.