1. 서론
온도센서는 산업, 과학, 의료, 항공우주, 가전, 환경 모니터링 등 다양한 분야에서 온도를 정밀하게 측정하여 데이터를 제공하는 핵심 기술입니다. 온도센서는 열역학적 원리, 재료 과학, 전자공학의 융합을 통해 물리적 특성의 변화를 전기적 신호로 변환하며, 이를 통해 온도를 정량화합니다. 본 백서는 온도센서의 종류, 동작 원리, 수학적 모델링, 재료 특성, 국제 표준 및 규격, 마이크로컨트롤러(MCU) 기반의 데이터 처리 코드, 신호 처리 회로, 캘리브레이션 절차, 성능 분석, 응용 사례, 설계 고려사항, 최신 기술 동향, 그리고 미래 전망을 학문적이고 실무적인 관점에서 심층적으로 다룹니다.
2. 온도센서의 종류 및 동작 원리
온도센서는 측정 방식과 물리적 특성에 따라 여러 유형으로 분류됩니다. 아래는 각 센서의 동작 원리, 수학적 모델, 재료 특성, 장단점을 상세히 분석합니다.
2.1 Thermocouple(열전대)
열전대는 제벡 효과(Seeback Effect)를 이용하여 두 가지 서로 다른 금속 또는 합금의 접합부에서 온도 차이에 의해 발생하는 기전력(EMF)을 측정합니다. 제벡 효과는 다음과 같은 미분 방정식으로 표현됩니다:
\[ V = \int_{T_c}^{T_h} (\alpha_A(T) - \alpha_B(T)) \, dT \]
여기서:
- \(V\): 발생된 전압 (mV)
- \(\alpha_A(T), \alpha_B(T)\): 두 금속의 온도 의존적 제벡 계수 (V/°C)
- \(T_h\): 뜨거운 접합부 온도 (°C)
- \(T_c\): 차가운 접합부 온도 (°C)
열전대의 EMF는 비선형이므로, NIST 표준에 따라 다항식으로 온도를 역계산합니다 (K형 열전대 예):
\[ T = a_0 + a_1 V + a_2 V^2 + a_3 V^3 + \cdots \]
예: K형 열전대 (0°C ~ 500°C):
- \(a_0 = 0.226584602\)
- \(a_1 = 2.5173462 \times 10^1\)
- \(a_2 = -1.1662878 \times 10^{-1}\)
- \(a_3 = -1.0833638 \times 10^{-2}\)
- \(a_4 = 8.9773540 \times 10^{-4}\)
재료:
- K형: 크로멜(Ni 90%, Cr 10%) 및 알루멜(Ni 95%, Al/Mn/Si 5%)
- J형: 철(Fe) 및 콘스탄탄(Cu 55%, Ni 45%)
- T형: 구리(Cu) 및 콘스탄탄
- S형: 백금-10% 로듐(Pt-10%Rh) 및 순수 백금(Pt)
특징:
- 온도 범위: -270°C ~ 1820°C
- 장점: 넓은 온도 범위, 빠른 응답 시간(10ms ~ 1s), 내구성
- 단점: 비선형 출력, 기준 접합부 보상(CJC) 필요, EMI 민감
2.2 RTD(저항온도계 , Resistance Temperature Detector)
RTD는 금속(주로 백금)의 저항이 온도에 따라 변화하는 특성을 이용합니다. 저항-온도 관계는 Callendar-Van Dusen 방정식으로 모델링됩니다:
\[ R_t = R_0 \left[ 1 + A T + B T^2 + C (T - 100) T^3 \right] \quad (T < 0°C) \]
\[ R_t = R_0 \left[ 1 + A T + B T^2 \right] \quad (T \geq 0°C) \]
여기서:
- \(R_t\): 온도 \(T\)에서의 저항 (Ω)
- \(R_0\): 0°C에서의 기준 저항 (Pt100: 100Ω, Pt1000: 1000Ω)
- \(A = 3.9083 \times 10^{-3}\), \(B = -5.775 \times 10^{-7}\), \(C = -4.183 \times 10^{-12}\)
선형 근사:
\[ R_t \approx R_0 (1 + \alpha T) \]
자기 가열 효과:
\[ \Delta T = \frac{I^2 R_t}{k} \]
재료:
- 백금(Pt): 높은 선형성, 내식성
- 니켈(Ni): 저비용, -80°C ~ 260°C
- 구리(Cu): 0°C ~ 150°C
특징:
- 온도 범위: -200°C ~ 850°C
- 장점: 높은 정확도(±0.1°C), 장기 안정성
- 단점: 비용 높음, 응답 시간 느림
2.3 Thermistor(써미스터)
써미스터는 세라믹 또는 폴리머 재료의 저항 변화로 온도를 측정합니다. NTC 써미스터의 저항-온도 관계는 Steinhart-Hart 방정식으로 표현됩니다:
\[ \frac{1}{T} = A + B \ln(R) + C (\ln(R))^3 \]
β-모델:
\[ R_t = R_0 \exp \left[ \beta \left( \frac{1}{T} - \frac{1}{T_0} \right) \right] \]
재료:
- NTC: 망간(Mn), 니켈(Ni), 코발트(Co) 산화물
- PTC: 바륨 타이타네이트(BaTiO₃)
특징:
- 온도 범위: -50°C ~ 150°C
- 장점: 높은 민감도(±0.05°C), 저렴
- 단점: 비선형 출력, 습도 취약
2.4 IC Temperature Senosr(반도체 온도센서)
반도체 센서는 다이오드의 전압-온도 특성을 이용합니다:
\[ V_F = \frac{k T}{q} \ln \left( \frac{I_F}{I_S} \right) \]
선형 근사:
\[ V_F = V_{F0} - k_T T \]
재료: 실리콘(Si), CMOS
특징:
- 온도 범위: -55°C ~ 150°C
- 장점: 선형 출력, 디지털 인터페이스
- 단점: 제한된 온도 범위
2.5 IR Temperature sensor(적외선 온도센서,비접촉식)
적외선 센서는 복사 에너지를 측정합니다:
\[ P = \epsilon \sigma A (T^4 - T_a^4) \]
방사율 보정:
\[ T_{\text{corrected}} = \left( \frac{P_{\text{measured}}}{\epsilon \sigma A} + T_a^4 \right)^{1/4} \]
재료: 게르마늄(Ge), 열전퇴 소자
특징:
- 온도 범위: -50°C ~ 3000°C
- 장점: 비접촉, 빠른 응답
- 단점: 방사율 보정 필요
3. 온도센서의 재료 특성
센서 유형 | 주요 재료 | 특성 | 열전도율 (W/m·K) | 내식성 | 비용 |
---|---|---|---|---|---|
열전대 | 크로멜, 알루멜, 백금, 로듐 | 높은 내열성, 제벡 계수 안정성 | 20 ~ 100 | 높음 | 중간~높음 |
RTD | 백금(Pt), 니켈(Ni), 구리(Cu) | 높은 선형성, 장기 안정성 | 70 (Pt), 90 (Ni) | 높음 | 높음 |
써미스터 | 망간/니켈 산화물, BaTiO₃ | 높은 민감도, 습도 취약성 | 2 ~ 5 | 중간 | 저렴 |
반도체 센서 | 실리콘, CMOS | 저전력, 소형 | 150 (Si) | 중간 | 저렴 |
적외선 센서 | 게르마늄, 열전퇴 소자 | 비접촉, 렌즈 취약성 | 60 (Ge) | 중간 | 중간~높음 |
4. 온도센서의 국제 표준 및 규격
주요 규격:
- IEC 60751:2008: 백금 RTD 허용 오차
- ANSI/ISA-51.1: 열전대 및 RTD 색상 코드
- ASTM E230/E230M: 열전대 EMF 테이블
- ISO 80601-2-56: 의료용 온도센서
RTD 허용 오차 (IEC 60751):
온도 (°C) | 클래스 AA (°C) | 클래스 A (°C) | 클래스 B (°C) |
---|---|---|---|
-200 | ±0.44 | ±0.55 | ±1.30 |
-50 | ±0.19 | ±0.25 | ±0.55 |
0 | ±0.10 | ±0.15 | ±0.30 |
100 | ±0.27 | ±0.35 | ±0.80 |
500 | ±0.95 | ±1.15 | ±2.30 |
5. STM32 기반 온도센서 데이터 처리 및 코드 구현
5.1 열전대 데이터 처리 (MAX31855)
#include "stm32f10x.h"
#include "stm32f10x_spi.h"
#include "stdio.h"
// SPI1 초기화
void SPI1_Init(void) {
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN | RCC_APB2ENR_IOPAEN;
GPIOA->CRL = (GPIOA->CRL & ~(GPIO_CRL_MODE4 | GPIO_CRL_CNF4)) | GPIO_CRL_MODE4_1 | GPIO_CRL_CNF4_0; // PA4: CS
SPI1->CR1 = SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_MSTR | SPI_CR1_BR_2 | SPI_CR1_CPOL | SPI_CR1_CPHA; // 마스터, 1MHz
SPI1->CR1 |= SPI_CR1_SPE;
}
// MAX31855 데이터 읽기
uint32_t MAX31855_Read(void) {
GPIOA->BSRR = GPIO_BSRR_BR4; // CS Low
uint32_t data = 0;
for (int i = 0; i < 4; i++) {
while (!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = 0x00;
while (!(SPI1->SR & SPI_SR_RXNE));
data = (data << 8) | (SPI1->DR & 0xFF);
}
GPIOA->BSRR = GPIO_BSRR_BS4; // CS High
return data;
}
// 온도 변환
float Thermocouple_Temperature(uint32_t raw) {
if (raw & 0x7) return NAN; // 오류 체크
int32_t temp = (raw >> 18) & 0x3FFF;
if (temp & 0x2000) temp |= ~0x3FFF; // 부호 확장
return temp * 0.25; // 0.25°C 해상도
}
float CJC_Temperature(uint32_t raw) {
int32_t temp = (raw >> 4) & 0xFFF;
if (temp & 0x800) temp |= ~0xFFF;
return temp * 0.0625; // 0.0625°C 해상도
}
int main(void) {
SPI1_Init();
// UART 초기화 (간단히 생략, 실제 구현 필요)
while (1) {
uint32_t data = MAX31855_Read();
float temp = Thermocouple_Temperature(data);
float cjc = CJC_Temperature(data);
if (!isnan(temp)) {
printf("CJC: %.2f °C, 열전대: %.2f °C\n", cjc, temp);
} else {
printf("열전대 오류\n");
}
for (volatile int i = 0; i < 1000000; i++); // 1초 지연
}
}
5.2 Pt100 RTD 데이터 처리 (MAX31865)
#include "stm32f10x.h"
#include "stm32f10x_spi.h"
#include "math.h"
// MAX31865 레지스터
#define REG_CONFIG 0x00
#define REG_RTD_MSB 0x01
#define REG_FAULT 0x07
#define REG_WRITE 0x80
// 기준 저항 및 공칭 저항
#define RREF 430.0
#define RNOMINAL 100.0
void SPI1_Init(void) {
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN | RCC_APB2ENR_IOPAEN;
GPIOA->CRL = (GPIOA->CRL & ~(GPIO_CRL_MODE4 | GPIO_CRL_CNF4)) | GPIO_CRL_MODE4_1 | GPIO_CRL_CNF4_0;
SPI1->CR1 = SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_MSTR | SPI_CR1_BR_2 | SPI_CR1_CPOL | SPI_CR1_CPHA;
SPI1->CR1 |= SPI_CR1_SPE;
}
void MAX31865_Init(void) {
GPIOA->BSRR = GPIO_BSRR_BR4;
SPI1->DR = REG_WRITE | REG_CONFIG;
while (!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = 0xC2; // 3선식, 50Hz 필터
while (!(SPI1->SR & SPI_SR_TXE));
GPIOA->BSRR = GPIO_BSRR_BS4;
}
uint16_t MAX31865_ReadRTD(void) {
GPIOA->BSRR = GPIO_BSRR_BR4;
SPI1->DR = REG_RTD_MSB;
while (!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = 0x00;
while (!(SPI1->SR & SPI_SR_RXNE));
uint16_t msb = SPI1->DR;
SPI1->DR = 0x00;
while (!(SPI1->SR & SPI_SR_RXNE));
uint16_t lsb = SPI1->DR;
GPIOA->BSRR = GPIO_BSRR_BS4;
return (msb << 8) | lsb;
}
float RTD_Temperature(uint16_t rtd) {
float ratio = rtd / 32768.0;
float resistance = RREF * ratio;
float A = 3.9083e-3, B = -5.775e-7, C = -4.183e-12;
float temp = (-RNOMINAL * A + sqrt(RNOMINAL * RNOMINAL * A * A - 4 * RNOMINAL * B * (RNOMINAL - resistance))) / (2 * RNOMINAL * B);
if (resistance < RNOMINAL) { // 저온 보정
temp = (resistance - RNOMINAL) / (RNOMINAL * A);
}
return temp;
}
int main(void) {
SPI1_Init();
MAX31865_Init();
while (1) {
uint16_t rtd = MAX31865_ReadRTD();
float temp = RTD_Temperature(rtd);
printf("저항: %.2f Ω, 온도: %.2f °C\n", RREF * (rtd / 32768.0), temp);
for (volatile int i = 0; i < 1000000; i++);
}
}
5.3 써미스터 데이터 처리 (ADC)
#include "stm32f10x.h"
#include "math.h"
// Steinhart-Hart 계수
#define A 1.129148e-3
#define B 2.34125e-4
#define C 8.76741e-8
void ADC1_Init(void) {
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN | RCC_APB2ENR_IOPAEN;
GPIOA->CRL = (GPIOA->CRL & ~(GPIO_CRL_CNF0)) | GPIO_CRL_CNF0_1; // PA0: 아날로그
ADC1->CR2 = ADC_CR2_ADON | ADC_CR2_CAL;
while (ADC1->CR2 & ADC_CR2_CAL);
ADC1->SMPR2 = ADC_SMPR2_SMP0_2; // 샘플링 시간
ADC1->SQR3 = 0; // 채널 0
}
float Read_Thermistor(void) {
ADC1->CR2 |= ADC_CR2_ADON;
while (!(ADC1->SR & ADC_SR_EOC));
uint16_t adc = ADC1->DR;
float voltage = adc * 3.3 / 4096.0;
float R = 10000.0 * (3.3 / voltage - 1); // 10kΩ 분배기
float ln_R = log(R);
float T_inv = A + B * ln_R + C * (ln_R * ln_R * ln_R);
return 1 / T_inv - 273.15;
}
int main(void) {
ADC1_Init();
while (1) {
float temp = Read_Thermistor();
printf("온도: %.2f °C\n", temp);
for (volatile int i = 0; i < 1000000; i++);
}
}
5.4 적외선 온도센서 (MLX90614)
#include "stm32f10x.h"
#include "stm32f10x_i2c.h"
void I2C1_Init(void) {
RCC->APB1ENR |= RCC_APB1ENR_I2C1EN;
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
GPIOB->CRL = (GPIOB->CRL & ~(GPIO_CRL_MODE6 | GPIO_CRL_CNF6 | GPIO_CRL_MODE7 | GPIO_CRL_CNF7)) |
GPIO_CRL_CNF6_1 | GPIO_CRL_MODE6_1 | GPIO_CRL_CNF7_1 | GPIO_CRL_MODE7_1;
I2C1->CR2 = 36; // 36MHz
I2C1->CCR = 180; // 100kHz
I2C1->TRISE = 37;
I2C1->CR1 |= I2C_CR1_PE;
}
float MLX90614_Read(uint8_t reg) {
I2C1->CR1 |= I2C_CR1_START;
while (!(I2C1->SR1 & I2C_SR1_SB));
I2C1->DR = 0x5A << 1;
while (!(I2C1->SR1 & I2C_SR1_ADDR));
(void)I2C1->SR2;
I2C1->DR = reg;
while (!(I2C1->SR1 & I2C_SR1_TXE));
I2C1->CR1 |= I2C_CR1_START;
I2C1->DR = (0x5A << 1) | 1;
while (!(I2C1->SR1 & I2C_SR1_ADDR));
(void)I2C1->SR2;
while (!(I2C1->SR1 & I2C_SR1_RXNE));
uint16_t lsb = I2C1->DR;
while (!(I2C1->SR1 & I2C_SR1_RXNE));
uint16_t msb = I2C1->DR;
I2C1->CR1 |= I2C_CR1_STOP;
return ((msb << 8) | lsb) * 0.02 - 273.15;
}
int main(void) {
I2C1_Init();
while (1) {
float ambient = MLX90614_Read(0x06);
float object = MLX90614_Read(0x07);
printf("주변: %.2f °C, 물체: %.2f °C\n", ambient, object);
for (volatile int i = 0; i < 1000000; i++);
}
}
6. 온도센서의 신호 처리 회로
6.1 열전대
증폭기: INA125 또는 AD8495, CJC: Pt100, 필터: RC 저역통과 (100Hz).
6.2 RTD
3선식: \( R_t = R_{\text{measured}} - 2 R_{\text{wire}} \), 4선식: 켈빈 연결.
6.3 써미스터
\[ V_{\text{out}} = V_{\text{ref}} \frac{R_{\text{therm}}}{R_{\text{therm}} + R_{\text{ref}}} \]
6.4 적외선 센서
I2C/SPI 인터페이스, 방사율 보정.
7. 온도센서의 캘리브레이션 절차
1. 준비: NIST 추적 온도 소스 (0°C, 100°C).
2. 절차: 단일점/다지점 캘리브레이션, 오차 보정: \( T_{\text{corrected}} = T_{\text{measured}} + k_0 + k_1 T_{\text{measured}} \).
8. 성능 분석 및 비교
센서 유형 | 온도 범위 (°C) | 정확도 (°C) | 응답 시간 | 비용 | 내구성 | 인터페이스 |
---|---|---|---|---|---|---|
열전대 | -270 ~ 1820 | ±1 ~ ±2 | 10ms ~ 1s | 중간 | 높음 | 아날로그 |
RTD (Pt100) | -200 ~ 850 | ±0.1 ~ ±0.5 | 100ms ~ 1s | 높음 | 중간 | 아날로그/디지털 |
써미스터 | -50 ~ 150 | ±0.05 ~ ±0.2 | 10ms ~ 500ms | 저렴 | 낮음 | 아날로그 |
반도체 센서 | -55 ~ 150 | ±0.5 ~ ±1 | 100ms ~ 1s | 저렴 | 중간 | 디지털 |
적외선 센서 | -50 ~ 3000 | ±0.5 ~ ±2 | 50ms ~ 200ms | 중간 | 중간 | 디지털 |
9. 응용 사례
- 산업 공정: 열전대 및 RTD로 고로 온도 제어
- 의료: 써미스터 및 적외선 센서로 체온 측정
- 항공우주: 열전대(S형)로 제트 엔진 온도 모니터링
- IoT: DS18B20으로 스마트 홈 온도 관리
10. 최신 기술 동향
- MEMS 기반 센서: 초소형화
- AI/ML 보정: 비선형 출력 보정
- 무선 통신: Wi-Fi, LoRaWAN
- 고온 초전도 센서: 극저온 측정
11. 미래 전망
- 초정밀 센서: ±0.01°C 정확도
- 스마트 센서: AI 내장
- 5G/IoT 통합: 초저지연
- 환경 지속 가능성: 재활용 재료
12. 결론
온도센서는 열역학, 재료 과학, 전자공학의 융합 기술로, 다양한 산업에서 핵심 역할을 수행합니다. 본 내용은 온도센서의 동작 원리, 수학적 모델, 재료 특성, 예제 기반 코드, 신호 처리, 최신 동향을 포괄적으로 다루었습니다.
13. 참고문헌
- IEC 60751:2008, Industrial Platinum Resistance Thermometers
- ASTM E230/E230M, Standard Specification for Thermocouples
- Steinhart, J.S., Hart, S.R., "Calibration curves for thermistors," Deep-Sea Research, 1968
'Sensor > 온도센서(Temperature)' 카테고리의 다른 글
Thermistor(써미스터) (0) | 2025.08.05 |
---|---|
RTD 온도 센서 보상 알고리즘 (RTD Temperature Sensor Compensation Algorithm) (0) | 2025.08.05 |
RTD (측온저항체,Resistance Temperature Detector) (0) | 2025.08.04 |
ThermoCouple(열전대) NIST 기반 보정 알고리즘 코드 구현 (0) | 2025.08.04 |
Thermocouple(열전대) (0) | 2025.08.03 |