迪文科技论坛

 找回密码
 立即注册
搜索
查看: 173|回复: 1

【提问】求86盒NTC的官方C代码

[复制链接]

22

主题

71

回帖

675

积分

高级会员

Rank: 4

积分
675
发表于 2025-12-12 11:15:22 | 显示全部楼层 |阅读模式
White_TC040C17U00,现在项目在用86盒的NTC功能,自己写C检测误差较大;求完整的官方案例;
void Get_Temperature(u16 tim,u16 n);
回复

使用道具 举报

0

主题

466

回帖

2827

积分

金牌会员

Rank: 6Rank: 6

积分
2827
发表于 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;
        }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2026-3-4 19:21 , Processed in 0.035247 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表