이번에 산업용 PC 설계 프로젝트를 진행하면서

NTC 온도 센서를 이용하여 보드의 온도 상태를 확인 하기 위해

기존에 학습했던 온도 센서 (http://ippuu.iptime.org/53) 자료를 이용하여 API 형태로 구현 하였다.
 


typedef unsigned char  u08;
typedef unsigned short u16;
//NTC 관련 구조체 선언.
typedef struct
{
	float ADC_PW_V; // ADC에 사용되는 레퍼런스 기준 전압 이다. ex) ADC_PW_V = 3.3;
	u16 NTC_Res; // NTC 저항의 실제 수치를 넣으면 된다 .ex) 1K옴 저항의 경우  NTC_Res = 1000; 
	u16 NTC_Beta; // NTC 저항의 제조사에서 제공되는 β Value 를 입력한다.
	u16 R1_Res; // NTC 저항을 측정하기 위한 기준 분압 저항을값을 입력한다.
	u16 ADC_Scale_Level; // ADC의 해상도를 입력한다  ex) ADC_Scale_Level = 1024; //10bit ADC
	u16 ADC_Read_Value; //ADC에서 NTC 저항의 읽어들인 값을 넣는다.
}st_NTC_CAL;


//함수원형
float Temperature_calculrator(st_NTC_CAL* pNTC)
{
	double r;
	double ADC_STEP_VOLTAGE;
	float Temperature;

	 ADC_STEP_VOLTAGE = pNTC->ADC_PW_V/ pNTC->ADC_Scale_Level;


	r = pNTC->R1_Res/((pNTC->ADC_PW_V/(pNTC->ADC_Read_Value*ADC_STEP_VOLTAGE))-1.0);
	Temperature = 1.0/(log(r/pNTC->NTC_Res)/pNTC->NTC_Beta+(1.0/(25.0+273.0))) - 273;

	return Temperature;

}



실제 구현 방법은 하기와 같다.


void anthing_func()
{
	st_NTC_CAL st_NTC;
	unsigned int PW;
	float PWTEMP;


	//NTC Calcurator Struct init
	st_NTC.ADC_PW_V = 3.4; // 3.4V
	st_NTC.ADC_Scale_Level = 1024; // 10bit
	st_NTC.NTC_Beta = NTC_BETA; //3706
	st_NTC.NTC_Res = NTC_RESISTOR; // 1000 1Kohm
	st_NTC.R1_Res = R1_OHM; // 3300ohm

	PW = ADC_Read();

	st_NTC.ADC_Read_Value = PW; // ADC를 통해 읽어들인 값을 구조체에 집어 넣는다.
	PWTEMP = Temperature_calculrator(&st_NTC);
	printf("PW TEMP2 : [%.2f]\r\n",PWTEMP); // 출력하여 확인한다.

      }


크리에이티브 커먼즈 라이센스
Creative Commons License
2017/02/03 23:57 2017/02/03 23:57

Trackback Address >> 이 글에는 트랙백을 보낼 수 없습니다

댓글을 달아 주세요