본문 바로가기
STMicro STM32

STM32F103 내부 온도센서를 읽어보자.

by 소나무기운 2021. 8. 12.
반응형

2021-08-12 처음 작성

 

소나무 기운 ,  전자제품 개발/생산

STM32F103 내부 온도센서 읽기

CPU 주변온도를 알아야할 필요가 생겼어요.

주변온도이기 때문에 DIP타입의 NTC를 이용하는 것이 정상적이겠지만 추가적인 하드웨어가 필요하니 

CPU내부의 온도센서를 이용해 읽어보고자 합니다.

이 센서는 칩 내부에 위치하며 디바이스 코어의 온도를 직접 측정합니다.

 

적용 방법

RM0008 Reference Manual 를 살펴보면 설명이 있습니다.

Temperature sensor 블럭도

STM32F103은 ADC1_IN16에 온도센서가 연결되어 있습니다.

온도센서 읽기 방법

ADC_IN16을 연결하고 일어주면 됩니다.

TSVREFE 비트를 사용하도록 설정해 줍니다.

 

V25 : 25에서의 온도센서 전압값

Avg_Slope : 전압 대비 온도의 기울기 ( 계산식을 아직 찾지 못했어요.) 우선 0.0043으로 검색됩니다.

 

V25의 값은 데이터 시트에 있습니다.

25도에서의 온도센서 전압

 

코드 구현

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"

 

 

 
 

 

 

틀린 부분이나 질문은 댓글 달아주세요.

즐거운 하루 보내세요. 감사합니다.

 

 

반응형

댓글