Tempcos was: Re: New(?) ideas for the new year

Rene Schmitz uzs159 at uni-bonn.de
Thu Jan 8 19:37:15 CET 1998

At 15:13 07.01.1998 +0100, you wrote:

>Well, when I measured the NTC I was imidiately disappointed and stopped
>the whole idea. Maybe too early ?
We will see...

>Ok, what do we need ?
>For the 101th time (please forgive me ! :>)
>Exponential generator temperature compensation.
>The current out of a matched pair expo converter
>looks like this (1st order explanation):
>where :
>Iref : reference current
>Rl   : voltage divider lower leg
>Ru   : voltage divider upper leg
>Ue   : input voltage fed to divider
>Ut   : Kb*T/q or shorter a*T where a ~ 8.625e-5 V/K
>This temperature voltage Ut by law of physics is the reason for all
>this temperature bla bla.
>Example : Ut (273K = 0C  ) : 23.5mV
>          Ut (373K = 100C) : 32.2mV that's ~36% more!
>We could simply put a controlled oven around the expo-converter, to keep
>the temperature always say at 50C (what some critical crystal oscillator
>applications also do, so this is not so stupid as it may sound).

No it isn't, but a heater needs lots of current, certainly something like 50mA, 
and one could do things more interesting with that current...

Another method, although I pointed it out several times, is makeing use of the 
tempco of an discrete differential-transistor-amplifier in the feedback loop of 
an opamp, this gives an *exact* cancellation, since the same physical
dependancy is
used, and transformed into its reciprocal. 

Refer to http://www.uni-bonn.de/~uzs159/vco.html follow the
temperature compensation circuit links, there is the schematic and a

>Or we could make Rl or Ru depend on temperature to compensate for Ut changes.
>We need I=Iref*exp{ln(2)*Ue/V} (one Volt per octave)
>=>   Rl/(Ru+Rl)*Ue/Ut=ln(2)*Ue
>=>   Rl=Ut*ln(2)/(1-Ut*ln(2))*Ru
>If we say that Rl should depend on T we get:
>         a*T*ln(2)
>Rl(T)= ---------------- * Ru
>         1-a*T*ln(2)
>If we say that Ru should depend on T we get:
>             1
>Ru(T)= (------------- - 1) * Rl
>           a*T*ln(2)
>OK ??

I agree. I was wrong too..The needed change is not expo, but inversely
And I must say that I know that an assumption must be made for the use of a
tempco resistor (let it be Q81 and stuff, or NTC-thermistors)

In all cases: Rl<<Ru !!!!!

That means that you cannot freely choose the division of the voltage divider, 
although the opposite had been stated on diy!
...and I made the mistake when simulating the circuit.
Then and only then Rl/Rl+Ru ~ Rl/Ru
I did the simuls again, and used a Ru=56K + 4.7K NTC,Rl 1k divider instead
of 1K+83.3, 1k.
and a 60.7k ,1k lin tempco divider, this gives good compensation though I
must say the tempco is
little superior, but maybe one could live with it. A cheap compensation is
better than no compensation. And the whole discussion has left the tempco of
the caps aside,
so I guess, a residual tempco of 100ppm won't be too anoying since the cap has 
one of equal magnitude. (If we are lucky with opposite sign :)
All the ASM-1 owners in search of Tempco resistors can simply 
put in an 4.7k NTC in series with the 56k in the divider. 
(or lower it to 51K does not make a big difference)
Same for all the unlucky persons who, like me, don't have a source of good 
tempco resistors, or don't want to spend time and money.

>So we can see that in both cases the needed temparature curve
>of Rl or Ru is not linear at all, also the first derivations
>are not linear.

With the above "trick" we linearize it...
If Rl<<Ru they are almost linear.

>But Rl(T) can be aproximated by a linear function with very little
>error, e.g. between -40C and 110C only 0.15% error:
>Rl(T) ~ R0+r*T , R0 is often measured at room temperature 27C and T is
>in this case not the absolute temperature, but the difference to room
>temperature.  That is the famous resistor with linear positive tempco
>of ~3300 ppm at room temp. Which can be obtained by wirewound resistors
>which are very hard to get.
>Now the other leg :
>Ru(T) can not be well aproximated by a linear function, e.g. the error
>is 6% between -40C and 110C. A negative tempco would be required, we don't
>have any device with such a negative linear behaviour.

