Showing posts with label exponential converter. Show all posts
Showing posts with label exponential converter. Show all posts

Monday, March 20, 2023

A bit about how think about the basic operation of the LM13700

It's really hard to find any absolute truths about how to design for the LM13700 as the formulas available are not possible to use directly. Thus, most people end up simulating or experimenting until they get the desired results.

This post tries to give a few good starters for the most basic cases - using the LM13700 as a simple VCA without any feedback etc. Using the details here will get you in the ballpark of what you need, without being perfect. You then have to try various resistor values until you get what you need.

Maximum values from the datasheet

- I_abc: 2mA

- I_d: 2mA

- V_differential: +/-5V

Facts (of the not so fun type)

The relationship between I_abc and gain is independent of supply voltage, BUT:

  • I_d is directly proportional to supply voltage so the circuit generating it must be changed if changing supply voltage.
  • The voltage at the I_abc input changes with supply voltage, so HOW I_abc is generated changes if it does not come from an ideal constant current source.
  • Using the linearising diodes allows you to use a much higher input signal without distortion. A higher input means better signal-to-noise ratio, e.g. less noise on the output.

Design stuff

  • I_abc and I_signal should be as large as possible (for reduced noise), within the max/design limits.
    • When using the linearising diodes, I_signal can be much larger. 
  • I_abc goes through and sets up a voltage across R_abc. This has to follow Ohm's law, and so R_abc must be picked so that the voltage across can be large enough to hold up V = R* I for the I we want. It should not allow more than 2mA (I = V/R), any higher and the LM13700 self destructs. A bit of a safety margin is good, so maxing out at 1.8mA is fine. When switching from a 15V to 12V supply, R_abc must be reduced accordingly to allow the same I_abc range.
    • The voltage at the I_abc input is said to be two diode drops above the negative rail: V_abc = 2*V_be + V-. As a diode drop is approximately 0.7V, using a 15V supply we should expect a voltage of 1.4V -15V = -13.6V
    • In my simulations I've found this to be approximately true but it seems to change a little bit (around 0.5V) with control CV. It IS however consistent between 12 and 15V, with V_abc for 12V aways being 3V lower than for 15V.
  • When using the linearising diodes, gain is propotional to I_d.
    • Try to keep I_d = 1mA
    • I_d is calculated as (+V - 0.7V) / R_d, for example, for 15V supply and 13k R_d, I_d = 14.3V / 13kOhm
    • As I_d is not constant (it changes slightly with signal input), this will not always be the exact current, but it will give the correct relationship between I_d for 12 and 15V supplies
    • Keep | I_s | < I_d / 2  - I_s is signal input current, but it's not evident exactly what that means, see more about the missing/wrong formula for gain below
  • Differential input voltage must be < 60mV_pp (peak to peak) to keep THD < 0.1%. 
    • I am again not entirely sure what this means, but the datasheet uses an example with a 30k input resistor and a (trimable) 500R resistor to ground, and says that "the input divider in the input will reduce the 1Vp to 33mVpp. A simple resistor divider with 30k on top and 500R at the bottom will reduce a 2Vpp to 33mVpp so it may very well be just that, meaning that whatever input you have must be divided down so that it is at max 30Vp (single peak) or 60Vpp, ignoring any DC offset.
  • I don't understand how to select resistors to connect to +in and -in, but the norm is to use a 1k pot between the inputs with the center tied to GND. 
    • This makes it possible to trim out DC offset/CV bleedthrough from the output.
    • If the output coupled (AC coupling removes any DC component so any slight mismatch/off-centering will disappear)  two 510R to GND can be used instead.
  • Output current (and thus gain) when using linearising diodes can be approximated as I_o = I_g * I_abc / I_d
    • I_g is the current in the input resistor and is approximated as V_in / R_in
    • I_d is current into the diode biasing input and is (Vsupply - 0.7)  / R_d
    • The approximation is around 10-20% wrong
  • Output current when NOT using linearising diodes is I_out = V_in * q * I_abc / 2kT.
    • V_in is the differential voltage between the positive and negative inputs
    • k is the Boltzmann constant
    • q is the electron charge
    • k is the ambient temperature in Kelvin
    • q/kT = 38.7 V^-1 at 25C (yay, temperature dependence!)
    • A good approximation for V_in is to use the voltage at the resistor formed by R_in and R_g, the resistor from the input to ground: V_diff = V_in * R_g / (R_g + R_in)
    • The approximation is just 1-2 percentage points wrong compared to the simulated results, but the simulated results are 10-15% different than the calculated output. The real life results may be even more different.
    • The calculated current is for an AC-coupled output. In reality, the output has a DC component, meaning it is not centered. The resistors to ground lessens this effect. Adding a DC voltage to the input can also center the output.
  • Output current is converted to a voltage by sinking it to ground and buffering the output. The output voltage is then V_out = I_out * R_out

