Take the 2-minute tour ×
Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

I'm trying to implement an electronic temperature sensor that gives a resistance value. The sensor is a Honeywell TD4.

In the datasheet, they give a table of values :

  • -40ºC => 1584Ω ±12Ω
  • -30ºC => 1649Ω ±11Ω
  • -20ºC => 1715Ω ±10Ω
  • -10ºC => 1784Ω ±9Ω
  • 0ºC => 1854Ω ±8Ω
  • +10ºC => 1926Ω ±6Ω
  • +20ºC => 2000Ω ±5Ω
  • +30ºC => 2076Ω ±6Ω
  • +40ºC => 2153Ω ±6Ω
  • +50ºC => 2233Ω ±7Ω
  • ... (up to 150ºC)

They give a quadratic equation for computing resistance given the temperature:

$$R_T = R_0 + (3.84×10^{-3}×R_0×T) + (4.94×10^{-6}×R_0×T^2)$$

  • where $R_T$ is the resistance at temperature R,
  • $R_0$, resistance at 0ºC and
  • T the temperature in ºC.

we now want to get this equation the other way around, i.e. having the temperature given the resistance: $$T = f(R_T)$$

As we wanted to reduce the equation to get only one $T$, we calculated the discriminant, so we get :

$$∆ = b^2-4ac = (3.84×10^{-3}×R_0)^2 -4×4.94×10^{-6}×R_0×R_0$$ $$∆ = (3.84×0.001×1854)×(3.84×0.001×1854)-(4×4.94×0.000001×1854×1854)$$ $$∆ = -17.236077350399988$$

It is negative, thus there is no real roots, only the complex ones...

But our problem is that we want to come with a formula up we can implement in a microcontroller to get the value with the best precision... But my mathematics skills from highschool are far behind (if I knew at that time that I would actually have to solve such an equation in the real world ;-)). I may be wrong in the way to extract $T$ from $R_T$'s formula. But then what could be the good way ?

While I don't have a solution, I'm implementing in the microcontroller a linear formula for each segment of the given table...

share|improve this question
The discriminant is $\Delta = b^2-4ac$ when the quadratic is in the form $ax^2+bx+c=0$, with zero on the other side. When you put your equation into this form, you'll find that $c$ is $R_0 - R_T$, not simply $R_0$. Then you can apply the quadratic formula as usual (though you'll probably get the same answer as @Tpofofn below). –  Rahul Sep 5 '12 at 3:36

2 Answers 2

up vote 2 down vote accepted

It is not necessary to solve for the discriminant because the LHS is not zero. I recommend that you take the following approach.

EDIT to illustrate completion of the square

  1. Factor $R_0$ out of the RHS and move to the LHS as $R_T/R_0$. $$R_T/R_0 = 1 + (3.84×10^{-3}×T) + (4.94×10^{-6}×T^2)$$
  2. Complete the square on the RHS. $$R_T/R_0 = 1 - \frac{(3.84×10^{-3})^2}{4(4.94×10^{-6})}+ \frac{(3.84×10^{-3})^2}{4(4.94×10^{-6})}+ (3.84×10^{-3}×T) + (4.94×10^{-6}×T^2)$$
  3. Move the extra constant to the LHS. $$R_T/R_0 - 1 + \frac{(3.84×10^{-3})^2}{4(4.94×10^{-6})}= \frac{(3.84×10^{-3})^2}{4(4.94×10^{-6})}+ (3.84×10^{-3}×T) + (4.94×10^{-6}×T^2)$$ $$R_T/R_0 - 1 + \frac{(3.84×10^{-3})^2}{4(4.94×10^{-6})}= \left(\frac{3.84×10^{-3}}{2(4.94×10^{-6})^\frac{1}{2}} + (4.94×10^{-6})^\frac{1}{2}×T\right)^2$$
  4. Take the square root of each side (be careful about which branch you choose (i.e. +/-)). (This should get rid of the $T^2$ term.) $$\frac{3.84×10^{-3}}{2(4.94×10^{-6})^\frac{1}{2}} + (4.94×10^{-6})^\frac{1}{2}×T = \sqrt{R_T/R_0 - 1 + \frac{(3.84×10^{-3})^2}{4(4.94×10^{-6})}} $$
  5. Solve for $T$. $$ (4.94×10^{-6})^\frac{1}{2}×T = \sqrt{R_T/R_0 - 1 + \frac{(3.84×10^{-3})^2}{4(4.94×10^{-6})}} - \frac{3.84×10^{-3}}{2(4.94×10^{-6})^\frac{1}{2}} $$ $$T = \frac{1}{(4.94×10^{-6})^\frac{1}{2}}\left(\sqrt{R_T/R_0 - 1 + \frac{(3.84×10^{-3})^2}{4(4.94×10^{-6})}} - \frac{3.84×10^{-3}}{2(4.94×10^{-6})^\frac{1}{2}}\right) $$

