在理想状态下,X轴测量数据与Y轴测量数据变化范围都应是-32768~32767 之间,X轴数据与Y轴数据组成的坐标刚好构成一个正圆形如图 2.4,但实际测量中,X轴测量数据与Y轴测量数据最大值或最小值均达不到-32768~32767 这个范围,则导致这两个数据组成坐标构成的图形成为一个中心不在原点的椭圆形,如图
电子导向模组实际测量坐标图
为了得到准确的方向值必须对电子导向模组返回的数据进行校正,将椭圆调整为正圆形,这样才能得到更准确的角度值。这就需要电子导向模组进入校正模式得到四个校正参数,这
四个校正参数分别是椭圆中心的坐标(xOffset,yOffset)和椭圆两个半轴的长度xRange,yRange。电子导向模组校正模式执行的操作为持续纪录X 轴、Y 轴测量数据的最大值和最小值,因此在校正模式下要不停的旋转电子导向模组来得到尽可能精确的X 轴、Y 轴测量数据的最大值和最小值。得到X 轴、Y 轴测量数据的最大值和最小值后就可以求出四个校正参数了。每次开机或每到一个新地方都应该进入校正模式,重新获得校正参数。计算校正参数的参考代码如下。
int Xmax,Xmin,Ymax,Ymin;
int Xraw,Yraw;
int i;
Xmax = Ymax = -32768; // 将最大值赋值为最小值
Ymin = Ymin = 32767; // 将最小值赋值为最大值
for(i = 0; i <100; i++)
{
Xraw = F_PNI_11096_Read(0xE9); // 得到x 轴大小
Yraw = F_PNI_11096_Read(0xEA); // 得到Y 轴大小
if(Xraw > Xmax)
Xmax = Xraw; // 得到一个尽可能大的值作为X 最大值
if(Xraw < Xmin)
Xmin = Xraw; // 得到一个尽可能小的值作为X 最小值
if(Yraw > Ymax)
Ymax = Yraw; // 得到一个尽可能大的值作为Y 最大值
if(Yraw < Ymin)
Ymin = Yraw; // 得到一个尽可能小的值作为Y 最大值
}
xOffset = (Xmax + Xmin)>>1; // 得到X 轴偏移量
yOffset = (Ymax + Ymin)>>1; // 得到Y 轴偏移量
xRange = Xmax - Xmin; // 得到X 轴取值范围
yRange = Ymax -Ymin; // 得到Y 轴取值范围
return 0;
在正常的测量模式下,电子导向模组X 轴、Y 轴测量数据都要利用在校正模式下得到的参