Linearizing the YSI 44030 NTC thermistor for the CMP3000 Analog Input Board

Some things just stick in your memory – like the part number of a thermistor, for instance…  well, maybe not for you, but for me.  Yikes.

In second year, the development of the CMP3000 control system was in full swing.  Mike Stasenski was working on the CMP3521 Analog Input Board.  It was based on the then-relatively-new MC68705U3 single-chip MCU.  It was pretty limited in capability, but of course Mike was (and is) a very capable programmer, able to wring every last cycle out of an MCU.

One challenge was the linearization of the NTC thermistor that was to be used to measure temperature.  It was a standard NTC curve – a cubic of the inverse of the natural logarithm of the temperature in degrees K, as I recall.  It gets a little more complex when you measure the output voltage when it’s paired with a pull-up resistor. The idea is to pull up through a known, stable, fixed resistor to a known reference voltage, and use that same reference voltage for the analog-to-digital conversion.  This would yield a true ratiometric measurement, which should eliminate supply variations.

So, I was asked to figure out what the best pull-up resistance value would be, to optimize for room temperature of about 20C.

Hmm, that was a challenge, but I felt like I was up to it.  Well, I symbolically calculated the formula for the output voltage, given a pull-up resistance and supply, then differentiate it so as to figure out the slope and the maxima.  I went to my first-year calculus professor, Dr. D. W. Trim, to get his advice on solving the problem.  It ended up being something like a 4×4 matrix in the powers of the inverse of the natural log – which I had to figure out the determinant of, to get the zero point.

In the meantime, I used the BASIC interpreter on the Motorola Exorciser to run calculations of the output values, checking the curve fitting, and the output voltage for various pull-up resistors.  Since the Exorciser was in use constantly by the CMP3000 team, I had to code my programs on paper, then hastily type them in during their coffee break, saving it to run during lunch.  And run it did, often taking the full hour and then some to complete.

Once I had the solution equation, I had to process it in BASIC to calculate the correct value, then check to ensure that it was correct.  I printed yards and yards of form-feed printed paper of charts, graphs, and numbers.  I’m sure that I tested the patience of everyone who wanted to get back to work at the end of lunch!

The output of my exhaustive calculations were multiple look-up tables, each optimized for an area of operation, and a careful calculation of the worst case error at each point.  We incorporated the concept of “degrees Vansco” into the code, where a simple linear relationship would bring it over to Celsius.

Finally, after much calculations and work, I came up with the exact value that would optimize the voltage: 3741 Ω.  Yup, cross checked, checked on both sides, that was the value.  Ed Van Humbeck (company president) ordered some low tempco resistors with this value…  and as he did, he remarked, “it would be funny if that was just the value at 20C”.   My jaw dropped.  I went off and checked the charts.  Sure enough, the value of the YSI 44030 at 20C was 3748 Ω, close enough that it was just cumulative BASIC calculation error.  Ha ha, the joke was on me!

By the way, for the life of the CMP3000, and beyond, the thermistor used to measure temperature on that product was the YSI 44030… and the pull up used was exactly 3741 Ω.   We never bothered to change it.