Also note that $R_T/R_0 must be > 0.25376518218$ which appears to hold from your posted data.

share|improve this answer
so following your advices I got: $R_0/R_T-1 = aT^2+bT$ where $a=4.94×10^{-6}$ and $b=3.84×10^{-3}$ but I don't get where you're going on step 4. I mean, if I do $\sqrt{aT^2+bT}$ I'll get a $\sqrt{T}$ which doesn't help, don't I? –  zmo Sep 4 '12 at 12:02
In step 2 you are supposed to add a constant to make the right side a perfect square. It is $\frac {b^2}{4a}$. Then the square root becomes $\sqrt{aT^2+bT+\frac {b^2}{4a}}=\sqrt a(T + \frac b{2a})$. But this still has you taking a square root of an expression every time you want a temperature-maybe not what you want to do. –  Ross Millikan Sep 4 '12 at 13:48
thank you a lot for your help, I'm definitely bad at that kind of maths. I had a hard time implementing it in python to validate the formula, but with the sane help of a colleague, we end up with something working. –  zmo Sep 6 '12 at 16:52

One approach is to fit the data in the other sense. For the data you give, Excel gives $T=2\cdot 10^{-5}R^2+.232R-345.9$. The data looks quite linear over this span-would a straight line over the whole range be accurate enough for you?

Added: that fit seems to be polluted with roundoff error due to the high resistance values. If you use kohm instead it works very well. The fit (over the range -40 to +150) is $T=-16.941*R^2+201.93*R-316.55$, which is within 1 degree over the whole range.

share|improve this answer
for the time being, I implemented a linear calculation for each domain given by the datasheet (the data I posted), which has been the easy solution. What I'm trying to find out now, is the general formula to compute temperature from the measured resistance. –  zmo Sep 6 '12 at 14:41
@zmo: I only typed in as many points as you posted. The fit I give will be accurate over that range. You could put all the data into Excel and ask for a quadratic trendline to get one over the whole range. –  Ross Millikan Sep 6 '12 at 15:18
I don't understand, I implemented it in python which is: def calculate_temp(R): return ((2e-5)*pow(R,2))+(.232*R)-345.9 and when I execute calculate_temp(2000) I expect 20ºC, whereas it returns 198.10000000000002 ... what would be wrong ? –  zmo Sep 6 '12 at 15:59
@zmo: I lost a minus sign (overlapped with the grid) on the quadratic term, so it should be $T=-2\cdot 10^{-5}R^2+.232R-345.9$ but that still gives $38.$ The fit is terrible and all the values are too high. The linear fit is not so bad: $T=0.1227R-227.55$ is within $4$ degrees except at the very ends. –  Ross Millikan Sep 6 '12 at 16:30
@zmo: I don't know if my edit will ping you, so here is a comment that will. –  Ross Millikan Sep 6 '12 at 16:50

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.