Thermistor

From RepRap
Revision as of 09:42, 9 January 2011 by AgeingHippy (talk | contribs) (Honeywell 100K Thermistor (135-104LAG-J01))
Jump to: navigation, search

Thermistors

Thermistors are resistors that change of resistance with a change in temperature. Good qualities of thermistors are a predictable, accurately known resistance value at every temperature in its operating range. The lowering, or rise, depends on the type of thermistor per degree Kelvin (or Celcius, if you prefer), this is called its coefficient. Positive thermal coefficient (PTC) will increase in resistance with an increase in temperature, negative ones (NTC) will decrease. But the formula in practice is not linear, so sometimes an accurate table of measurements is better than the linear formula. These measurements can usually be found in the datasheet that accompanies the thermistor.

Theory

You cannot directly measure resistance. To test the resistance, you can put a voltage on a wire and see how much current will run. Another alternative is to use it together with another resistor of a known value, and measure the potential (or voltage) between the resistors. This is what a multimeter does to be able to show you the (deduced) resistance. Remember that there usually is a dial on a multimeter, this allows you to select a range to measure in. This is because the value of the known resistor has to be varied to have the potential (voltage) be in a range that can be measured accurately.

This can best be explained by example: You have two resistors between 0 and 5V. The two resistors are 4.7K Ohm at the 5V side and 1K Ohm at the ground side. The two resistors act as what is known as a voltage divider. Between the resistors, the voltage is based on the ratio of the two resistances. If you have the 5V power source turned on, this means that the voltage will be: 5V - 5V * 4700/(4700+1000) = ~ 0.88 V. This is also the value you would measure with a multimeter/voltmeter. If you add a resistor to the mix that changes strongly with a change in temperature, this will affect the value of the voltage divider and the resulting voltage in between. This is because two parallel resistors of which one changes resistance, the total resistance of the total resistance will change as well.

If the thermistor is connected between the ground (0 Volts) and the middle of the two resistors, the value of resistance between the middle junction and the ground will be based on te following formula:

Rtotal = 1 / (1/R1 + 1/R2) = 1 / (1/1000 + 1/R2) = Rtotal

Rtotal is the resistance between 0 V and the middle junction. If Rtotal is know, based on the calculation of the voltage divider, you can deduce the resistance of the thermistor (R2).

Through algebraic manipulation you get the formula for R2: R2 = 1 / (1/1000 - 1/Rtotal)

RepRap Thermistors

Each thermistor has a variety of special values such as Beta and Rz value. A variety of thermistors you may encounter when building a RepRap are listed below, along with the appropriate information. These tables were calculated using this Python script.

EPCOS 100K Thermistor (B57540G0104F000)

  • Rz: 348394
// EPCOS 100K Thermistor (B57540G0104F000)
// Thermistor lookup table for RepRap Temperature Sensor Boards (http://make.rrrf.org/ts)
// Made with createTemperatureLookup.py (http://svn.reprap.org/trunk/reprap/firmware/Arduino/utilities/createTemperatureLookup.py)
// ./createTemperatureLookup.py --r0=100000 --t0=25 --r1=0 --r2=4700 --beta=4066 --max-adc=1023
// r0: 100000
// t0: 25
// r1: 0
// r2: 4700
// beta: 4066
// max adc: 1023
#define NUMTEMPS 20
short temptable[NUMTEMPS][2] = {
   {1, 841},
   {54, 255},
   {107, 209},
   {160, 184},
   {213, 166},
   {266, 153},
   {319, 142},
   {372, 132},
   {425, 124},
   {478, 116},
   {531, 108},
   {584, 101},
   {637, 93},
   {690, 86},
   {743, 78},
   {796, 70},
   {849, 61},
   {902, 50},
   {955, 34},
   {1008, 3}
};


RRRF 100K Thermistor

  • Rz: 337254
// Thermistor lookup table for RepRap Temperature Sensor Boards (http://make.rrrf.org/ts)
// Made with createTemperatureLookup.py (http://svn.reprap.org/trunk/reprap/firmware/Arduino/utilities/createTemperatureLookup.py)
// ./createTemperatureLookup.py --r0=100000 --t0=25 --r1=0 --r2=4700 --beta=3960 --max-adc=1023
// r0: 100000
// t0: 25
// r1: 0
// r2: 4700
// beta: 3960
// max adc: 1023
#define NUMTEMPS 20
short temptable[NUMTEMPS][2] = {
   {1, 929},
   {54, 266},
   {107, 217},
   {160, 190},
   {213, 172},
   {266, 158},
   {319, 146},
   {372, 136},
   {425, 127},
   {478, 119},
   {531, 111},
   {584, 103},
   {637, 96},
   {690, 88},
   {743, 80},
   {796, 71},
   {849, 62},
   {902, 50},
   {955, 34},
   {1008, 2}
};


RRRF 10K Thermistor

  • Rz: 29000
