【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℃

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章