|
|
发表于 2025-12-12 17:21:21
|
显示全部楼层
本帖最后由 紫狐 于 2025-12-12 17:23 编辑
u8 FindTab(u16 *pTab,u8 Tablong,u16 dat)
{
u8 st=0,ed=0,m=0;
u8 i=0;
ed=TempSize-1;
if(dat>=pTab[st])
return st;
else if(dat<=pTab[ed])
return ed;
while(st<ed)
{
m=(st+ed)/2;
if(dat==pTab[m])
break;
if((dat<pTab[m])&&(dat>pTab[m+1]))
break;
if(dat>pTab[m])
ed=m;
else
st=m;
if(i++>Tablong)
break;
}
if(st>ed)
return 0;
return m;
}
void Get_Temperature(u16 tim)
{
static u16 temp_t=0,temp_n=0;
float temp1=0,temp2=0;
float R1_temp=0.0,R2_temp=0.0;
u8 i,j,k;
u16 temp=0;
if(AD_Count>tim)
{
//Get_ADC_Value();
read_dgus_vp(AD_VALUE,(u8*)&adc_val_t[temp_n][0],8);
temp_n++;
if(temp_n>=10)
{
//Get_R_Value(n);
for(k=0;k<8;k++)
{
for(i=0;i<10;i++)
{
for(j=0;j<10-i-1;j++)
{
if(adc_val_t[j][k]>adc_val_t[j+1][k])
{
temp = adc_val_t[j][k];
adc_val_t[j][k] = adc_val_t[j+1][k];
adc_val_t[j+1][k] = temp;
}
}
}
}
adc_value[0]=(adc_val_t[3][0]+adc_val_t[4][0]+adc_val_t[5][0]+adc_val_t[6][0])/4;
adc_value[6]=(adc_val_t[3][6]+adc_val_t[4][6]+adc_val_t[5][6]+adc_val_t[6][6])/4;
adc_value[7]=(adc_val_t[3][7]+adc_val_t[4][7]+adc_val_t[5][7]+adc_val_t[6][7])/4;
R1_temp=adc_value[7]*1.0/(adc_value[6]-adc_value[7]);
R2_temp=adc_value[0]*1.0/(adc_value[6]-adc_value[0]);
R1_value=R1_temp*10000;
R2_value=R2_temp*10000;
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))*Temp_Pre;
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));
temp_n=0;
}
AD_Count=0;
}
}
|
|