|
楼主 |
发表于 2021-3-24 15:53:46
|
显示全部楼层
void Get_Temperature(u16 tim,u16 n)
{
static u16 i=0,temp_t=0;
float temp1=0,temp2=0;
if(AD_Count>tim)
{
Get_ADC_Value();
i++;
if(i>=n)
{
Get_R_Value(n);
R1_Temperature=FindTab(TabNTC_10k,TempSize,R1_value);
R2_Temperature=FindTab(TabNTC_10k,TempSize,R2_value);
temp1=(TabNTC_10k[R1_Temperature]-R1_value)*1.0/(TabNTC_10k[R1_Temperature]-TabNTC_10k[R1_Temperature+1]);
temp2=(TabNTC_10k[R2_Temperature]-R2_value)*1.0/(TabNTC_10k[R2_Temperature]-TabNTC_10k[R2_Temperature+1]);
R1_Temperature=R1_Temperature*10+temp1*10;
R2_Temperature=R2_Temperature*10+temp2*10;
write_dgus_vp(0x1002,(u8*)&R1_Temperature,1);
write_dgus_vp(0x1004,(u8*)&R2_Temperature,1);
Temperature_Real=(R1_Temperature*Temp_Coef[0]-R2_Temperature*Temp_Coef[1]+Temp_Coef[2]);
Temperature_Real=(Temperature_Real/(10*Temp_Pre))*10;
if(abs(Temperature_Real-Temperatrue_Real_Old)==Temp_Pre)
{
temp_t++;
if(temp_t<5)
{
Temperature_Real=Temperatrue_Real_Old;
}
else
{
temp_t=0;
Temperatrue_Real_Old=Temperature_Real;
}
}
else if(abs(Temperature_Real-Temperatrue_Real_Old)>=Temp_Pre*2)
{
Temperatrue_Real_Old=Temperature_Real;
temp_t=0;
}
write_dgus_vp(TEMP_CURRENT,(u8*)&Temperature_Real,1);
memset(adc_val,0,sizeof(adc_val));
i=0;
}
AD_Count=0;
}
}
上面一段程序是来源于迪文官方的。他的算法是用两路NTC的温差进行参数换算的,可能也是出厂demo里用到的算法,我想知道它的原理是什么
|
|