Changing supply voltages


The only part of the LM13700 that is really affected by changing the supply voltages, is the voltage level at the I_abc input, which is needed when selecting an appropriate R_abc:
  • The voltage at the I_abc input is said to be two diode drops above the negative rail: V_abc = 2*V_be + V-. As a diode drop is approximately 0.7V, using a 15V supply we should expect a voltage of 1.4V -15V = -13.6V
Other than that, the resistor that is used to generate the current into the linearising diodes, I_d, must be changed. 
  • I = (Vsupply+ - 0.7V) / R_d
Whatever circuit generates I_abc may need modifications. For the linear control voltage of the Xonik VCA nothing has to change. 

For an exponential converter, you need to change:
  • The reference current resistor to get the same reference current: I_ref = Vsupply- / R_ref
  • The offset voltage resistor is connected to Vsupply and must be recalculated
  • R_abc must be changed to allow a smaller (when going from 15V to 12V) resistor to pass the same I_abc
The currents and voltages around the inputs are independent of supply voltage, and the gain is proportional to I_abc with exactly the same ratio for 12 and 15V supplies. 

NB: All of this is based on studying the simulation results so a disclaimer is necessary, things may be a bit different in real life :-D

A bit of background


An example of the circuit using I_d / linearising diodes:


An example of the circuit without using linearising diodes. R4 may be replaced with a short but that will move the output more off center.



Formulas

Without an R_d/I_d:

- gain is said to be q * I_abc / 2kT. My simulations show that it is close to what the simulator says.

- kT/q = 26mV at 25C

- however, this is only an approximation for small differential input voltages. How small? Not sure, I can't find it even though I thought I read it in the datasheet.

- and you need the differential input voltage, but that can be approximated as described above.

With  R_d/I_d:

- gain is said to be I_out = I_s * (2*I_abc / I_d), for  | I_s | < I_d / 2

- however, nobody really knows what that means exactly, and what I_s is it seems.

