智能车制作
标题:
电磁定位程序算法求解
[打印本页]
作者:
风雨同舟1
时间:
2014-4-4 20:55
标题:
电磁定位程序算法求解
void Angle_Culculate()
{
uint i;
AD_GET_VALUE();
/*******************************传感器定位*********************************
此部分应该注意前面的ad采样回来的要滤波不然对后面的定位有影响
made by liurui
20/6/2011
******************************传感器定位**********************************/
ref_AD=85; //有待调试
lost_AD=255; //有待调试
for(i=0;i<6;i++)
{
if(This_AD[i]>This_AD[max_num])
max_num=i;
}
/***************************************************************************
d_max_num应该选择2或是3 选择4几乎就没有作用了
跳变量是几需要实际调试
******************************************************************************/
if(max_num<last_max_num)
d_max_num = last_max_num - max_num; //计算跳变量
else
d_max_num = max_num - last_max_num;
if(d_max_num>=2)
max_num=last_max_num; //非正常跳变
else
last_max_num = max_num; //正常获取最大值 储存当前最大值
last_max_num=max_num;
/***********************数据丢失标志位****************************/
if(This_AD[max_num]<lost_AD) lost_fonction_flag=1;
else
if(This_AD[max_num]>lost_AD) lost_fonction_flag=0;
if(lost_fonction_flag==1) //修改过,bug!!!!!!
{
this_position=last_position;
if(last_position<=centre_position&&max_num==0&&This_AD[0]>lost_AD) lost_fonction_flag=0;
else
if(last_position>centre_position&&max_num==5&&This_AD[5]>lost_AD) lost_fonction_flag=0;
}
else
{
if(max_num==0)
{
if(This_AD[0]<=ref_AD) this_position=0;
else
if(This_AD[1]<ref_AD)
this_position=0+20*(This_AD[0]-ref_AD)/(This_AD[0]-This_AD[1]);
else
this_position=40-20*(This_AD[0]-This_AD[1])/(This_AD[0]-ref_AD);
}
else if(max_num==5)
{
if(This_AD[5]<=ref_AD) this_position=240;
else
if(This_AD[4]>ref_AD) this_position=200+20*(This_AD[5]-This_AD[4])/(This_AD[5]-ref_AD);
else
this_position=240-20*(This_AD[5]-ref_AD)/(This_AD[5]-This_AD[4]);
}
想知道ref-AD在程序中的作用,求赐教
作者:
亦寒
时间:
2014-4-5 10:07
感觉应该是对偏移量计算的修正,很多算法在偏移量增大到一定程度后计算出来的值反而变小
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2