负温度系数的传感器的温度获取算法实现,这里只是举个栗子,里面的AD值自己计算好放进去就可以了。
如果要测负的温度,自己加个偏移量就行了。
主要用二分法实现
typedef unsigned short uint16_t;
typedef short int16_t;
#define TEMP_BASE -4
#define MAX_TEMPERATURE 5
#define MAX_LENGTH 10
const uint16_t NTC_3950[MAX_LENGTH]={
354,//-4度的最小ad
331,//-3度的最小ad
310,//-2度的最小ad
290,//-1
271,//0度的最小ad
254,//1度的最小ad
238,
223,//3
180,
170
};
/*
*@brief temprature_transfer: 将输入的AD值转换成温度
*@param adcVal:输入的AD值
*@retval 返回温度值
*/
int16_t temprature_transfer(uint16_t adcVal)
{
int16_t res = 0;
uint16_t left = 0;
uint16_t right = MAX_LENGTH-1;
uint16_t mid = 0;
if(adcVal >= NTC_3950[0])return TEMP_BASE;
if(adcVal < NTC_3950[MAX_LENGTH-1])return MAX_TEMPERATURE;
while(left <= right)
{
mid = (left+right)>>1;
if(NTC_3950[mid] <= adcVal)
{
res = mid;
right = mid-1;
}
else
{
left = mid+1;
}
}
return res+TEMP_BASE;
}