App Notes4: Analysis of Roland single-transistor VCA

App Note 4: Analysis of Roland single-transistor VCA

This is an analysis of a single-transistor VCA design found in a few roland products such as the TR-909 (e.g., for the snare drum volume control), and the JX-8P (for the oscillator mixing section). Similar designs were used by Korg in the MS20 and the Poly-61. I’m not sure who implemented this design first, I’d be very interested to hear from anyone who knows more about the history of this design.

This app note assumes some knowledge of analog circuits and may not fully explain some prerequisites. If you find this confusing, please improve it by contributing a PR!

This design is interesting in that it uses a transistor in saturation mode, which is a rather unusual operating mode for a bipolar transistor in analog electronics. It also has a rather startlingly low component count for a VCA!

The design

Let’s look at a simplified diagram of the circuit (component values here taken from JX-8P):

Single-transistor VCA circuit

In this design, VcontrolV_{\text{control}} varies from 0.6V0.6V to 5V5V, and VinV_{\text{in}} varies from 0V0V to 28mV28mV.

Using ohm’s law, we note that Vout=IE×20,000ΩV_{\text{out}} = I_E \times 20,000 \Omega where IEI_E is the emitter current.

Assuming an ideal op-amp, we note that the voltage at the non-inverting input of the op-amp is 0V0V, since it is equal to the voltage at the inverting input.

Thus, to understand the behavior of the circuit, we can analyze a simpler circuit

Single-transistor VCA circuit

The “output” of this simplified circuit is the emitter current.

Note from ohm’s law, VB=VcontrolIBRV_B = V_{\text{control}} - I_B R, where RR is the 330k base resistor.

Analysis with Ebers-Moll

One interesting thing to note in this configuration is that the Base voltage is going to be higher than both the emitter and collector voltages. This puts the transistor in the so-called “saturation” region, where a lot of the really simple transistor models for hand calculations don’t apply. We’ll go back to the Ebers-Moll model, which is a simple yet general purpose model that works in all regions. Wikipedia has a good reference for this model. From wikipedia:

IB=IS[1βF(eVBEVT1)+1βR(eVBCVT1)]I_B = I_S \left[\frac{1}{\beta_F}\left(e^{\frac{V_{BE}}{V_T}} - 1 \right) + \frac{1}{\beta_R}\left(e^{\frac{V_{BC}}{V_T}} - 1 \right)\right]

IE=IS[(eVBEVTeVBCVT)+1βF(eVBEVT1)]I_E = I_S \left[\left(e^{\frac{V_{BE}}{V_T}} - e^{\frac{V_{BC}}{V_T}} \right) + \frac{1}{\beta_F}\left(e^{\frac{V_{BE}}{V_T}} - 1 \right)\right]

Here ISI_S, VTV_T, βF\beta_F, and βR\beta_R are all transistor parameters (saturation current, thermal voltage, forward current gain, and reverse current gain respectively).

Initial Approximations

We now apply some approximations. First we make use of the fact that βFβR,1\beta_F \gg \beta_R, 1 for most transistors. Applying this to the above equations we have:

IBISβR(eVBCVT1)I_B \approx \frac{I_S}{\beta_R}\left(e^{\frac{V_{BC}}{V_T}} - 1 \right)

IEIS(eVBEVTeVBCVT)I_E \approx I_S \left(e^{\frac{V_{BE}}{V_T}} - e^{\frac{V_{BC}}{V_T}} \right)

Now, we make use of the fact that in the saturation region, eVBEVT,eVBCVT1e^{\frac{V_{BE}}{V_T}}, e^{\frac{V_{BC}}{V_T}} \gg 1. Now,

IBISβReVBCVTI_B \approx \frac{I_S}{\beta_R}e^{\frac{V_{BC}}{V_T}}

IEIS(eVBEVTeVBCVT)I_E \approx I_S \left(e^{\frac{V_{BE}}{V_T}} - e^{\frac{V_{BC}}{V_T}} \right)

VBCV_{BC} does not depend on VinV_{\text{in}}

Our next step is to recall that IBI_B is actually related to VBV_B by ohm’s law, i.e., VB=VcontrolIBRV_B = V_{\text{control}} - I_B R. This means that our first approximation becomes

VcontrolVBRISβReVBCVT\frac{V_{\text{control}} - V_B}{R} \approx \frac{I_S}{\beta_R}e^{\frac{V_{BC}}{V_T}}

But VBC=VBVinV_{BC} = V_B - V_{\text{in}} by definition, so

VcontrolVinVBCRISβReVBCVT\frac{V_{\text{control}} - V_{\text{in}} - V_{BC}}{R} \approx \frac{I_S}{\beta_R}e^{\frac{V_{BC}}{V_T}}

Now, we note that VcontrolVinV_{\text{control}} \gg V_{\text{in}}, so

VcontrolVBCRISβReVBCVT\frac{V_{\text{control}} - V_{BC}}{R} \approx \frac{I_S}{\beta_R}e^{\frac{V_{BC}}{V_T}}

We see now that VBCV_{BC}, at least in this approximation, is only a function of VcontrolV_{\text{control}} not VinV_{\text{in}}. This means, when considering the behavior under small VinV_{\text{in}} changes, we can treat VBCV_{BC} as a constant.

IEI_E as a function of VinV_{\text{in}}

We now turn our attention to the output, IEI_E. First we recall that VB=VBC+VinV_B = V_{BC} + V_{\text{in}}, so since VEV_E is ground, we have VBE=Vin+VBCV_BE = V_{\text{in}} + V_{BC}. So, our approximation for IEI_E becomes

IEIS(eVin+VBCVTeVBCVT)I_E \approx I_S \left(e^{\frac{V_{\text{in}} + V_{BC}}{V_T}} - e^{\frac{V_{BC}}{V_T}} \right)

or, re-arranging,

IEISeVBCVT(eVinVT1)I_E \approx I_S e^{\frac{V_{BC}}{V_T}}\left(e^{\frac{V_{\text{in}}}{V_T}} - 1\right)

Note that since VinV_{\text{in}} is small, this is approximately linear in VinV_{\text{in}}.

The intuition here is that since VBCV_{BC} is constant, increasing VinV_{\text{in}} will increase VBV_{B}, which will increase VBEV_{BE}, since VE=0V_E = 0. Increasing VBEV_{BE} will cause more current to flow through the emitter, due to the diode action of the base-emitter junction.

VBCV_{BC} as a function of VcontrolV_{\text{control}}

Since we don’t want to work with the cumbersome Lambert’s W function, we can make a somewhat crude approximation that VcontrolVBCV_{\text{control}} \gg V_{BC}. This lets us make progress on this analysis. We’ll confirm that this approximation gives qualitatively correct behavior with SPICE simulations later. Given this assumption, we have:

VcontrolRISβReVBCVT\frac{V_{\text{control}}}{R} \approx \frac{I_S}{\beta_R}e^{\frac{V_{BC}}{V_T}}

re-arranging,

βRISRVcontroleVBCVT\frac{\beta_R}{I_S R}V_{\text{control}} \approx e^{\frac{V_{BC}}{V_T}}

applying log to both sides,

VTlogβRISRVcontrolVBCV_T \log{\frac{\beta_R}{I_S R}V_{\text{control}}} \approx V_{BC}

Full approximation

Finally, we can plug in our approximations for VBCV_{BC} and IEI_E together:

IEISeVTlogβRISRVcontrolVT(eVinVT1)I_E \approx I_S e^{\frac{V_T \log{\frac{\beta_R}{I_S R}V_{\text{control}}}}{V_T}}\left(e^{\frac{V_{\text{in}}}{V_T}} - 1\right)

simplifying,

IEβRRVcontrol(eVinVT1)I_E \approx \frac{\beta_R}{R}V_{\text{control}}\left(e^{\frac{V_{\text{in}}}{V_T}} - 1\right)

so we see, that this is indeed approximately a multiplication of VcontrolV_{\text{control}} and VinV_{\text{in}}.

Spice simulations

Here we verify the behavior of the circuit with an LTSpice simulation. (download)

The circuit we’re simulating is the simplified circuit above.

Spice circuit

We can use this simulation to verify a few key points of the analysis above. First, we fix VcontrolV_{\text{control}} at 2.5V2.5V and sweep VinV_{\text{in}} from 0V0V to 26mV26mV. We can see that VBCV_{BC} only varies from 557.9mV557.9mV to 557mV557mV, so indeed it’s a good approximation to treat VBCV_{BC} as independent of VinV_{\text{in}}.

Vbc vs Vin

Now, let’s check the dependence of IEI_E on VinV_{\text{in}}. We keep VcontrolV_{\text{control}} at 2.5V2.5V and sweep VinV_{\text{in}} from 0V0V to 26mV26mV. We see that IEI_E indeed looks like a small slice of an exponential function (and approximately linear), a great match to the by-hand analysis above.

Ie vs Vin

We can also check the dependence of VBCV_{BC} on VcontrolV_{\text{control}}. To do this, we keep VinV_{\text{in}} at 13mV13mV and sweep VcontrolV_{\text{control}} from 0.6V0.6V to 5V5V. We see that VBCV_{BC} indeed looks something like a logarithmic function of VcontrolV_{\text{control}}.

Vbc vs Control

Let’s check the dependence of IEI_E on VcontrolV_{\text{control}}. We again keep VinV_{\text{in}} at 13mV13mV and sweep VcontrolV_{\text{control}} from 0.6V0.6V to 5V5V. Here we have what appears to be a linear dependence between IEI_E and VcontrolV_{\text{control}}, as predicted above.

Ie vs Control

Finally, let’s do a full simulation of the VCA action of circuit. We apply a sine wave with peaks at 0mV0mV and 26mV26mV at a frequency of 100hz to VinV_{\text{in}} and sweep from 0.6V0.6V to 5V5V and back to 0.6V0.6V to VcontrolV_{\text{control}}. We see that the output matches the predicted behavior of a multiplication of the two signals.

Vca

Downsides of this design

Wow, these simulations look pretty good! Given that this design only needs a single transistor, why isn’t it more popular? A couple reasons come to mind:

  • Thermal noise. Given that an exponential function is applied to VinV_{\text{in}}, the level has to be very low to approximate linearity. In Roland’s implementation, peak to peak voltage is kept under 26mV26mV. This means that the effective noise floor is quite high at most real-world temperatures.
  • Non-linearity. Even with a signal as low as 26mV26mV, we have some visible non-linearity in VinV_{\text{in}} (see spice simulations). Linearity of VcontrolV_{\text{control}} looks pretty good, though. It might be interesting to reverse the inputs and apply the signal through the “control” input of the circuit.
  • The design depends on the transistor being deep in saturation mode, which means that the control voltage must be significantly above both the emitter voltage and the input voltage at the collector. This means that careful control of bias is required.
  • The design is very dependent on the temperature, since the VTV_T term is temperature dependent.

References