// Thermistor lookup table for RepRap Temperature Sensor Boards (http://make.rrrf.org/ts)
// Made with createTemperatureLookup.py (http://svn.reprap.org/trunk/reprap/firmware/Arduino/utilities/createTemperatureLookup.py)
// ./createTemperatureLookup.py --r0=10000 --t0=25 --r1=680 --r2=1600 --beta=3964 --max-adc=305
// r0: 10000
// t0: 25
// r1: 680
// r2: 1600
// beta: 3964
// max adc: 305
#define NUMTEMPS 19
short temptable[NUMTEMPS][2] = {
   {1, 601},
   {17, 260},
   {33, 213},
   {49, 187},
   {65, 170},
   {81, 156},
   {97, 144},
   {113, 134},
   {129, 125},
   {145, 117},
   {161, 109},
   {177, 101},
   {193, 94},
   {209, 86},
   {225, 78},
   {241, 69},
   {257, 59},
   {273, 46},
   {289, 28}
};



RS 10K Thermistor

Cache-R4840127-01.jpg
  • Beta: 3480
  • Rz: 29000
// Thermistor lookup table for RepRap Temperature Sensor Boards (http://make.rrrf.org/ts)
// Made with createTemperatureLookup.py (http://svn.reprap.org/trunk/reprap/firmware/Arduino/utilities/createTemperatureLookup.py)
// ./createTemperatureLookup.py --r0=10000 --t0=25 --r1=680 --r2=1600 --beta=3480 --max-adc=315
// r0: 10000
// t0: 25
// r1: 680
// r2: 1600
// beta: 3480
// max adc: 315
#define NUMTEMPS 20
short temptable[NUMTEMPS][2] = {
   {1, 922},
   {17, 327},
   {33, 260},
   {49, 225},
   {65, 202},
   {81, 184},
   {97, 169},
   {113, 156},
   {129, 145},
   {145, 134},
   {161, 125},
   {177, 115},
   {193, 106},
   {209, 96},
   {225, 87},
   {241, 76},
   {257, 64},
   {273, 50},
   {289, 29},
   {305, -45}
};

EPCOS 100K Thermistor (B57560G1104F)

// EPCOS 100K Thermistor (B57560G1104F)
// Made with createTemperatureLookup.py (http://svn.reprap.org/trunk/reprap/firmware/Arduino/utilities/createTemperatureLookup.py)
// ./createTemperatureLookup.py --r0=100000 --t0=25 --r1=0 --r2=4700 --beta=4092 --max-adc=1023
// r0: 100000
// t0: 25
// r1: 0
// r2: 4700
// beta: 4092
// max adc: 1023
#define NUMTEMPS 20
short temptable[NUMTEMPS][2] = {
   {1, 821},
   {54, 252},
   {107, 207},
   {160, 182},
   {213, 165},
   {266, 152},
   {319, 141},
   {372, 131},
   {425, 123},
   {478, 115},
   {531, 107},
   {584, 100},
   {637, 93},
   {690, 86},
   {743, 78},
   {796, 70},
   {849, 60},
   {902, 49},
   {955, 34},
   {1008, 3}
};


Honeywell 100K Thermistor (135-104LAG-J01)

You can find it here [Mouser]


// Honeywell 100K Thermistor (135-104LAG-J01)
// Made with createTemperatureLookup.py (http://svn.reprap.org/trunk/reprap/firmware/Arduino/utilities/createTemperatureLookup.py)
// ./createTemperatureLookup.py --r0=100000 --t0=25 --r1=0 --r2=4700 --beta=3974 --max-adc=1023
// r0: 100000
// t0: 25
// r1: 0
// r2: 4700
// beta: 3974
// max adc: 1023
#define NUMTEMPS 20
short temptable[NUMTEMPS][2] = {
{1, 916},
{54, 265},
{107, 216},
{160, 189},
{213, 171},
{266, 157},
{319, 146},
{372, 136},
{425, 127},
{478, 118},
{531, 110},
{584, 103},
{637, 95},
{690, 88},
{743, 80},
{796, 71},
{849, 62},
{902, 50},
{955, 34},
{1008, 2}
};


Thermistor Calculations

If you are using a non-standard thermistor, or you simply want more information on how they work, check these pages out. Do bear in mind that the PIC will not correctly calculate temperature if the resistance drops below 1K, so if yours does, stick a small resistance in series with the thermistor to ensure that the overall resistance remains above 1K.

Calculating Thermistor Beta / Rz Values

This is how you calculate the Beta and Rz values for a thermistor. You'll need this valuable if you plan on using a non-standard thermistor for sure. The page contains a javascript calculator to make things easy.

Read more here

Calculating PIC Temperatures

The PIC uses a capacitor and charges it through the thermistor. It sends the temperature back to the host as a timer reading. This page describes how it is calculated and how to choose the right capacitor.

Read more here