Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
en:iot-open:practical:hardware:itt:avr:thermistor [2025/08/26 08:15] ingmar05en:iot-open:practical:hardware:itt:avr:thermistor [2025/09/02 09:45] (current) raivo.sell
Line 1: Line 1:
 +<pagebreak>
 ====== Thermistor ====== ====== Thermistor ======
  
 ===== Theory ===== ===== Theory =====
  
-[{{  ::examples:sensor:thermistor:ntc.jpg?300|NTC thermistor}}]+[{{  ::examples:sensor:thermistor:ntc.jpg?200|NTC thermistor}}]
  
-A thermistor is a type of resistor which resistance varies with temperature. There are two types of thermistors: positive temperature coefficient of resistance and negative temperature coefficient of resistance. The resistance of thermistors with positive temperature coefficient of resistance is increasing when the temperature grows and with negative the resistance decreases. The respective abbreviations are PTC (//positive temperature coefficient//) and NTC (//negative temperature coefficient//).+A thermistor is a type of resistor whose resistance varies with temperature. There are two types of thermistors: positive temperature coefficient of resistance and negative temperature coefficient of resistance. The resistance of thermistors with positive temperature coefficient of resistance increases when the temperature growsand with negative coefficient, the resistance decreases. The respective abbreviations are PTC (//positive temperature coefficient//) and NTC (//negative temperature coefficient//).
  
-The thermistors resistances' dependence of the temperature is not linear and this complicates the usage of it. For accurate temperature measurements in wider temperature flotation the Steinhart-Hart third-order exponential equation is used as the thermistors resistance is linear only in small temperature range. The following simplified Steinhart-Hart equation with B-parameter exists for NTC thermistors:+The thermistor's resistance dependence on temperature is not linearand this complicates its usage. For accurate temperature measurements in wider temperature fluctuations, the Steinhart-Hart third-order exponential equation is used as the thermistor'resistance is linear only in small temperature range. The following simplified Steinhart-Hart equation with B-parameter exists for NTC thermistors:
  
  
-{{:examples:sensor:thermistor:sensor_ntc_equation.png?130|The relation between temperature and resistance of a NTC thermistor.}}+{{:examples:sensor:thermistor:sensor_ntc_equation.png?100|The relation between temperature and resistance of a NTC thermistor.}}
  
 where:\\ where:\\
Line 17: Line 18:
   * B   - parameter B.   * B   - parameter B.
  
-Parameter B is a coefficient, which is usually given in the datasheet of the thermistor. But it is stable enough constant only in a certain ranges of temperature, for example at ranges 25–50 °C or 25–85 °C. If the temperature range measured is wider , the data sheet should be used for retrieving the equation.+Parameter B is a coefficient, which is usually given in the datasheet of the thermistor. But it is stable enoughconstant only in a certain range of temperature, for example, in the ranges 25–50 °C or 25–85 °C. If the temperature range measured is wider, the data sheet should be used for retrieving the equation.
  
    
-Usually a voltage-divider is used for measuring the resistance of a thermistor, where one resistor is replaced with a thermistor and the input voltage is constant. The output voltage of the voltage-divider is measured, which changes according to the change of the resistance of the thermistor. If the voltage is applied, current goes through the thermistor which heats up the thermistor due to thermistors resistance and therefore alters again the resistance. The  fault caused by heating up of the thermistor can be compensated with calculations, but it is easier to use a thermistor that has higher resistance and therefore heats up less. +Usuallya voltage divider is used for measuring the resistance of a thermistor, where one resistor is replaced with a thermistorand the input voltage is constant. The output voltage of the voltage-divider is measured, which changes according to the change in the resistance of the thermistor. If the voltage is applied, current goes through the thermistorwhich heats up the thermistor due to the thermistor'resistance and therefore alters the resistance again. The fault caused by the heating up of the thermistor can be compensated with calculations, but it is easier to use a thermistor that has higher resistance and therefore heats up less. With restricted resources and with fewer demands on accuracy, previously calculated charts and tables for temperatures are used. Generallythe tables have ranges of temperatures and respective values of resistance, voltageor analogue-digital converters. All exponential calculations are already doneand the user needs to only find the correct row and read the temperature given. 
- +
-With restricted resources and with less demands on accuracy, previously calculated charts and tables for temperatures are used. Generally the tables have ranges of temperatures and respective values of resistance, voltage or analogue-digital converters. All exponential calculations are already done and the user needs to only find the correct row and read the temperature given. +
  
  
 ===== Practice ===== ===== Practice =====
  
-The Sensor module of the HomeLab is equipped with NTC type thermistor which has 10 kΩ nominal resistance. At temperatures 25-50 °C the parameter B of the thermistor is 3900. One pin of the thermistor is connected to supply and the other one is connected to the analogue-digital converter (HomeLab II channel 2 and HomeLab III channel 14). A typical 10 kΩ resistor is also connected with the same pin of the microcontroller and earth and together with the thermistor forms a voltage divider. Since we are dealing with NTC thermistor, which resistance decreases as the temperature grows; the output voltage of the voltage divider is increasing repectively with growing temperature.+The Sensor module of the HomeLab is equipped with an NTC-type thermistorwhich has 10 kΩ nominal resistance. At temperatures 25-50 °Cthe parameter B of the thermistor is 3900. One pin of the thermistor is connected to the supplyand the other one is connected to the analogue-digital converter channel two. A typical 10 kΩ resistor is also connected with the same pin of the microcontroller and earthand together with the thermistor forms a voltage divider. Since we are dealing with an NTC thermistor, whose resistance decreases as the temperature increases, the output voltage of the voltage divider increases with growing temperature.
  
-While using the AVR it is practical to use a conversion table of values of temperature and analogue-digital converter to find the correct temperature. It is wise to find corresponding value of analogue-digital converter for each temperature degree of desired range of temperature because reverse table will be too large due to the amount of 10 bit ADC values. It is recommended to use any kind of spreadsheet program (MS Excel, LibreOffice Calc, etc.) to make the table. //Steinhart-Hart// formula which is customized for the mentioned NTC thermistors able'to find the resistance of the thermistor which corresponds to the temperature. Derived from the resistance, is possible to calculate the output voltage of the voltage divider and using this output voltage to calculate the value of the ADC. Calculated values can be inserted to the program as follows:    +While using the AVRit is practical to use a conversion table of values of temperature and an analogue-digital converter to find the correct temperature. It is wise to find the corresponding value of an analogue-digital converter for each temperature degree of the desired range of temperature because the reverse table will be too large due to the amount of 10-bit ADC values. It is recommended to use any kind of spreadsheet program (MS Excel, LibreOffice Calc, etc.) to make the table. //Steinhart-Hart// formulawhich is customized for the mentioned NTC thermistors, is able to find the resistance of the thermistor that corresponds to the temperature. Derived from the resistance, it is possible to calculate the output voltage of the voltage divider and use this output voltage to calculate the value of the ADC. Calculated values can be inserted into the program as follows:    
  
  
Line 35: Line 34:
 // Table for converting temperature values to ADC values // Table for converting temperature values to ADC values
 // Every element of the array marks one Celsius degree // Every element of the array marks one Celsius degree
-// Elements begin from -20 degree and end at 100 degree+// Elements begin from -20 degrees and end at 100 degrees
 // There are 121 elements in the array // There are 121 elements in the array
 const signed short min_temp = -20; const signed short min_temp = -20;
Line 56: Line 55:
 </code> </code>
  
-Following algorithm may be used to find the temperature which corresponds to the parameters of the ADC: +The conversion table and function are already in the library of the HomeLab. In the librarythe conversion function is named //thermistor_calculate_celsius//An example program of this exercise is a thermometer, which measures temperature in the Celsius scale and displays it on an LCD.  
- +
-<code c> +
-// Converting the ADC values to Celsius degrees: +
-signed short thermistor_calculate_celsius(unsigned short adc_value) +
-+
- signed short celsius; +
- +
- // Covering the table backwards: +
- for (celsius = max_temp - min_temp; celsius >= 0; celsius--) +
-+
- // If the value in the table is the same or higher than measured  +
- // value, then the temperature is at least as high as the  +
- // temperature corresponding to the element +
- if (adc_value >= conversion_table[celsius])) +
-+
- // Since the table begins with 0 but values of the elements  +
- // from -20, the value must be shifted +
- return celsius + min_temp; +
-+
-+
- +
- // If the value was not found the minimal temperature is returned +
- return min_temp; +
-+
-</code> +
-The algorithm searches range from the table where the ADC value is and acquires the lower ranking number of this range. The ranking number marks degrees, adding the primary temperature to this a temperature with accuracy of 1 degree is reached. +
- +
-This conversion table and function are already in the library of the HomeLab, therefore there is no need to write them for this exercise. In the library the conversion function is named //thermistor_calculate_celsius//Must be considered, that the conversion is valid only when used on the thermistor on the Sensors module of the HomeLab. For using other thermistors, a conversion table needs to be created and more complex function described in the manual of the library must be used. Example program of this exercise is a thermometer, which measures temperature in Celsius scale and displays it on an alphabetical LCD.  +
    
  
 <code c> <code c>
