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℃