Датчик температуры MAX31855 генерирует компенсацию холодного спая и оцифровывает сигнал от термопары типа K, J, N, T, S, R или E. Различные данные датчика можно легко считывать с помощью одного из модулей SPI Xmega. Датчик передает информацию в 14-битном формате через стандартный интерфейс SPI. Преобразователь имеет температурное разрешение до 0,25 ° C и позволяет проводить измерения в диапазоне температур от -270 ° C до 1800 ° C. Специально для термопар типа K датчик имеет точность ± 2 ° C в температурном диапазоне от -200 ° C до +700 ° C.
Характеристики:
- Компенсация холодного спая
- Разрешение 14-бит, 0,25 ° C
- Версии, доступные для термопар K, J, N, T, S, R и E
- Простой SPI-совместимый интерфейс (только чтения)
- Обнаруживает выводы термопары для GND или VCC
- Обнаруживает рабочую термопару
В следующем примере показаны функции для считывания датчика:
#define sbi(ADDRESS,BIT) ADDRESS |= (1<<BIT) #define cbi(ADDRESS,BIT) ADDRESS &= ~(1<<BIT) #define toggle(ADDRESS,BIT) ADDRESS ^= (1<<BIT) #define bis(ADDRESS,BIT) ADDRESS & (1<<BIT) #define bic(ADDRESS,BIT) !(ADDRESS & (1<<BIT)) //################################################## read_max31855 int read_max31855(void) { unsigned char data[4] = {0xff, 0xff, 0xff, 0xff}; // SPI SS low cbi(PORTD.OUT,4); for (int i=0; i<4; i++) { data[i] = SPI_MasterTransceiveByte(&spiMasterD,0xff); } // SPI SS high sbi(PORTD.OUT,4); if (bis(data[3],0)) {usart_puts(&USART_data,"Open Circuit\r");return 1000;} else if (bis(data[3],1)) {usart_puts(&USART_data,"Short to GND\r");return 1001;} else if (bis(data[3],2)) {usart_puts(&USART_data,"Short to VCC\r");return 1002;} else { double tempCuple = 0; double tempDevic = 0; double ganz = 0; double komma = 0; ganz = (((data[0] << 8) | data[1])>> 4); komma = ((data[1]>> 2) & 0x03)*0.25 ; if (ganz>0) tempCuple = ganz+komma; else tempCuple = ganz-komma; ganz = data[2]; komma = (data[3]>> 4)*0.0625; if (ganz>0) tempDevic = ganz+komma; else tempDevic = ganz-komma; double vout= 0.041276*(tempCuple-tempDevic); double kompen = tempDevic*100 + 2508.355*vout + 7.860106*vout*vout - 25.03131*vout*vout*vout + 8.31527*vout*vout*vout*vout - 1.228034*vout*vout*vout*vout*vout; // round into Integer and return value return (int)(kompen+0.005); } }
0 коммент.:
Отправить комментарий