Its not negative linear its 1/T thats a difference.
What we have, (still Rl<<Ru assumed) is Rl*q/K*T*Ru.
Here we see that if Ru has an "inversely proportional with T" dependancy the 
temperature term cancels out.

>But: As Rene proposed, we have NTC-thermistors, they are cheap and easy to
>get. Some suppliers also have low tolerance types which are a bit more
>expensive (RS Components, I think).
>As Rene said, the behaviour of a NTC is exponential:
>Maybe with some non ideal resistance R0.

I'd just say: R(T) = Rnull * exp (-Eg*K*T/q)
Eg being the gap difference of the semiconductor material, 
and the interesting cheapos, all are made of Si. 
Rnull is physically bogus, but the mathematically extrapolated value for R
at 0K.
The K2 in your equation would be like ln(1.04) = 0.04.

>This seems to be a completely different function than the required
>             1
>Ru(T)= (------------- - 1) * Rl.
>           a*T*ln(2)
>But this is not the question.
>The Question is: how good does it approximate the wanted behaviour?
>We could also add some fixed value resistor in parallel or series
>or both to get the wanted behaviour. This is what Rene proposed.

Well a 1/T and a exp(-K2*T) are close, they go to R+, and they are round, 
smooth curves. By proper scaling one can really get close.
And my initial proposal is pretty close, NTC value times 11 (or 12) =
Resistor in series.

>Now, I'm really courious what K1 and K2 where, when I measured
>my NTC. I've got the plot at home.
I used a programm called "Matheass", I use it since I was in school.
It can do single log plots, but you could use single log paper, should receive 
a straight line, the steepness of the line is your exponent.
Maybe you got some maths program, or try microsaft excel.

>Rene, do you have values for K1, K2 and R0 ?

See above, but the 0.04 is not only from my experiments, but from a book.
I just wanted to be sure. 
But one could change the equation to R(T) = R(@ 25°) exp (-0.04 (25° - T))
With T in celsius.
The K1 value is bogus anyway since at 0K semiconductors are ideal isolators.

>Even if it turns out, that the NTC method won't work under all conditions,
>it could be good enough to compensate an expo-vca etc.
>Maybe I was completely wrong, and NTC is THE solution for the
>compensation problem.

*THE* solution is the compensation amp. in my VCO (see website)!
Something like a CEM3340 in the discrete realms. 
I can put my thumb on it, with no descale !!
The inherent thermal matching of the diff amp I use for compensation, 
and the expo trannie pair can't be reached with tempcos. 
These are only some micrometers apart, on the same chip.
So the temp gradients are really really small.
And the cancellation is very good!

But NTCs are surely an option for a filter, a VCA, and I think a VCO too, 
(at least when you consider tempcos of the caps and all other sources of
drift we have not covered )
at least better than no compensation at all. And where space is short.
With limited temperature range of say 15 to 35 deg. they should work very well.
I mean by "well" I got something like max 0.5% derivation from the ideal
curve in the simuls.
That would be something like 17ppm.

>Ice water and boiling water is a good idea.
>It should be possible to get temperatures in between by mixing
>hot and cold water, with specific heat in mind. Energy=T*K*mass.
>After mixing, the energy should be the sum of both energies.
>On the othrt hand, digital thermometers are cheap these days...
>I didn't have one so i used that trick.

A 1N4148 makes a good thermo sensor btw. the forward drop with constant 
current changes about 2mV per degree. Calibration can be made with ice and
boiling water.

Back to the topic, perhaps one of the ASM-1 community could try it out, 
since its really a quick hack for you! And tell the results.
Thanks in advance.

It'll take a while till I can try it out since my VCOs have different
topology due to 
to my "compensation diff-amp". But when I do, I post the results.

=(uzs159 at uni-bonn.de)========================
             ,          : 
|") [" |\ | ["          :   This space 
|"\ [_ | \| [_          :   intentionally   
                        :   left blank

More information about the Synth-diy mailing list