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℃