标定是通过测量标准器的偏差来补偿仪器系统误差,从而改善仪器或系统准确度、精度的操作。为了提高电压电流表在测量时的测量精度和准确度,需要对电压电流进行标定校准。
常见的标定原理如下:假设一个采样系统,AD部分可以得到数字量,对应的物理量为电压(或电流);① 若在“零点”标定一个AD值点Xmin,在“最大处”标定一个AD值点Xmax,根据“两点成一条直线”的原理,可以得到一条由零点和最大点连起来的一条直线,这条直线的斜率k很容易求得,然后套如直线方程求解每一个点X(AD采样值),可以得到该AD值对应的物理量(电压值):
上图中的斜率k:k =(Ymax-Ymin)/(Xmax-Xmin)(因为第一点为“零点”,故上面的Ymin = 0) 所以,上图中任一点的AD值对应的物理量:y = k×(Xad- Xmin)+0② 上面的算法只是在“零点”和“最大点”之间做了标定,如果使用中间的AD采样值会带来很大的对应物理量的误差,解决的办法是多插入一些标定点。如下图,分别插入了标定点(x1,y1)、(x2,y2)、(x3,y3)、(x4,y4) 四个点:
这样将获得不再是一条直线,而是一条“折现”(相当于分段处理),若欲求解落在x1和x2之间一点Xad值对应的电压值:y = k×(Xad– X1)+ y1 由上看出,中间插入的“标定点”越多,得到物理值“精度”越高。在电压电流表测量可以使用“电压电流标定板”“万用表”等配合适合,对采集的电压电流进行标定处理。标定点越多,测量越精确。参考例程中,使用了3点标定。其中,电压标定点为0V、5V、15V。电流标定点为0A、0.5A、1.5A。标定代码如下:
void Volt_Cal(void)
{
float t,KT1;
V_Buffer = Mean_Value_Filter(Volt_Buffer,ADC_SAMPLE_SIZE);//使用均值滤波
I_Buffer = Mean_Value_Filter(Curr_Buffer,ADC_SAMPLE_SIZE); //使用均值滤波
if(V_Buffer >=X05) //
{
t=V_Buffer-X05;
V_Buffer=(K*t+Y05)*1000;}
else
{
KT1=5000;
KT1=KT1/X05;
V_Buffer=KT1*V_Buffer;
}
// 四舍五入
if(V_Buffer % 10 >= 5)
{
V_Buffer = V_Buffer / 10 + 1;
}
else
{
V_Buffer = V_Buffer / 10;
}
if(I_Buffer >=IX05)
{
t=I_Buffer-IX05;
I_Buffer=(KI*t+IY05)*10;
}
else
{
KT1=500;
KT1=KT1/IX05;
I_Buffer=KT1*I_Buffer;
}
if(I_Buffer % 10 >= 5)
{
I_Buffer = I_Buffer / 10 + 1;
}
else
{
I_Buffer = I_Buffer / 10;
}
// I_Buffer=I_Buffer * ADC_REF_VALUE > > 12;
/**
mv =I_Buffer * ADC_REF_VALUE > > 12,
R = 100mr,
10ma = mv/R/10=mv/0.1/10 = mv
*/
}
该例程使用按键操作来标定。具体操作方法如下:定义5个工作模式,点按按键切换工作模式,长按3S设置对应模式下的参数值,并保存到FLASH:模式0:显示正常的电压电流值*(上一排数码管显示电压值*.** V或**.* V自动切换,下一排显示电流值,*.** A)
模式1:电压5V标定值设置。上一排数码管显示S.05. 。下一排显示当前电压值 . * V或**.*V。当长按3S 按键时,将当前值标定为5V电压值。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !