【BLE】TLSR8258开发记录之14--MTK平均动力学温度的计算

1、说明

需要在PDF报告上生成平均动力学温度(MKT)的参数,故而需要在设备中进行MKT的计算,MKT计算方式参考百度文库点击
公式如下
在这里插入图片描述

2、操作

SDK3.4中不支持math.h数学库,故需要自己实现exp和ln函数的功能,采用查表法
首先需要求出公式中红框的值:利用已知的温度范围(-40~80℃)在PC平台上计算出对应的值
2.1、公式中红框的表格数据源码如下(运行在在dev-c++平台)

   double mkt_exp_data=0;
   double mytemp = -40;//假设设备测量的温度范围为-40~80℃
   int i;

    for(i=0;i<1201;i++)//总共有1201个数据
    {
        mkt_exp_data =  1.0/(exp(10000.0/(mytemp+273.100000)));
        //printf("mytemp:[%d:%.01f]:%.25f,  ",i,mytemp,mkt_exp_data);
        printf("%.25f,  ",mkt_exp_data);
        mytemp += 0.1;
        if((i+1)%5==0) printf("\r\n");
    }

运行结果部分截图如下
在这里插入图片描述2.1.1、单片机中的查表
将采集到的温度与表格数据对应起来

     if(temp<=12685 && temp>=685)//采集到的温度在-40~80℃之间,temp为实际温度值扩大100倍再加上4685,例如25℃时temp=25*100+4685=7185
     {
        Now_Parameter.mkt_exp_data +=  MG_MKT_Exp_Data[(temp-4685)/10+400];
     }
     else if(temp>12685)//采集到的温度大于80℃
     {
        Now_Parameter.mkt_exp_data += MG_MKT_Exp_Data[1200];
     }
     else if(temp<685)//采集到的温度小于-40℃
     {
        Now_Parameter.mkt_exp_data += MG_MKT_Exp_Data[0];
     }

2.2、根据公式,进行对温度值的exp值进行累加和求平均后,此时我们可以根据exp的表值反推出实际的mkt值,从而绕过ln运算
查找方法:得到exp的均值A后,在exp的表exp_data[]中找到最后一个小于或等于均值A的值B的下标,查找利用二分法,代码如下

int find_mkt_data(float value,int add_start,int add_stop)
{
    int last_add_mid,next_add_start,next_add_stop;
    
    if(add_start<0 || add_stop>1200)
    {
        return -1;
    }    
    
    last_add_mid = (add_start+add_stop)/2;
    
    if(MG_MKT_Exp_Data[last_add_mid]>=value)
    {
        next_add_start = add_start;
        next_add_stop = last_add_mid;
        
        if(add_stop == next_add_stop)
        {
            return  add_start;
        }
        else
        {
            return find_mkt_data(value,next_add_start,next_add_stop);
        }            
    }
    else
    {
        next_add_start = last_add_mid;
        next_add_stop = add_stop;
        
        if(next_add_start == add_start)
        {
            return add_start;
        }
        else
        {
            return find_mkt_data(value,next_add_start,next_add_stop);
        }
    }
}

2.3、查找到数组的下表后,便可根据exp的表值进行对mkt值的运算

 	float temp;
    int Address;
    
    printf("please enter temp data:");//输入采集温度累积exp和的平均值
    scanf("%f",&temp);
    
    Address = find_mkt_data(temp,0,1200);
    
    printf("Address:%d,data:%.25f\r\n",Address,MG_MKT_Exp_Data[Address]);
    printf("mtk value:%d\r\n",Address+1-400);//注:此处打印的mkt温度值是扩大10倍的

在设备上运行测试结果如下,右侧为设备的打印信息
在这里插入图片描述最终计算得出的MKT值为:19.3℃,而根据mkt计算公式利用计算器算出的mkt值为19.352℃

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值