- Iain from Lushprojects (http://lushprojects.com/blog/2012/08/lm13700-missing-forumla/) came up with an alternative formula: I_out = I_g * I_abc / I_d, where I_g is the current in the signal input resistor. It is said to be around 12% less than the actual gain but gives a ballpark at least.

- I_g can be approximated as V_in / R_in, in other words ignoring that the input is not at 0V. 

- The error in the formula is larger the smaller the biasing resistors get (and the smaller the input resistor gets), simply because the current in the biasing resistor increases relative to the input current. For the normal 500R biasing resistors, the error is around 17-19%.  

- The error in the formula are supply voltage independent.

The takeaway from these formulas are that the gain is dependent on I_d and that you can use a bigger input signal when using I_d, meaning less noise.

Links about the wrong formula: 

- http://lushprojects.com/blog/2012/08/lm13700-missing-forumla/

- https://modwiggler.com/forum/viewtopic.php?t=65783

- http://lushprojects.com/circuitjs/circuitjs.html?startCircuit=ota-gain.txt


A bit about the internals


Internally the circuit consists of four current mirrors and a differential transistor pair.

A current mirror is a circuit that makes sure that the current in two of its legs stays the same - one is the reference and one is the output - independent of what is connected to its output.

For this circuit, one of the mirrors makes sure the sum of the currents through the differential transistors, I_4 and I_5 here, equals the control current I_abc.

The three others bounces I4 and I5 around and combines them at the output, with the result being that I_4 + I_5 = I_abc

When trying to understand the circuit, it is useful to separate the analysis into two parts - what happens without any external AC input, and what happens with ONLY the AC input - as there will be a DC offset both at the input and output terminals.

Also, it helps to think about what voltages and currents are significant and what can be ignored/expected to be fairly equal.

Tuesday, February 14, 2023

Filter CV range calculations

Update: I've used 17.9mV throughout this post as the V/oct input to the exponential converter. Not sure where I got this number from, but in my posts on temperature compensation I use 17.5mV per octave at 20C. The change in range per degree is approximately 60uV. This places 17.9V 0.4mV or 400/60 = 6.67 degrees up, at 26.67C. I've recalculated things and it doesn't really change anything except for the tracking so I've left this post as is. 

Now here's the fun part of the last post :-) 

I did a quick measurement of the input CV to the exponential converter.

For an output of 150nA we need an input of 72mV

For an output of 1.16mA we need an input of -149mV


This means we have a total range 231mV. With the expected 17.9mV/octave this covers 12.9 octaves. If we want to cover 14 octaves, we need 17.9 mV * 14 = 250.6mV.

It looks like 14 oct may be hard to achieve in practice, as < 150nA will give an output that always attenuates, and one additional octave when we're at 1.16mA would need 2.32mV which is much more than the max we're able to generate. But for the sake of this discussion, let's go for a 14V range, starting at 72mV.

We then want to add +/-3 octaves of tuneability, to cover temperature changes and parts differences. Normally, these 3 octaves will be useless, but being able to change the input voltage by a similar amount will give a voltage at the expo converter that is +/- 3*17.9mV.

To cover this, the range seen at the expo converter should have a range of 17.9mV * 20 = 358mV. It should start at 72mv - 3 * 17.9mV = 125.7mV and go down to -232.3mV

We know that the maximum output of the CV summer is around +/-10V with +/-12V rails. That means that if we set -10V out of the CV summer to end up as -232.3mV, we need an 1/43 attenuator.

Selecting a nice and round number for the attenuator, 1/40, we would need -9.25V in to reach -232.3mV

That would put the top voltage at 5.03V, giving a range of 5.03V - -9.25V = 14.28V

ok, so that is the MOST we can do. But let's pick a number that is easier to work with. Let's restrict the output of the CV summer to a range of 10V. Having a 0-5V CV input (that should cover 20 octaves) means we can use a -2x gain, that's pretty neat.

So, with a 10V range in, and a 358mV range out of the voltage divider before the expo converter, we need a 10V/0.358V = 27.93 attenuation. We already have a 560Ohm tempco at the bottom of the divider. Picking a 15kOhm resistor at the top will give us a 27.78 attenuation, that's pretty close - it gives 360mV out for 10V in.

Applying this to the original output values gives us:

Needed input top: 125.7mV * 27.78 = 3.49V

Needed input bottom: -232.3mV * 27.78 = -6.45V


So - we need a circuit that produces a 0 to -10V output from a 0-5V input, and then offsets that output by 3.49V

We already know that the first part is achieved by a -2x gain. Using a 100k feedback resistor we could use a 50k input to achieve that.

For the 3.49V we connect a resistor to -12V. The gain has to be 3.49 / -12 = -0.2908. With a 100k feedback resistor we thus require a 344k resistor. 

The nearest standard value is 330k or 360k if using a more fine grained scale. Using a 360k resistor will give a gain of 100 / 360 = 0.278 and an output of 3.33V. A 330k resistor gives a gain of 100/330 = 0.303 and an output of 3.64V. Let's go for the 360k first, just because -3.33(3333)V is such a nice number. The range at the input is now 3.33333V to -6.666V (mmmmm!).

Converting back to the output at the expo converter, we get 3.33/27.78 = 120mV and -6.66/27.78 = -240mV. 

If we instead go for the 330k resistor, it would set the range at 3.64 / 27.78 = 131mV to -6.36 / 27.78 = -228.9mV

Now, none of these cover the entire range we originally wanted. The 360k resistor is 5.7mV away from reaching the lowest point, the 330k resistor is 3.4mV away from the highest point. The worst offset is thus about 0.31 octave away from our intended range. As we have 3 octaves to work with in both directions, I'd say both options will work.

Backtracking a bit more, we get that our new range, 360mV (for the 360k resistor, or 359.9 for the 330k resistor), covers 360mV/17.9mV = 20.11 octaves. That's fairly accurate without any kind of tuning, which is a very good starting point!

To sum it up:

Use a 50k resistor between CV input and the negative op amp terminal

Use a 100k feedback resistor

Use a 330k resistor between -12V and the negative op amp terminal

Use a 15k resistor on top of the voltage divider (connected to the op amp output)

Use a 560R resistor to ground at the bottom of the divider

NB: 15V/-15V supply is really 12V/-12V, I just couldn't be bothered changing the labels.

Update:

When using 17.5mV the range is instead 124.5mV to -229.5mV. 20 octaves would be 350mV. Using a 0-10V input to the resistor divider would give perfect tracking for a 28.57 attenuation, which would require a 15.44k resistor on top.

If we keep the 15k resistor we will get 0.486V/octave instead of 0.5 at the input. It doesn't matter too much as we have a lot of tuning range, though we COULD combine a 15k and a 470Ohm resistor if we wanted to.

Now it's time to test this. Quick Batman, to the LTSpice-mobile!

(We have one last issue to tackle though, temperature compensation. But let's not spoil the fun yet!)


Edit: testing

Red: CV input, Blue: CV summer output, Green: I_abc

My calculations are correct. I see a 3.64V to -6.36V output after the CV (With a 330k offset resistor). 

The voltage at the expo converter is 130.87mV down to -161.3mV, after that it flattens out meaning we've reached the limit of the converter at its 25C state (we needed it to reac -149mV for a 1.16mA current so that's ok). This happens when CV is 4.44V btw.

I_abc is 15nA to 1.28mA.

Light blue: expo converter base voltage, Green: I_abc

We do see a bit of non-linearity when the expo converter base voltage reaches around -122mV (CV is around 3.6V). Not sure what is going on there, I saw the same thing with the unchanged circuit. It would mean that the last octave (-122mV to 149.9mV) is not tracking properly, though this either should not be a problem because it is so high anyway, or we have a bit of room to calibrate it out. 

Frequency response

I did some fairly manual frequency response measurements, plotting the filter response for various CVs and reading the -3dB cutoff frequency. It's not entirely accurate but gives a good indication:

CV: Frequency

0.75V: 3.48Hz (oct 0, but never gets above -2.2dB)

1.00V: 8.6Hz (oct 1)

1.25V: 17.9Hz (oct 2)

1.50V: 36Hz (oct 3) "Baseline" for expectations later

1.75V: 74.33Hz (oct 4)

2.00V: 150Hz (oct 5)

2.25V: 304Hz (oct 6)

2.50V: 606Hz (oct 7)

2.75V: 1.21kHz (oct 8)

3.00V: 2.34kHz (oct 9)

3.25V: 4.47kHz (oct 10)

3.50V: 8.20kHz (oct 11, expected 9.2kHz)

3.75V: 14.1kHz (oct 12, expected 18.4kHz)

4.00V: 22.34kHz (oct 13, expected 36.8kHz)

4.25V: 32.8kHz (oct 14, expected 73.7kHz)

4.50V: 41.9kHz (additional octave, highest reachable cutoff)

As we can see, tracking is quite accurate from between oct 1 and 2 up to between octave 10 and 11. We will be able to tune in 40kHz as well, with an additional 0.5V CV (=2 octaves) left for temperature compensation etc, meaning we can get a workable 4Hz to 40kHz.

PS: Since it looks like the most compensation is needed at the top range, we could perhaps go for the 360k shifting resistor option instead, it will shift everything up by about 2/3 octave and allow more calibration on top.


Temperature compensation

We're using a 560Ohm tempco. Let's see what PPM rating it should ideally have. Now, tempco values are usually defined with a 0% change at 25 degrees. At 25 degrees, we would expect the expo converter to need 17.5mV + 5 * 0.06mV = 17.8mV per octave. Let's calculate the necessary input voltage:

V_in * 560 / (15000+560) = 0.0178V, V_in = 0.494V

Now, if the temperature rises by 10 degrees, we would need 17.8mV + 10 * 0.06mV = 18.4mV for the same change. To keep the CV input equal, we see that

0.494 * x / (15000 + x) = 0.0184V

x = 580.32Ohm. In other words, the resistance needs to change by 20Ohm or 0.5Ohm per degree.

From my previos work I have that

560 * (1 + x * (10^-6)/10) = 580

x*10^-6 = 580/560 - 1

x = (580/560 - 1) / 10^-6 = 3571

Which should mean that the resistor should have a 3571ppm/C temperature coefficient.

The ones I have, Vishay Linear PTC, TFPT0805L5600FV (684-1021 from RS components), are nowhere near this. They are 4110+/-400 ppm/K, and a simple example says they are expected to be 560 * 1.042 = 583.52 at 35 degrees. The worst case scenario should be 1.046, = 585.76, let's round to 586. While this may not be good enough for a VCO, I think it has a fair chance of working for a VCF. Let's calculate.

The output of the voltage divider at 35 degrees should be near

0.494V * 586 / 15586 = 18.57mV, or 0.17mV off from what we expected.

At 35 degrees, a semitone is 18.4mV / 12  = 1.533mV. 0.17mV equals 11cents of error. Over a 14 octave range, the accumulated error will be 155 cents or 1.5 semitones. 

If instead the temperature rose by 25 degrees to 50C, the resistor should be at 1.110 * 560 = 622Ohm. The needed output would be 17.8mV + 0.06 * 25 = 19.3mV. The output from the divider would be 19.67 or 0.37mV off, equaling 24 cents, and over 14 octaves 338 cents, equaling 3.5 semitones.

Without temperature compensation

To get a better understanding of what we are up against, let's see what the offset looks like if we don't use a tempco.

Starting again at 25 degrees, we know that 0.494V in gives 17.8mV out.

But then, at 35 degrees, it STILL gives approximately 17.8mV out, while the exponential converter needs 18.4mV. We have a 0.6mV error instead of the 1mV we would get with the tempco.

Over 14 octaves that accumulates to 8.4mV or 5.5 semitones - or almost half an octave. This is for a 10V change. If the change is more drastic, say 25 degrees, the error will be 0.06 * 25 = 1.5mV/oct for a total of 21mV, or 1.14 octaves. As we have a +/-3 octave tuneability, this should also be within reach. We would, however, need to know the temperature!

Keeping multiple VCFs tracking

With a tempco in place, and assuming that it is somehow affected at least not too much differently than the internal temperature of the expo converter, and also assuming that the VCFs won't drift THAT much from each other in terms of temperature, say +/-5 degrees, we COULD see as little as 0.38 semitones difference (given all VCFs are tuned to the middle freq, we would see a +/-7 oct range to drift in). This would not be perceptible in terms of cutoff but perhaps for resonance. 

WITHOUT the tempco, we have different option - measuring temperature and keeping several lookup tables. Apparently, this is what some Sequential synths do their VCO calibration, making them playable without warmup. 

We would however need a temperature sensor close to the expo converter. It is an exciting thought and I should definitely explore it further, especially seeing as thermistors are hard to get, expensive (2-3USD per chip) and have to be manually soldered.

It may even be an idea to use a temperature sensor for tuning the filters even with the thermistor in place...

A thought about tuning

I started wondering about how to best tune the cutoff. We can send a sine-like wave and see how it is attenuated. This will work up to the maximul DCO frequency which is something like 20kHz, but above that, in the most troublesome territory, we have no built-in source (though we could possibly use a VCO, but they are themselves not completely stable).

But we DO have resonance. If the resonant frequency is directly and proportionately related to the cutoff frequency, could we measure the resonance wave (e.g. just frequency counting) instead?

Sunday, August 11, 2019

Exponential converter heater

Just something I seem to search for over and over: An oven/heater circuit for keeping the exponential converter transistor pair at a constant temperature level to prevent detuning when temperature changes:



The minibrute. Uses ca3083, the microbrute uses lm3046 combined with ca3083 in a different combination as it also has a different expo converter. Expo pair is part of u10 (first two transistors).

Thursday, January 24, 2019

Jupiter 6 filter resonance

I'm feeling fairly satisfied with the Juno and Moog filters now, so it's time to do another round with the JP6 filter.

The cutoff control is not that interesting, I assume I can tweak the starting point just the same way I did with the two others, and reuse the expo converter from the Juno - after all, the filter core should function the same way, with a doubling in control current resulting in a doubling of frequency.

The resonance on the other hand, is completely different. The juno returns the difference of the filter output and filter input, tapped at the last stage, and returns it to the start of the filter. The jp6 on the other hand, returns the SUM of the output of the first stage and the filter input and returns it to the start of the filter, where it is also mixed with the output of the second stage.

I discovered quite early on that reusing the resonance control from the Juno filter did not work as it should. In fact, I got resonance with a 0V input and the resonance fell when increasing the CV. At last 10V was needed for a 'normal' response without resonance.

I went back to the datasheet, and discovered that the resonance OTAs are actually IR3109s, which means that they have built in exponential converters. This makes a huge difference of course. I went on to duplicate the expo converter from the juno filter, after all it should be a close approximation of the one from the IR3109, and add the rest of the JP6 control circuit. I also re-read the datasheet and it seems the JP6 DAC outputs up to 10.7V (see page 4b, DAC amplitude). Finally, each resonance CV feeds two voices and each voice has two resonance OTAs (In fact, two voices share one IR3109), so I added two additional OTAs to the simulation to get a correct split for the I_abc.

So far so good. But the OTA CV circuit has a trimmer in it. And this trimmer has a huge effect on not only how high the resonance peak gets, but on how little resonance we get too.


In the Juno filter, fully turning off the resonance OTA meant no resonance. In the JP6 on the other hand, there is no absolute 'no resonance' point. The OTAs 'defeat' resonance by feeding back more of the output of the first stage (and third stage), so turning it off means maximum resonance.

Here are some plots. First of the resonance CV from 0 to 10.7V and the corresponding I_abc current for each OTA. We can clearly see that the lower the CV, the higher the current - and higher I_abc means a higher gain in the OTA. There are three plots, each for a resonance trimmer setting of 0, 0.5 and 1 (wiper position).
Wiper at 0

Wiper at 0.5

Wiper at 1
Second series of plots show the corresponding frequency response is. Note that for a trimmer setting of 1, A 0V CV still results in a quite visible resonance. Wiper at 0 or 0.5 shows no bump, but which one is the correct one? Or is it somewhere in between?

Wiper at 0

Wiper at 0.5

Wiper at 1

Finally, a plot of trimmer position vs minimum resonance. The top green line is wiper at 0. All lines after the grey one (wiper at 0.5) shows a bump so they are definitely not correct, but are any of the others?

My conclusion then, which I guess is ultimately quite fun, is that I have to understand what is going on. How does this filter create resonance, and what exactly is it that the OTA output defeats. When knowing that, I can go back and calculate what the best output of the OTA is, and get the necessary theoretical gain.

OBTW: Why bother? Why not use the circuit like it is? Well, for one I would not know how to properly calibrate it, and second, I think I still like to keep the resonance control linear and do the expo conversion in software, the way the other filters do.

UPDATE: I tried reading up on Q, resonance etc. It is not easily understood exactly how it comes about. But I DID find some great reasources on state variable filters, that inspired me to try adding more features - tapping bandpass after pole 1 and 3 (6dB) and creating notch / AP versions. Very exciting!

I ended up doing a quite crude comparison of the falloff between the Juno and Jupiter filters. I positioned a marker at resonance frequency and then measured the falloff from the 'plateau' down to it. I found the dropoff to be about 10.3dB and so I have adjusted the Jupiter filter to match this when the resonance CV is 0V by setting the resonance offset trimmer U23 to 0.25.

Juno filter 


Jupiter filter

Monday, January 21, 2019

Moog ladder filter revised

After all the work I did on improving the range and controls of the Juno filter, I decided to have a closer look at the Moog filter. I have improved the following:

  • VCA CV is now similar to the Juno - it has an adjustable deadband at the start and a summing point for multiple CVs
  • Resonance CV is similar to the Juno in the same way
  • Cutoff CV summer has been altered to give a 10Hz cutoff from a 0V CV, with +/- 5.6 octaves trimability, fairly similar to the Juno.
  • I have added a tempco resistor to the exponential converter.
  • I have added an option to tap the audio output at 12dB/oct instead of 24. Resonance is still tapped at 24dB to get a nice high resonance. No switch has been drawn but either an electronic or mechanical DPDT switch will do.
  • I replaced the output buffer with a transinductance circuit and instead flipped the inputs to the VCA OTA to keep phase. This fixed the maximum cutoff frequency similarly to the Juno.
  • I added a linear FM input to the cutoff frequency.


In addition to all this, I've completely changed the signal attenuation/gain to enable overdriving.

Overdrive 

The Memorymoog schematics indicates that a 40mV p.p. at the transistor base of the bottom ladder transistor is the 'norm'. My simulations show severe distortion at this level. I could see distortion all the way down to 10mV p.p. I have suggested three component values that will work for 5, 10 and 20V p.p. input (with a 15mV p.p. base voltage at those values). This gives a slight distortion at the highest inputs, and further distortion should the input exceed the specification. For example, a 10V p.p wave maxes out at about 16V p.p even with much higher input.

How the overdrive sounds in practice is still unknown.

Input (blue) vs output (green), input is 8V to 30V p.p


Computer calibration

It would probably be possible to tune most parameters of the filter using lookup tables in the computer control. Here are some thoughts on that:

- If no deadband is needed (i.e. 0V input to the VCA CV gives an 'off' output), the U17 trim pot and R41 may removed. Keeping R41 but connecting it to -15, and changing the value to 1.5MOhm will give a 100mV deadband.

- The U13 VCA gain potentiometer can be replaced with a fixed resistor that gives a more-than-unity gain at max CV. By doing this, the VCA CV can be calculated in software to give a correct curve with a end point that results in unity gain.

- Similarly, U20 can be chosen in such way that it results in a resonance higher than what is wanted, and CV then corrected in software for max resonance.

- I would probably still keep the tracking potentiometer, but R36 can be replaced with a lower value, giving a lower frequency as a starting point. Then you could replace R32 with a 25k resistor to get 20 octaves of CV control, enabling proper calibration of lowest and highest cutoff.

- It IS also possible to replace the tracking pot U9 and resistor R23 with a 100k resistor. Tracking could then be adjusted in software.