This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
et:examples:sensor:thermistor [2014/09/30 08:58] – raivo.sell | et:examples:sensor:thermistor [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ~~PB~~ | + | < |
====== Termistor ====== | ====== Termistor ====== | ||
- | //Vajalikud teadmised: | + | //Vajalikud teadmised: |
+ | [HW] [[et: | ||
+ | [ELC] [[et: | ||
+ | [AVR] [[et: | ||
+ | [LIB] [[et: | ||
===== Teooria ===== | ===== Teooria ===== | ||
- | [{{ : | + | [{{ : |
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// | 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// | ||
Line 24: | 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. | ||
+ | < | ||
===== Praktika ===== | ===== Praktika ===== | ||
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, | 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, | ||
- | 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 termistorite | + | 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 |
<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 56: | Line 58: | ||
}; | }; | ||
</ | </ | ||
- | |||
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 // | + | Toodud teisendustabel ja funktsioon on juba olemas Kodulabori teegis, nii et käesolevas harjutuses neid ise kirjutama ei pea. Teisendamise funktsioonil on teegis nimeks // |
<code c> | <code c> | ||
- | // | + | // Kodulabori termistori näidisprogramm |
- | // Kodulabori termistori näidisprogramm. | + | // LCD ekraanil kuvatakse temperatuur kraadides |
- | // LCD ekraanil kuvatakse temperatuur kraadides. | + | |
- | // | + | |
#include < | #include < | ||
#include < | #include < | ||
Line 109: | Line 107: | ||
#define ADC_CHANNEL 14 | #define ADC_CHANNEL 14 | ||
- | // | ||
// Põhiprogramm | // Põhiprogramm | ||
- | // | ||
int main(void) | int main(void) | ||
{ | { | ||
Line 128: | Line 124: | ||
lcd_gfx_goto_char_xy(1, | lcd_gfx_goto_char_xy(1, | ||
lcd_gfx_write_string(" | lcd_gfx_write_string(" | ||
- | |||
// ADC muunduri seadistamine | // ADC muunduri seadistamine | ||
Line 134: | 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 |