STM32F103 내부 온도센서를 읽어보자.
2021-08-12 처음 작성
소나무 기운 , 전자제품 개발/생산
STM32F103 내부 온도센서 읽기
CPU 주변온도를 알아야할 필요가 생겼어요.
주변온도이기 때문에 DIP타입의 NTC를 이용하는 것이 정상적이겠지만 추가적인 하드웨어가 필요하니
CPU내부의 온도센서를 이용해 읽어보고자 합니다.
이 센서는 칩 내부에 위치하며 디바이스 코어의 온도를 직접 측정합니다.
적용 방법
RM0008 Reference Manual 를 살펴보면 설명이 있습니다.
STM32F103은 ADC1_IN16에 온도센서가 연결되어 있습니다.
ADC_IN16을 연결하고 일어주면 됩니다.
TSVREFE 비트를 사용하도록 설정해 줍니다.
V25 : 25에서의 온도센서 전압값
Avg_Slope : 전압 대비 온도의 기울기 ( 계산식을 아직 찾지 못했어요.) 우선 0.0043으로 검색됩니다.
V25의 값은 데이터 시트에 있습니다.
코드 구현
int16_t FormSensorMnt_CalCPUTemp(void)
{
float t;
static int16_t bf[10] = {0};
static uint8_t i = 0;
uint8_t j;
int16_t sum = 0;
t = (float)adcVal[4] * 3.3 / 0xfff; // 읽은 센서값을 전압으로 변경
t = (1.43 - t) / 0.0043 + 25.0; // 슬로프오 오프셋을 계산
bf[i] = (int16_t)t; // 이동평균 계산을 위한 버퍼에 저장
i++;
i %= 10;
sum = 0;
for (j = 0; j < 10; j++) // 이동 평균 계산.
{
sum += bf[j];
}
sum /= 10;
return sum;
}
CPU전압이 3.3V로 계산하여 전압값으로 우선 변경합니다.
25도때 전압과 현재의 전압을 계산하여 처리합니다.
값이 수시로 흔들리듯 하여 10번의 이동평균을 적용하였습니다.
대략 50도 전후로 측정됩니다.
마무리
CPU의 온도를 읽을 수 있었습니다.
값이 흔들리듯 하여 필터 적용이 필요합니다.
슬로프 값이 모델마다 다릅니다.
참고문헌
1.ST Microelectronics 기술문서 "RM0008 Reference manual
2. ST Microelectronics 데이터시트 "STM32F103xC"
틀린 부분이나 질문은 댓글 달아주세요.
즐거운 하루 보내세요. 감사합니다.