Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Help designing a thermistor circuit

  1. Jan 30, 2009 #1
    I want to design a thermistor circuit to be sampled by a microcontroller using an 8 bit ADC, with a voltage reference of 2.55V, I know the following

    T (ºC) R(ohms)
    25 2815
    40 1200

    I am going to use a potential divider then use a linear approximation to measure the temperature. I have two problems, firstly I don't know how to calculate the resistance needed for the potential divider, and secondly how do I calculate from the linear approximation, should I make a line between the two points given ? Thanks in advance !
  2. jcsd
  3. Jan 30, 2009 #2


    User Avatar

    Staff: Mentor

    I'm impressed by this entry at wikipedia.org:


    Looks like a linear approximation won't be very accurate for you. Probably best to make a calibration look-up table, based on those equations, and on some measurements by you. Do they have a calibration curve in the datasheet for your thremistor?
  4. Jan 30, 2009 #3
    Hey, I looked at that entry in wikipedia but the linear approximation did not seem to work for me, I have done,

    gradient k=(2815-1200)/(25-40)=107.67

    but k*25 does not equal 2815, am I making a stupid mistake here? I need to use a linear approximation, how would I go about calculating the resistance value for the potential divider ?
  5. Jan 30, 2009 #4


    User Avatar

    Staff: Mentor

    Well, first you would plot the resistance versus temperature graph -- are you only intersted in temps between 25C and 40C? What is the temperature range you want to cover? Also, what is the *tolerance* of the thermistor over the temperature range you want? If it is +/-10% from unit to unit, you will need to include that in your design (so the reading does not top out or bottom out due to manufacturing variations in the thermistors).

    The job of your circuit will be to translate something about the thermistor resistance in that target resistance range, into the voltages 0-2.55V. You will most likely use an opamp to do this, probably running between +/-5V or +/-12V with appropriate output clamping. You could also maybe use a more expensive single-supply CMOS opamp, running just between 0V and 5V.

    Is the thermistor resistance dependent on the current you pass through it, or is it just dependent on temperature. If there is a "best" current, make that current with an opamp, and buffer the voltage across the thermistor with another opamp. Then process that buffered voltage with an offset subtractor and a scaling stage, to get you to what you want into your ADC.

    If there is a wide tolerance on the thermistors, you can consider doing a calibration step as part of bringing up the circuit, either in the analog circuitry ouside, or in the uC after the ADC.

    Show us what you come up with.
  6. Jan 30, 2009 #5
    Hey, thanks for the reply. I am only interested in temperatures between 25 and 40 degrees. Is there a way to do it without an op-amp as I only have a microcontroller with an 8 bit ADC. I have just plotted the linear approximation in matlab, I have uploaded the file.

    edit: the thermistor is only dependent of the temperature.

    Attached Files:

  7. Jan 30, 2009 #6


    User Avatar

    Staff: Mentor

    What do you mean you only have an ADC? Does it already include the sample-and-hold circuit that feeds into most ADCs? Or is it on the uC itself?

    To do the offset, you will need to have a negative supply available. Do you have that?

    If you don't need full 8-bit resolution, you can just bias it with a resistor that gives you 2.55V when the thermistor is max resistance, and do the offset in your uC.

    I have to bail for tonight. Hopefully somebody else can pick this up with you if you still have questions.
  8. Jan 30, 2009 #7
    The ADC includes a sample-and-hold circuit and I do have a negative supply available.

    I don't understand what you mean by this...
  9. Jan 31, 2009 #8
    Do you have the part number of the thermistor?
  10. Jan 31, 2009 #9
    no, all the info I was given is listed above.
  11. Jan 31, 2009 #10
    For a my old design I've to retrieve the temperature from a NTC thermistor using a PIC microcontroller.
    I've solved it by sampling the NTC characteristics in several point (10 interval from 0 to 150 °C) and after that I've calculated the linear approximation coefficient for every interval.
    To obtain the measured temperature then I've just to measure the thermistor voltage and then find the right sub-interval, after that by using the linear interpolation formula (with the right coefficient) I'm was able to retrieve the estimated temperature. Overall error was less than 1%.

    Hope it help

  12. Jan 31, 2009 #11
    thanks a lot, your response has helped me. I have the linear coefficient for my desired interval, but how did you calculate the resistance to be connected to the thermistor ? Also, how did you calculate the error in the estimation? Thanks.
  13. Jan 31, 2009 #12

    I couldn't find any data sheet even close to the values you posted and only 2 points cannot define a curve so this solution is purely a guess. As Berkeman said, thermistors are not very linear and your linear approximation will not be very accurate. I did quick attempt at a simple network to linearize it a little.

    To the +5V supply connect the thermistor and a 5.1 k resistor in parallel. To the other side of the thermistor and 5.1 k resistor connect a 430 ohm resistor to ground. Connect the input of the A/D converter to the junction between the two resistors and the thermistor. Program the microcomputer to divide the A/D output (0 to 255) by 3.825 to get temperature.
  14. Jan 31, 2009 #13


    User Avatar
    Staff Emeritus
    Science Advisor
    Homework Helper

    Thermistors follow an exponential curve fairly closely. You can use the 40ºC (T=313K) data to find To in this equation:

    \ \ \ R =2815\Omega \cdot e^{T_o \cdot (\frac{1}{T}-\frac{1}{298K})}

    (T is absolute temperature here)

    Or, equivalently, you could do a linear interpolation of ln(R) vs. 1/Tabsolute
  15. Jan 31, 2009 #14
    I had a similar design task a couple years ago: 8 bit AtoD, thermistor input measuring water temperature. There was insufficient resolution over the required temperature range at one end.

    I'm getting a little flustered, becaue I though I recalled using a bridge with a thermistor in one leg... In anycase, I was able to restore sufficient linearity, that the accuracy out of the ADC was obtained.
    Last edited: Feb 1, 2009
  16. Jan 31, 2009 #15
    A simple voltage divider may be enough to restore required linearity and resolution as both this

    [tex]V = V_{bias} \frac{R_{therm}}{R + R_{therm}}[/tex]
    and this
    [tex]V = V_{bias} \frac{R}{R + R_{therm}}[/tex]

    are themselves nonlinear in [itex]R_{therm}[/itex] .
    Last edited: Feb 1, 2009
  17. Feb 1, 2009 #16
    Thanks A LOT for this, but where does the number 3.825 come from ?
  18. Feb 1, 2009 #17
    rusty, you never did say how much temperature error is allowed in your output.
  19. Feb 1, 2009 #18
    I have been asked to calculate the error after I have built it. How would I go about calculating this ?
  20. Feb 1, 2009 #19
    I took the formula for resistance vs. temperature for thermistors, adjusted it to fit your points and calculated the resistor values to give a fairly well centered curve. Since the A/D presumably reads 2.55 V as 255, I multiplied the voltage by 100 at each temperature and divided by that temperature. Then I took the average of the quotients or 3.825 in an attempt to minimize error. This was not a rigorous solution and there are likely better ones.
  21. Feb 1, 2009 #20
    You require the tolerance of the thermistor to do this, for one. But you say you don't have a part number.

    Is this a one-off -- only one made? In this case you can arrive at error emperically by comparing it to another thermometer in the same bath.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook