AD7793 — малошумящий 24-разрядный сигма-дельта АЦП с тремя дифференциальными аналоговыми входами. АЦП AD7793 предназначен для высокоточного измерения постоянного напряжения, может применяться для измерения напряжения термопар и других датчиков с выходным напряжением в несколько единиц или десятков мВ.
Более подробно об АЦП AD7793 можно узнать из — http://rcl-radio.ru/?p=128932
На базе АЦП AD7793 можно сделать высокоточный измеритель температуры термопары. Для примера в измерителе температуры будут применены наиболее популярные характеристики термопар ТХА и ТХК.
Термопара ТХА
- Тип: К
- Обозначение: ТХА
- Материал: хромель/алюмель
- Рабочая температура: -270…+1372°С
Термопара ТХК
- Тип: L
- Обозначение: ТХК
- Материал: хромель/копель
- Рабочая температура: -200…+800°С
Для компенсации температуры холодного спая будет использован цифровой датчик температуры DS18B20. Для предотвращения саморазогрева датчика, обращение микроконтроллера к датчику будет проводится один раз в 10 секунд. В состав измерителя входит плата разработчика Arduino Nano, дисплей LCD1602 с модулем I2C, одна тактовая кнопка, датчик температуры (моуль) DS18B20, АЦП AD7793.
Для точного измерения температуры термопары подсоединение термопары к измерителю должно быть через термокомпенсационный провод с характеристикой аналогичной термопаре.
Схема измерителя термопары
- Температура термопары с учетом температуры окружающей среды
- ЭДС термопары (без учета температуры окружающей среды)
- Тип термопары (выбор кнопкой ХА/ХК)
- Температура окружающей среды
#include <Wire.h> #include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1 #include <OneWire.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip #include <EEPROM.h> LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей OneWire ds(6); // Вход датчика 18b20 // AD7793 x16 Umax=73mV CH1_DIFF Fads=4.17Hz #define SCLK 2 #define CS 3 #define DIN 4 #define DOUT 5 #define AVDD_MONITOR 0b111 // CONF #define TEMP_SENSOR 0b110 // CONF #define CH1 0b000 // CONF #define CH2 0b001 // CONF #define CH3 0b011 // CONF #define BIPOLAR 0b00000000 // CONF #define UNIPOLAR 0b00010000 // CONF #define GAIN_1 0b000 // CONF #define GAIN_2 0b001 // CONF #define GAIN_4 0b010 // CONF #define GAIN_8 0b011 // CONF #define GAIN_16 0b100 // CONF #define GAIN_32 0b101 // CONF #define GAIN_64 0b110 // CONF #define GAIN_128 0b111 // CONF #define F_ADC_500 0b0001 // MODE #define F_ADC_250 0b0010 // MODE #define F_ADC_125 0b0011 // MODE #define F_ADC_62_5 0b0100 // MODE #define F_ADC_50_0 0b0101 // MODE #define F_ADC_39_2 0b0110 // MODE #define F_ADC_33_3 0b0111 // MODE #define F_ADC_19_6 0b1000 // MODE #define F_ADC_16_7 0b1001 // MODE #define F_ADC_12_5 0b1011 // MODE #define F_ADC_10_0 0b1100 // MODE #define F_ADC_8_33 0b1101 // MODE #define F_ADC_6_25 0b1110 // MODE #define F_ADC_4_17 0b1111 // MODE // XA K const float a[]{0,2.5173462*10,-1.1662878,-1.08336338,-8.9773540/10,-3.7342377/10,-8.6632643/100,-1.0450598/100,-5.1920577/10000}; const float a1[]{0,2.508355*10,7.860106/100,-2.503131/10,8.315270/100,-1.228034/100,9.804036/10000,-4.413030/100000,1.057734/1000000,-1.052755*pow(10,-8)}; const float a2[]{-1.318058*100,4.830222*10,-1.646031,5.464731/100,-9.6550715/10000,8.802193/1000000,-3.110810/100000000}; // XK L const float b[]{1.1573067/10000,1.5884573*10,4.0458554/100,0.3170064,0.1666128,5.146958/100,9.5288883/1000,1.0301283/1000,6.0654431/100000,1.5131878/1000000}; const float b1[]{7.2069422/1000,1.5775525*10,-0.2261183,9.4286756/1000,-3.5394655/10000,1.0050886/100000,-1.9323678/10000000,2.3816891/1000000000,-1.7130654*pow(10,-11),5.4857331*pow(10,-14)}; float temp_ds,u,u0,t_iz; unsigned long times=millis()+10000; int menu; void setup(){ Serial.begin(9600); pinMode(SCLK,OUTPUT);pinMode(CS,OUTPUT);pinMode(DIN,OUTPUT);pinMode(DOUT,INPUT); digitalWrite(SCLK,HIGH);digitalWrite(CS,HIGH);digitalWrite(DIN,HIGH); delay(100); reset(); write_byte(0x08,(0x20<<8)|F_ADC_4_17, 16);// MODE REGISTER write_byte(0x10,((BIPOLAR|GAIN_1)<<8)|0x90|AVDD_MONITOR, 16); // CONFIGURATION REGISTER write_byte(0x08,(0xC0<<8)|0x0A, 16);// MODE REGISTER System Zero-Scale Calibration write_byte(0x08,(0xE0<<8)|0x0A, 16);// MODE REGISTER System Full-Scale Calibration Serial.print("Stat ");Serial.println(read_byte(0x40,8),BIN);// STATUS REGISTER Serial.print("ID ");Serial.println(read_byte(0x60,8),BIN);// ID REGISTER Serial.print("Ofst ");Serial.println(read_byte(0x70,24));//OFFSET REGISTER Serial.print("ful ");Serial.println(read_byte(0x78,24));//OFULL-SCALE REGISTER write_byte(0x28,0x00, 8);// IO REGISTER pinMode(A0,INPUT_PULLUP); menu = EEPROM.read(0); lcd.init();lcd.backlight(); lcd.setCursor(5, 0);lcd.print(F("AD7793")); delay(1000);lcd.clear(); } void loop(){ // READ ADC ////////////////////////////////////////////////////////////////// write_byte(0x08,(0x20<<8)|F_ADC_4_17, 16);// MODE REGISTER write_byte(0x10,((BIPOLAR|GAIN_16)<<8)|0x90|CH1, 16); // CONFIGURATION REGISTER long adc = read_byte(0x58,24); u = (1170.00/0x800000*(adc-0x800000))/16; // BIPOLAR Serial.print("Data b_B ");Serial.println(adc-0x800000);//DATA REGISTER Serial.print("Data V_B ");Serial.println((1170.00/0x800000*(adc-0x800000))/16,3);//DATA REGISTER // DS18B20 if(millis()-times>10000){temp_ds = dsRead(0);times=millis();} // LCD /////////////////////////////////////////////////////////////////////// if(digitalRead(A0)==LOW){menu++;EEPROM.update(0,menu);} if(menu>1){menu=0;} lcd.setCursor(0, 1);lcd.print(u,3);lcd.print("mV "); lcd.setCursor(10, 1);lcd.print(temp_ds,1);lcd.print(char(223)); lcd.print("C "); if(menu==0){txa(); lcd.setCursor(13,0);lcd.print("TXA");} if(menu==1){txk(); lcd.setCursor(13,0);lcd.print("TXK");} lcd.setCursor(0, 0); if(t_iz==-1000){lcd.print("LOW ");} else if(t_iz==10000){lcd.print("HIGH ");} else{lcd.print(t_iz,2);lcd.print(char(223)); lcd.print("C "); } delay(10); } void write_byte(byte reg, long data, int bit_){ digitalWrite(CS,LOW); for(int i = 7; i >= 0; i--){ digitalWrite(SCLK,LOW); digitalWrite(DIN, (reg >> i) & 1); digitalWrite(SCLK,HIGH); } for(int i = bit_-1; i >= 0; i--){ digitalWrite(SCLK,LOW); digitalWrite(DIN, (data >> i) & 1); digitalWrite(SCLK,HIGH); } digitalWrite(CS,HIGH); } long read_byte(byte reg, int bit_){ digitalWrite(CS,LOW); while(digitalRead(DOUT)!=LOW); for(int i = 7; i >= 0; i--){ digitalWrite(SCLK,LOW); digitalWrite(DIN, (reg >> i) & 1); digitalWrite(SCLK,HIGH); } while(digitalRead(DOUT)!=LOW); long data_out=0; long dat; for(int i = bit_-1; i >= 0; i--){ digitalWrite(SCLK,LOW); digitalWrite(SCLK,HIGH); dat = digitalRead(DOUT); data_out |= (dat<<i); } digitalWrite(CS,HIGH); return data_out; } void reset(){ digitalWrite(CS,LOW); for(int i = 31; i >= 0; i--){ digitalWrite(SCLK,LOW); digitalWrite(DIN, HIGH); digitalWrite(SCLK,HIGH); } digitalWrite(CS,HIGH); } float dsRead(byte x) { byte data[2], addr[8][8], kol = 0; while (ds.search(addr[kol])) { // поиск датчиков, определение адреса и кол-ва датчиков kol++; } ds.reset_search(); // Сброс поиска датчика ds.reset(); // Инициализация, выполняется сброс шины ds.select(addr[x]); // Обращение к датчику по адресу ds.write(0x44, 0); // Измерение температуры с переносом данных в память ds.reset(); // Инициализация, выполняется сброс шины ds.select(addr[x]); // Обращение к датчику по адресу ds.write(0xBE); // Обращение памяти data[0] = ds.read();// Чтение памяти byte low data[1] = ds.read();// Чтение памяти byte high float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод } void txa(){u0=u+temp_ds*0.0400;// окружающая температура 0.0400 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TXA(K) if(u0<0){t_iz=(a[0]*pow(u0,0))+(a[1]*pow(u0,1))+(a[2]*pow(u0,2))+(a[3]*pow(u0,3))+(a[4]*pow(u0,4))+(a[5]*pow(u0,5))+(a[6]*pow(u0,6))+(a[7]*pow(u0,7))+(a[8]*pow(u0,8));} if(u0>=0&&u0<=20.64){t_iz=(a1[0]*pow(u0,0))+(a1[1]*pow(u0,1))+(a1[2]*pow(u0,2))+(a1[3]*pow(u0,3))+(a1[4]*pow(u0,4))+(a1[5]*pow(u0,5))+(a1[6]*pow(u0,6))+(a1[7]*pow(u0,7))+(a1[8]*pow(u0,8))+(a1[9]*pow(u0,9));} if(u0>20.64){t_iz=(a2[0]*pow(u0,0))+(a2[1]*pow(u0,1))+(a2[2]*pow(u0,2))+(a2[3]*pow(u0,3))+(a2[4]*pow(u0,4))+(a2[5]*pow(u0,5))+(a2[6]*pow(u0,6));} if(u<-6.35){t_iz=-1000;} if(u>54.9){t_iz=10000;}} void txk(){u0=u+temp_ds*0.06476;// окружающая температура 0.06476 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TXK(L) if(u0<0){t_iz=(b[0]*pow(u0,0))+(b[1]*pow(u0,1))+(b[2]*pow(u0,2))+(b[3]*pow(u0,3))+(b[4]*pow(u0,4))+(b[5]*pow(u0,5))+(b[6]*pow(u0,6))+(b[7]*pow(u0,7))+(b[8]*pow(u0,8))+(b[9]*pow(u0,9));} if(u0>=0){t_iz=(b1[0]*pow(u0,0))+(b1[1]*pow(u0,1))+(b1[2]*pow(u0,2))+(b1[3]*pow(u0,3))+(b1[4]*pow(u0,4))+(b1[5]*pow(u0,5))+(b1[6]*pow(u0,6))+(b1[7]*pow(u0,7))+(b1[8]*pow(u0,8))+(b1[9]*pow(u0,9));} if(u<-9.49){t_iz=-1000;} if(u>66.47){t_iz=10000;} }
Выбранный тип термопары заносится в EEPROM. В настройке и калибровке измеритель термопары не нуждается.
Добавив в схему несколько простых компонентов можно сделать простой терморегулятор.
При помощи энкодера можно настроить температуру регулирования, а кнопкой энкодера выбрать тип термопары.
- Температура термопары с учетом температуры окружающей среды
- ЭДС термопары (без учета температуры окружающей среды)
- Индикатор нагрева
- Тип термопары (выбор кнопкой энкодера)
- Температура регулирования
#include <Wire.h> #include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1 #include <Encoder.h> // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip #include <OneWire.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip #include <EEPROM.h> #include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей OneWire ds(6); // Вход датчика 18b20 Encoder myEnc(8, 9);// DT, CLK // AD7793 x16 Umax=73mV CH1_DIFF Fads=4.17Hz #define SCLK 2 #define CS 3 #define DIN 4 #define DOUT 5 #define AVDD_MONITOR 0b111 // CONF #define TEMP_SENSOR 0b110 // CONF #define CH1 0b000 // CONF #define CH2 0b001 // CONF #define CH3 0b011 // CONF #define BIPOLAR 0b00000000 // CONF #define UNIPOLAR 0b00010000 // CONF #define GAIN_1 0b000 // CONF #define GAIN_2 0b001 // CONF #define GAIN_4 0b010 // CONF #define GAIN_8 0b011 // CONF #define GAIN_16 0b100 // CONF #define GAIN_32 0b101 // CONF #define GAIN_64 0b110 // CONF #define GAIN_128 0b111 // CONF #define F_ADC_500 0b0001 // MODE #define F_ADC_250 0b0010 // MODE #define F_ADC_125 0b0011 // MODE #define F_ADC_62_5 0b0100 // MODE #define F_ADC_50_0 0b0101 // MODE #define F_ADC_39_2 0b0110 // MODE #define F_ADC_33_3 0b0111 // MODE #define F_ADC_19_6 0b1000 // MODE #define F_ADC_16_7 0b1001 // MODE #define F_ADC_12_5 0b1011 // MODE #define F_ADC_10_0 0b1100 // MODE #define F_ADC_8_33 0b1101 // MODE #define F_ADC_6_25 0b1110 // MODE #define F_ADC_4_17 0b1111 // MODE // XA K const float a[]{0,2.5173462*10,-1.1662878,-1.08336338,-8.9773540/10,-3.7342377/10,-8.6632643/100,-1.0450598/100,-5.1920577/10000}; const float a1[]{0,2.508355*10,7.860106/100,-2.503131/10,8.315270/100,-1.228034/100,9.804036/10000,-4.413030/100000,1.057734/1000000,-1.052755*pow(10,-8)}; const float a2[]{-1.318058*100,4.830222*10,-1.646031,5.464731/100,-9.6550715/10000,8.802193/1000000,-3.110810/100000000}; // XK L const float b[]{1.1573067/10000,1.5884573*10,4.0458554/100,0.3170064,0.1666128,5.146958/100,9.5288883/1000,1.0301283/1000,6.0654431/100000,1.5131878/1000000}; const float b1[]{7.2069422/1000,1.5775525*10,-0.2261183,9.4286756/1000,-3.5394655/10000,1.0050886/100000,-1.9323678/10000000,2.3816891/1000000000,-1.7130654*pow(10,-11),5.4857331*pow(10,-14)}; float temp_ds,u,u0,t_iz; unsigned long times,times_enc,times_eeprom,oldPosition = -999,newPosition;; int menu,reg; bool w,start=1; float gis=0.2; // гистерезис void setup(){ Serial.begin(9600); MsTimer2::set(1, to_Timer);MsTimer2::start(); pinMode(SCLK,OUTPUT);pinMode(CS,OUTPUT);pinMode(DIN,OUTPUT);pinMode(DOUT,INPUT); digitalWrite(SCLK,HIGH);digitalWrite(CS,HIGH);digitalWrite(DIN,HIGH); delay(100); reset(); write_byte(0x08,(0x20<<8)|F_ADC_4_17, 16);// MODE REGISTER write_byte(0x10,((BIPOLAR|GAIN_1)<<8)|0x90|AVDD_MONITOR, 16); // CONFIGURATION REGISTER write_byte(0x08,(0xC0<<8)|0x0A, 16);// MODE REGISTER System Zero-Scale Calibration write_byte(0x08,(0xE0<<8)|0x0A, 16);// MODE REGISTER System Full-Scale Calibration Serial.print("Stat ");Serial.println(read_byte(0x40,8),BIN);// STATUS REGISTER Serial.print("ID ");Serial.println(read_byte(0x60,8),BIN);// ID REGISTER Serial.print("Ofst ");Serial.println(read_byte(0x70,24));//OFFSET REGISTER Serial.print("ful ");Serial.println(read_byte(0x78,24));//OFULL-SCALE REGISTER write_byte(0x28,0x00, 8);// IO REGISTER pinMode(10,INPUT); pinMode(13,OUTPUT); menu = EEPROM.read(0);reg = EEPROM.read(1)*256 + EEPROM.read(2); lcd.init();lcd.backlight(); lcd.setCursor(5, 0);lcd.print(F("AD7793")); delay(1000);lcd.clear(); } void loop(){ // ENCODER /////////////////////////////////////////////////////////////////// if(newPosition != oldPosition){oldPosition = newPosition; reg=reg+newPosition;myEnc.write(0);newPosition=0;times_enc=millis();times_eeprom=millis();w=1; if(menu==0&®>1350){reg=1350;}if(menu==0&®<-270){reg=-270;} if(menu==1&®>800){reg=800;}if(menu==1&®<-200){reg=-200;} } // READ ADC ////////////////////////////////////////////////////////////////// if(millis()-times_enc>1000||start==1){ write_byte(0x08,(0x20<<8)|F_ADC_4_17, 16);// MODE REGISTER write_byte(0x10,((BIPOLAR|GAIN_16)<<8)|0x90|CH1, 16); // CONFIGURATION REGISTER long adc = read_byte(0x58,24); u = (1170.00/0x800000*(adc-0x800000))/16; // BIPOLAR Serial.print("Data b_B ");Serial.println(adc-0x800000);//DATA REGISTER Serial.print("Data V_B ");Serial.println((1170.00/0x800000*(adc-0x800000))/16,3);//DATA REGISTER // DS18B20 if(millis()-times>10000||start==1){temp_ds = dsRead(0);times=millis();} start=0; } // LCD /////////////////////////////////////////////////////////////////////// if(digitalRead(10)==LOW){menu++;EEPROM.update(0,menu);} if(menu>1){menu=0;} lcd.setCursor(0, 1);lcd.print(u,3);lcd.print("mV "); lcd.setCursor(10, 1);lcd.print(reg); lcd.print(" ");lcd.setCursor(14, 1);lcd.print(char(223)); lcd.print("C "); if(menu==0){txa(); lcd.setCursor(13,0);lcd.print("TXA");} if(menu==1){txk(); lcd.setCursor(13,0);lcd.print("TXK");} lcd.setCursor(0, 0); if(t_iz==-1000){lcd.print("LOW ");} else if(t_iz==10000){lcd.print("HIGH ");} else{lcd.print(t_iz,2);lcd.print(char(223)); lcd.print("C "); } // rele + gis //////////////////////// if(reg >= t_iz + gis){digitalWrite(13,HIGH);lcd.setCursor(10,0);lcd.print("H");} if(reg <= t_iz - gis){digitalWrite(13,LOW);lcd.setCursor(10,0);lcd.print("L");} ////////////////////// eeprom //////////////////////////////////////// if(w==1&&millis()-times_eeprom>10000){ EEPROM.update(1,highByte(reg)); EEPROM.update(2,lowByte(reg));w=0;} delay(10); } void write_byte(byte reg, long data, int bit_){ digitalWrite(CS,LOW); for(int i = 7; i >= 0; i--){ digitalWrite(SCLK,LOW); digitalWrite(DIN, (reg >> i) & 1); digitalWrite(SCLK,HIGH); } for(int i = bit_-1; i >= 0; i--){ digitalWrite(SCLK,LOW); digitalWrite(DIN, (data >> i) & 1); digitalWrite(SCLK,HIGH); } digitalWrite(CS,HIGH); } long read_byte(byte reg, int bit_){ digitalWrite(CS,LOW); while(digitalRead(DOUT)!=LOW); for(int i = 7; i >= 0; i--){ digitalWrite(SCLK,LOW); digitalWrite(DIN, (reg >> i) & 1); digitalWrite(SCLK,HIGH); } while(digitalRead(DOUT)!=LOW); long data_out=0; long dat; for(int i = bit_-1; i >= 0; i--){ digitalWrite(SCLK,LOW); digitalWrite(SCLK,HIGH); dat = digitalRead(DOUT); data_out |= (dat<<i); } digitalWrite(CS,HIGH); return data_out; } void reset(){ digitalWrite(CS,LOW); for(int i = 31; i >= 0; i--){ digitalWrite(SCLK,LOW); digitalWrite(DIN, HIGH); digitalWrite(SCLK,HIGH); } digitalWrite(CS,HIGH); } float dsRead(byte x) { byte data[2], addr[8][8], kol = 0; while (ds.search(addr[kol])) { // поиск датчиков, определение адреса и кол-ва датчиков kol++; } ds.reset_search(); // Сброс поиска датчика ds.reset(); // Инициализация, выполняется сброс шины ds.select(addr[x]); // Обращение к датчику по адресу ds.write(0x44, 0); // Измерение температуры с переносом данных в память ds.reset(); // Инициализация, выполняется сброс шины ds.select(addr[x]); // Обращение к датчику по адресу ds.write(0xBE); // Обращение памяти data[0] = ds.read();// Чтение памяти byte low data[1] = ds.read();// Чтение памяти byte high float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод } void txa(){u0=u+temp_ds*0.0400;// окружающая температура 0.0400 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TXA(K) if(u0<0){t_iz=(a[0]*pow(u0,0))+(a[1]*pow(u0,1))+(a[2]*pow(u0,2))+(a[3]*pow(u0,3))+(a[4]*pow(u0,4))+(a[5]*pow(u0,5))+(a[6]*pow(u0,6))+(a[7]*pow(u0,7))+(a[8]*pow(u0,8));} if(u0>=0&&u0<=20.64){t_iz=(a1[0]*pow(u0,0))+(a1[1]*pow(u0,1))+(a1[2]*pow(u0,2))+(a1[3]*pow(u0,3))+(a1[4]*pow(u0,4))+(a1[5]*pow(u0,5))+(a1[6]*pow(u0,6))+(a1[7]*pow(u0,7))+(a1[8]*pow(u0,8))+(a1[9]*pow(u0,9));} if(u0>20.64){t_iz=(a2[0]*pow(u0,0))+(a2[1]*pow(u0,1))+(a2[2]*pow(u0,2))+(a2[3]*pow(u0,3))+(a2[4]*pow(u0,4))+(a2[5]*pow(u0,5))+(a2[6]*pow(u0,6));} if(u<-6.35){t_iz=-1000;} if(u>54.9){t_iz=10000;}} void txk(){u0=u+temp_ds*0.06476;// окружающая температура 0.06476 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TXK(L) if(u0<0){t_iz=(b[0]*pow(u0,0))+(b[1]*pow(u0,1))+(b[2]*pow(u0,2))+(b[3]*pow(u0,3))+(b[4]*pow(u0,4))+(b[5]*pow(u0,5))+(b[6]*pow(u0,6))+(b[7]*pow(u0,7))+(b[8]*pow(u0,8))+(b[9]*pow(u0,9));} if(u0>=0){t_iz=(b1[0]*pow(u0,0))+(b1[1]*pow(u0,1))+(b1[2]*pow(u0,2))+(b1[3]*pow(u0,3))+(b1[4]*pow(u0,4))+(b1[5]*pow(u0,5))+(b1[6]*pow(u0,6))+(b1[7]*pow(u0,7))+(b1[8]*pow(u0,8))+(b1[9]*pow(u0,9));} if(u<-9.49){t_iz=-1000;} if(u>66.47){t_iz=10000;} } void to_Timer(){newPosition = myEnc.read()/4;}
Выбранный тип термопары и температура регулирования заносится в EEPROM. В настройке и калибровке измеритель термопары не нуждается, единственный параметр который может нуждаться к корректировке это гистерезис: float gis=0.2; // гистерезис 0,2 гр.Цельсия