有序数组二分法查找求温度;

float temprature;

1.直接计算法

//12位adc 基准要用上拉电阻Rp供电相同(3v3)!!!    

//NTC B值  Bx_sel=3950/3450/...
float Get_Temp_ad(u16 Bx_sel,u32 adc)
{

    #if true
        if(Bx_sel<3000||Bx_sel>5000)return -1;Bx=Bx_sel; 
    #else
            const u16 Bxs[]={3380,3950,3980};
        if(Bx_sel>sizeof(Bxs)/2)Bx_sel=0;Bx = Bxs[Bx_sel];
    #endif
        float Rt;
        float temp;
//      int  ADC_MAX=2^12;
        //3980;//3950.0;//B3380
//        Rt = Get_TempResistor(channel_channel);Rt_/Rp+Rt_=ad/4096;  1+Rp/Rt= 40960/ad; Rt=Rp/(4096.0f/ad-1);  12位adc 基准要用Rp供电相同(3v3)!!!
        Rt=Rp/(4096.0f/adc-1);//RP 10k, Rt~10k~25℃  //RP 100k, Rt~100k~25℃
        //like this R=5000, T2=273.15+25,B=3470, RT=5000*EXP(3470*(1/T1-1/(273.15+25)),  
        temp = Rt/Rp;
        temp = log(temp);//ln(Rt/Rp)
        temp/=Bx;//ln(Rt/Rp)/B
        temp+=(1/T2);
        temp = 1/(temp);
        temp-=Ka;
        return temp;

2.精度和时间要求不高时 ,顺序查表法
s8 get_temprature_NTC10K(u16 adc)//12位adc
{
    //#define  countof(a)   (sizeof(a)/(*a))
    #define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0]))
     const u16 NTC10K3435_AD_10du[]={3586,3329,3006,2635,2243,1859,1507,1202,950,747,587,460,361,284};/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值