-// Example program of the thermistor of Sensors module 
 // The temperature is displayed on the LCD // The temperature is displayed on the LCD
 #include <stdio.h> #include <stdio.h>
Line 96: Line 66:
 #include <homelab/delay.h> #include <homelab/delay.h>
  
-// Robotic Homelab II+// Sensor
 //#define ADC_CHANNEL 2 //#define ADC_CHANNEL 2
    
-// Robotic Homelab III 
-#define ADC_CHANNEL 14 
- 
 // Main program // Main program
 int main(void) int main(void)
Line 112: Line 79:
  lcd_gfx_init();  lcd_gfx_init();
    
- // Clearing the LCD and setting backlight+ // Clearing the LCD and setting the backlight
  lcd_gfx_clear();  lcd_gfx_clear();
         lcd_gfx_backlight(true);         lcd_gfx_backlight(true);
Line 130: Line 97:
  value = adc_get_average_value(ADC_CHANNEL, 4);  value = adc_get_average_value(ADC_CHANNEL, 4);
  
- // Converting the values of ADC into celsius scale+ // Converting the values of ADC into the Celsius scale
  temperature = thermistor_calculate_celsius(value);  temperature = thermistor_calculate_celsius(value);
  
- // Converting the temperature in to text+ // Converting the temperature into text
  // To display the degree sign, the octal variable is 56  // To display the degree sign, the octal variable is 56
  sprintf(text, "%d\56C   ", temperature);  sprintf(text, "%d\56C   ", temperature);
Line 146: Line 113:
 } }
 </code> </code>
 +
 +==== Task to be implemented ====
 +  - Switch every 3 seconds the unit between Kelvin (K), Fahrenheit (F), and Celsius (C). The temperature must be displayed in correct values, units, and symbols.
 +
en/iot-open/practical/hardware/itt/avr/thermistor.1756196112.txt.gz · Last modified: 2025/08/26 08:15 by ingmar05
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0