Tuesday, 25 February 2014

thermistor - Simplest way to measure 98 to 140 Ohm range with an ADC?


I have a thermistor that should vary between 98 and 140 Ohm and am looking for the simplest circuit that will convert this into something meaningful for a 10 bit ADC in the 0-3.3V range.


Precision wise, 0.4 Ohm or so on average would be great, and let's just ignore the nonlinearity issue altogether. I'd rather save some circuitry than shoot for optimal results (and there will be a lookup table).


I have (only) +3.3V of input voltage, plenty of current, a dual op-amp that is hopefully useful somehow, and a bunch of resistors and some other crap. Suggestions?



Answer



The simplest way is to use a resistor pullup (or pulldown) matched to the thermistor range to achieve the maximum voltage range output. 140Ω / 98Ω is a ratio of 1.43. To get the maximum response with this being one of the resistors of a voltage divider, we want to divide that range in half, which means taking the square root of the ratio. Sqrt(1.43) = 1.20. This means the center value of the voltage divider should be when the thermistor is 1.20 times its minimum, which is also its maximum divided by 1.20, which is 117 Ω. The nearest common value of 120 Ω will be close enough to still give you basically the maximum possible output.


So now we have:




The R2-R1 voltage divider divide ratio will change as a function of temperature as R2 changes. C1 is there only to reduce noise. You know a thermistor just can't change that fast, so it will reduce some of the high frequency content that you know can't be real signal. In this case, it will start attenuating above around 250 Hz, which is well above what any ordinary thermistor can do.


The next step is to figure out what voltage range you will get. This is just solving the divider for the two extreme cases, which are 120/(120 + 98) and 120/(120 + 140). Multiplying these by the 3.3V input, we get 1.82 V and 1.52 V, for a total range of 293 mV.


If you just run the voltage divider output straight into the A/D input, then you will be using 8.9% of the range, or about 91 counts. If 1 part in 91 is good enough, then you don't need to do anything further.


To get better resolution, you can amplify this signal about the midpoint of half the supply voltage. To bring it to a full scale signal, you'd need a gain of 3.3V / 293mV = 11. It's good to leave some headroom and not force the opamp to go completely rail to rail, so a gain of 8 or so would be good. That would give you lots more A/D counts of the temperature range than the accuracy of the parts can support.


No comments:

Post a Comment

arduino - Can I use TI's cc2541 BLE as micro controller to perform operations/ processing instead of ATmega328P AU to save cost?

I am using arduino pro mini (which contains Atmega328p AU ) along with cc2541(HM-10) to process and transfer data over BLE to smartphone. I...