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
et:examples:sensor:thermistor [2012/06/09 10:58] raivo.sellet:examples:sensor:thermistor [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +<pagebreak>
 ====== Termistor ====== ====== Termistor ======
  
-//Vajalikud teadmised: [HW] [[et:hardware:homelab:sensor]], [HW] [[et:hardware:homelab:digi]], [ELC] [[et:electronics:voltage_divider]], \\ [AVR] [[et:avr:adc]], [LIB] [[et:software:homelab:library:adc]], [LIB] [[et:software:homelab:library:module:lcd_graphic]], \\ [LIB] [[et:software:homelab:library:module:sensor]]//+//Vajalikud teadmised: 
 +[HW] [[et:hardware:homelab:digi]],  
 +[ELC] [[et:electronics:voltage_divider]],  
 +[AVR] [[et:avr:adc]],  
 +[LIB] [[et:software:homelab:library:adc]], [LIB] [[et:software:homelab:library:module:lcd_graphic]], [LIB] [[et:software:homelab:library:module:sensor]]//
  
 ===== Teooria ===== ===== Teooria =====
  
-[{{  :examples:sensor:thermistor:sensor_thermistor_ntc_picture.jpg?80|NTC termistor}}]+[{{  :examples:sensor:thermistor:ntc.jpg?300|NTC termistor}}]
  
 Termistor on takisti, mille takistus muutub temperatuuriga. Termistore on kahte liiki: positiivse ja negatiivse temperatuuri koefitsiendiga. Positiivse koefitsiendiga termistori takistus temperatuuri tõustes kasvab ja negatiivsel väheneb. Vastavad lühendatud ingliskeelsed nimed on neil PTC (//positive temperature coefficient//) ja NTC (//negative temperature coefficient//). Termistor on takisti, mille takistus muutub temperatuuriga. Termistore on kahte liiki: positiivse ja negatiivse temperatuuri koefitsiendiga. Positiivse koefitsiendiga termistori takistus temperatuuri tõustes kasvab ja negatiivsel väheneb. Vastavad lühendatud ingliskeelsed nimed on neil PTC (//positive temperature coefficient//) ja NTC (//negative temperature coefficient//).
Line 23: Line 28:
  
 Piiratud ressurssidega ja suurt täpsust mittenõudvates rakendustes kasutatakse eelnevalt välja arvutatud temperatuuri ja takistuse vahelise sõltuvuse tabelit. Tabelis on üldjuhul kirjas kindla vahemikuga temperatuurinäitude vastavus anduri takistuse, pinge või analoog-digitaalmuunduri väärtusega. Tabeli puhul on kogu eksponentsiaalne arvutus eelnevalt ära tehtud ja programmis tuleb vaid mõõdetud parameetrile vastav rida üles otsida ja temperatuur välja lugeda. Piiratud ressurssidega ja suurt täpsust mittenõudvates rakendustes kasutatakse eelnevalt välja arvutatud temperatuuri ja takistuse vahelise sõltuvuse tabelit. Tabelis on üldjuhul kirjas kindla vahemikuga temperatuurinäitude vastavus anduri takistuse, pinge või analoog-digitaalmuunduri väärtusega. Tabeli puhul on kogu eksponentsiaalne arvutus eelnevalt ära tehtud ja programmis tuleb vaid mõõdetud parameetrile vastav rida üles otsida ja temperatuur välja lugeda.
 +<pagebreak>
 ===== Praktika ===== ===== Praktika =====
  
-Kodulabori Andurite mooduli plaat on varustatud 10 kΩ nimitakistusega NTC tüüpi termistoriga. Temperatuuril 25-50 °C on termistori B-parameeter 3900. Termistori üks viik on ühendatud +5 V toitega ja teine mikrokontrolleri analoog-digitaalmuunduri kanaliga (viik PF2). Sama mikrokontrolleri viigu ja maaga on ühendatud ka tavaline 10 kΩ takisti, mis koos termistoriga moodustab pingejaguri. Kuna tegu on NTC termistoriga, mille takistus väheneb temperatuuri kasvades, siis samaaegselt tõuseb ka pingejaguri väljundpinge.+Kodulabori moodul on varustatud 10 kΩ nimitakistusega NTC tüüpi termistoriga. Temperatuuril 25-50 °C on termistori B-parameeter 3900. Termistori üks viik on ühendatud toitega ja teine mikrokontrolleri analoog-digitaalmuunduri sisendisse (Kodulabor II puhul kanal 2, Kodulabor III puhul kanal 14). Sama mikrokontrolleri viigu ja maaga on ühendatud ka takisti, mis koos termistoriga moodustab pingejaguri. Kuna tegu on NTC termistoriga, mille takistus väheneb temperatuuri kasvades, siis samaaegselt tõuseb ka pingejaguri väljundpinge.
  
-Temperatuuri leidmiseks on AVR-i peal otstarbekas kasutada temperatuuri ja analoog-digitaalmuunduri väärtuste teisendustabelit. Mõistlik on leida soovitud temperatuurivahemikust igale kraadile vastav analoog-digitaalmuunduri väärtus, sest vastupidine tabel läheb 10-bitise ADC väärtuste hulga tõttu liiga suureks. Tabeli tegemiseks on soovitatav kasutada mõnd tabelarvutuse programmi (MS Excel, Openoffice Calc vmt.). Eespool toodud NTC termistorite jaoks kohandatud Steinhart-Harti valemiga saab leida temperatuurile vastava termistori takistuse. Takistusest saab arvutada pingejaguri väljundpinge ning sellest omakorda ADC väärtuse. Leitud väärtused saab järgneval viisil programmi sisse kirjutada:+Temperatuuri leidmiseks on AVR-il otstarbekas kasutada temperatuuri ja analoog-digitaalmuunduri väärtuste teisendustabelit. Mõistlik on leida soovitud temperatuurivahemikust igale kraadile vastav analoog-digitaalmuunduri väärtus, sest vastupidine tabel läheb 10-bitise ADC väärtuste hulga tõttu liiga suureks. Tabeli tegemiseks on soovitatav kasutada mõnd tabelarvutuse programmi (MS Excel, LibreOffice Calc vmt). Eespool toodud NTC termistoride jaoks kohandatud Steinhart-Harti valemiga saab leida temperatuurile vastava termistori takistuse. Takistusest saab arvutada pingejaguri väljundpinge ning sellest omakorda ADC väärtuse. Leitud väärtused saab järgneval viisil programmi sisse kirjutada:
  
 <code c> <code c>
-// +// Temperatuuri ADC väärtuseks teisendamise tabel 
-// Temperatuuri ADC väärtuseks teisendamise tabel. +// Iga massiivi element tähistab ühte Celsiuse kraadi 
-// Iga massiivi element tähistab ühte Celsiuse kraadi. +// Elemendid algavad -20 kraadist ja lõpevad 100 kraadiga 
-// Elemendid algavad -20 kraadist ja lõpevad 100 kraadiga. +// Kokku on massiivis 121 elementi
-// Kokku on massiivis 121 elementi+
-//+
 const signed short min_temp = -20; const signed short min_temp = -20;
 const signed short max_temp = 100; const signed short max_temp = 100;
Line 55: Line 58:
 }; };
 </code> </code>
- 
-~~PB~~ 
  
 Et tabelist ADC väärtuse järgi temperatuur leida, võib kasutada järgmist algoritmi: Et tabelist ADC väärtuse järgi temperatuur leida, võib kasutada järgmist algoritmi:
  
 <code c> <code c>
-// +// ADC väärtuse teisendamine Celsiuse kraadideks
-// ADC väärtuse teisendamine Celsiuse kraadideks+
-//+
 signed short thermistor_calculate_celsius(unsigned short adc_value) signed short thermistor_calculate_celsius(unsigned short adc_value)
 { {
Line 74: Line 73:
  // mõõdetud tulemus, siis temperatuur on vähemalt  // mõõdetud tulemus, siis temperatuur on vähemalt
  // sama kõrge kui elemendile vastav temperatuur  // sama kõrge kui elemendile vastav temperatuur
 +
  if (adc_value >= conversion_table[celsius])  if (adc_value >= conversion_table[celsius])
  {  {
Line 89: Line 89:
 Algoritm otsib tabelist vahemikku, kuhu ADC väärtus jääb, ja saab teada selle vahemiku aluspiiri järjekorranumbri. Järjekorranumber tähistab kraade, sellele tuleb ainult algtemperatuur otsa liita ja nii saadaksegi 1 kraadi täpsusega temperatuur. Algoritm otsib tabelist vahemikku, kuhu ADC väärtus jääb, ja saab teada selle vahemiku aluspiiri järjekorranumbri. Järjekorranumber tähistab kraade, sellele tuleb ainult algtemperatuur otsa liita ja nii saadaksegi 1 kraadi täpsusega temperatuur.
  
-Toodud teisendustabel ja funktsioon on juba olemas Kodulabori teegis, nii et käesolevas harjutuses neid ise kirjutama ei pea. Teisendamise funktsioonil on teegis nimeks //thermistor_calculate_celsius//. Arvestama peab, et teisendus kehtib ainult Kodulabori Andurite moodulil asuva termistori kohta. Muu termistori kasutamiseks tuleb ise teisendustabel luua ja kasutada teegi juhendis kirjeldatud keerukamat funktsiooni. Harjutuse näidisprogrammiks on termomeeter, mis mõõdab temperatuuri Celsiuse kraadides ja kuvab seda alfabeetilisel LCD ekraanil. +Toodud teisendustabel ja funktsioon on juba olemas Kodulabori teegis, nii et käesolevas harjutuses neid ise kirjutama ei pea. Teisendamise funktsioonil on teegis nimeks //thermistor_calculate_celsius//. Arvestama peab, et teisendus kehtib ainult Kodulabori moodulil asuva termistori kohta. Muu termistori kasutamiseks tuleb ise teisendustabel luua ja kasutada teegi juhendis kirjeldatud keerukamat funktsiooni. Harjutuse näidisprogrammiks on termomeeter, mis mõõdab temperatuuri Celsiuse kraadides ja kuvab seda LCD ekraanil. 
  
-~~PB~~ 
  
 <code c> <code c>
-// +// Kodulabori termistori näidisprogramm 
-// Kodulabori Andurite mooduli termistori näidisprogramm. +// LCD ekraanil kuvatakse temperatuur kraadides
-// LCD ekraanil kuvatakse temperatuur kraadides+
-//+
 #include <stdio.h> #include <stdio.h>
 #include <homelab/adc.h> #include <homelab/adc.h>
Line 103: Line 100:
 #include <homelab/module/lcd_gfx.h> #include <homelab/module/lcd_gfx.h>
 #include <homelab/delay.h> #include <homelab/delay.h>
-//+ 
 +// Robootika Kodulabor II 
 +//#define ADC_CHANNEL 2 
 + 
 +// Robootika Kodulabor III 
 +#define ADC_CHANNEL 14 
 // Põhiprogramm // Põhiprogramm
-// 
 int main(void) int main(void)
 { {
Line 122: Line 124:
  lcd_gfx_goto_char_xy(1, 1);  lcd_gfx_goto_char_xy(1, 1);
  lcd_gfx_write_string("Termomeeter");  lcd_gfx_write_string("Termomeeter");
- 
  
  // ADC muunduri seadistamine  // ADC muunduri seadistamine
Line 128: Line 129:
  
  // Lõputu tsükkel  // Lõputu tsükkel
- while (true)+ while (1)
  {  {
  // Termistori pinge 4-kordselt ümardatud väärtuse lugemine  // Termistori pinge 4-kordselt ümardatud väärtuse lugemine
- value = adc_get_average_value(2, 4);+ value = adc_get_average_value(ADC_CHANNEL, 4);
  
  // ADC väärtuse kraadideks ümberarvutamine  // ADC väärtuse kraadideks ümberarvutamine
et/examples/sensor/thermistor.1339239487.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
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