# ASM-1 VCO

## Introduction

For a long time I have had a wish to measure and improve the VCO of the ASM-1 by Gene Stopp. This is part of my curiosity on how well a design behaves and also the need for the ego-kick that improvements I come up with improve it. When measuring it I found out just how good the basic design is but also that there are a number of issues to attend to. With this page I want to share both measurement results as well as the various ideas for fixes that can be drawn from these measurements and by me building the ASM-1 VCO.

When doing this page I have used a lot of tools, which includes Emacs, XV, GhostScript, Octave and Gnuplot. I use a Fluke 87 and a Tektronix 4-channel sampling oscilloscope (model number has escaped my memory at this moment). Besides that is some work with pen and papper (an excelent way to figure out what is happening). Meditation over Gene's schematics is a must to figure out what is happening, but I hope to open your eyes some more details.

I thank Net Insight AB for kindly allowing me to use their equipment (OK, so I didn't give them much choise and besides, I saw to it that they bougth it in the first place). This is also the place where I work.

## Construction Theory

The ASM-1 VCO can be broken down to 5 blocks, CV summer, exponential converter, ramp genertor, sawtooth waveform output buffer and pulsewave output buffer. The exponential converter and ramp generators is the core functions in a musical VCO.

The CV summer will make a summation of the input CV connections, add a trimmable offset and adjust the scale to the exponential converter to match the 1V/oct exponential curve.

The exponential converter uses the exponential properties of the PN junction when used in the forward direction. The PN junction will maintain an exponential relation between the applied voltage and current. This exponential relation is temperature dependent which makes things a bit more complicated. Another thing is that diodes and transistors have a bulk resistance that adds voltage as the current passes. The linear property of the bulk resistance must be eliminated for the exponential property to be usefull over a large range. For this one uses two matched transistors. Each transistor have the property of:

```            I
kT     C
V   = -- ln -- + I r
BE    q    I     C BE
S
```
ParameterMeaning
VBEVoltage between Base and Emitter
rBEBulk resistance between Base and Emitter
ICCollector current
ISExtrapolated collector current for zero VBE
TAbsolute temperature of PN-junction measured in Kelvin
kBoltzmann's Constant (1.380658*10E-23 J/K)
qUnity Charge (1.60217733*10E-19 C)

## Measurements

The measurements where made in a very rougth manor, it was intended to be an initial measurement and is thus not very exact.

I hooked up a Tektronix sampling scope at the output of the integrator core (Ch1), I hooked one to the output of the CV summing op-amp (Ch2). The output of the CV summing op-amp where picked so that any incorrect adjustment of the Scale and Offset pots would not disturb the measurements of the VCO core. I picked the output of the integrator to avoid missinterpretations due to the inversion, DC adjustment and scaling that the Squarewave buffer does. These choices later prooved to be correct and vital to understanding some of the aspects. I also found out that there where some trouble with the reset part of the wave, so I hooked up the output of the LM311 comparator (Ch3) so that one can see the reset spikes. A few dedicated reset measurements where also done.

Since Tektronix engineers are such a nice bunch of chaps they have added the neat feature of making measurements on the sampled waveforms and also storing these onto disc. This has been used to let you in on the waveforms that I saw. Since I did see some trouble with the reset cursuit I also measured the fall-time of the squarewave.

Below you will find the frequency sweep measurements:

## Measurement Processing

After some agony I eventually got around making a half-hearted analysis of the measurements. This happend in the tool Octave (similar to Matlab, but is free) and here follows the pieces:

```% Voltage table
V=[14.20     13.11     12.10     11.10     10.060 9.036  8.052  7.044 \
6.068  5.056  4.072  3.064   2.080  1.072  0.0044 -1.042   -1.998 \
-2.994   -3.988    -4.980   -5.956   -6.952   -7.948]
% Frequency table
f=[89.288E-3 181.82E-3 339.00E-3 664.48E-3 1.2854 2.4390 4.6728 8.9688 \
17.362 33.556 64.520 124.808 236.98 456.64 877.76 1.7730E3 3.3336E3 \
6.4296E3 12.1584E3 23.436E3 43.508E3 81.048E3 102.752E3]
% Get octave scale
fl = log(f)/log(2)
% We know that the uppermost entry (23) is quite of axis, so it is \
% left out in the evaluation of the others (1-22).

% Octave range covered
or = fl(22)-fl(1)
```

Resulting in or = 19.792. This means that these measurements where covering an octave range of 19.792 octaves.

```% Voltage range covered
vr = V(22)-V(1)
```

Resulting in vr = -21.152. This means that these measurement where covering an voltage range of 21.152 in negative voltage scale.

```% Octave per Volt (range based)
opv = or/vr
```

Resulting in opv = -0.93570. This will be the scale factor that the CV summing op-amp shall use to make the VCO track to a 1V/oct scale.

```% Offset of oscillator (octave and real)
f0l = mean(fl-opv*V)
f0 = 2**f0l
```

Resulting in f0l = 9.7802 and f0 = 879.27. The rest frequency is here measured as a result of the full range.

```% Mean voltage
mv=mean(V(1:22))

% Mean octave frequency
mfl=mean(fl(1:22))

% Plot voltage sample deviations from a poorly estimated line
plot(V(1:22)-mv-vr/21*(1:22))
```

Gives the following plot:

This plot shows how the measured applied voltage differs from the intended at the measurement point. This plot will be used to compensate the frequency measurements.

```% Plot frequency sample deviations from a poorly estimated line
plot(fl(1:22)-mfl-or/21*(1:22))
```

Gives the following plot:

This plot shows the differences in frequency between measured and intended frequency at the measuring point. This frequency deviation plot still have errors included due to applied voltage is deviating form the intended voltage.

```% Plot frequency sample deviations compensated with voltage sample deviations
plot((fl(1:22)-mfl-or/21*(1:22))-opv*(V(1:22)-mv-vr/21*(1:22)))
```

Gives the following plot:

The plot shows the compensated frequency deviation measured in half-note steps. It has been compensated for the difference between the intended input voltage and the measured input voltage at the measurement point.

## Other commentaries

During the creation of these pages I was listening to some of my favorite music, here is a sample of what was on my stereo:

"Poland" with Tangerine Dream. I absolutely love this album. I read on the TD webside that this was one of their more dramatic and catastrophic gigs. The calm and cool athmosphere here is lovely. I have over 35 TD albums and I think this has a good position in the top-ten albums.

"You Can Dance" with Madonna. Not a great fan of Madonna's work on these later years this is back in a period I like. It hasn't been played in years now but I saw the last episode of BBC's "Dancing in the streets" series featuring Madonna among several cool cats in the Hip-Hop, House, Techno and Ambient scene.

"Medusa" with Annie Lennox. This album was really an album I accidently bougth wrong. It did not features the song that I was looking for, but hey, it's a great album. "Take me to the river" and "A whiter shade of pale" are both in nice versions here. Annie's solocarieer has some interesting aspects.

Magnus Danielson <cfmd at bredband dot net>