typedef unsigned short uint16_t;
typedef short int16_t;
//注意0度时的AD
#define MULTI_MIN_DEGREE (-4*10)
#define MULTI_MAX_DEGREE (5*10)
#define MULTI_ZERO_DEGREE_INDEX 4
#define MULTI_MAX_LENGTH 10
const uint16_t NTC_3950_MUTI_TEN[MULTI_MAX_LENGTH]={
354,//-4度的中间ad
331,//-3度的中间ad
310,//-2度的中间ad
290,//-1度的中间ad
271,//0 中间ad
254,//1度的中间ad
238,//2度的中间ad
223,//3度的中间ad
180,//4度的中间ad
170,//5度的中间ad
};
/*
*@brief temprature_transfer: 将输入的AD值转换成温度
*@param adcVal:输入的AD值
*@retval 返回温度值
*/
int16_t temprature_transfer_multi_10(uint16_t adcVal)
{
int16_t res = 0;
int16_t offset = 0;
int16_t t = 0;
uint16_t left = 0;
uint16_t right = MULTI_MAX_LENGTH-1;
uint16_t mid = 0;
if(adcVal >= NTC_3950_MUTI_TEN[0])return MULTI_MIN_DEGREE;
if(adcVal <= NTC_3950_MUTI_TEN[MULTI_MAX_LENGTH-1])return MULTI_MAX_DEGREE;
while(left <= right)
{
mid = (left+right)>>1;
if(NTC_3950_MUTI_TEN[mid] <= adcVal)
{
res = mid;
right = mid-1;
}
else
{
left = mid+1;
}
}
if(res <= MULTI_ZERO_DEGREE_INDEX)
{
if(res != 0)
{
if(NTC_3950_MUTI_TEN[res-1] != NTC_3950_MUTI_TEN[res])
{
offset = (adcVal - NTC_3950_MUTI_TEN[res])*10/(NTC_3950_MUTI_TEN[res-1]-NTC_3950_MUTI_TEN[res]);
}
}
res -= MULTI_ZERO_DEGREE_INDEX;
res *= 10;
res -= offset;
}
else
{
if(res < MULTI_MAX_LENGTH)
{
if(NTC_3950_MUTI_TEN[res-1] != NTC_3950_MUTI_TEN[res])
{
offset = (NTC_3950_MUTI_TEN[res-1] - adcVal)*10/(NTC_3950_MUTI_TEN[res-1]-NTC_3950_MUTI_TEN[res]);
}
}
res -= (MULTI_ZERO_DEGREE_INDEX+1);
res *= 10;
res += offset;
}
return res;
}
NTC 负温度系数 10倍显示
于 2022-12-30 14:11:21 首次发布