智能车制作

标题: 电磁定位程序算法求解 [打印本页]

作者: 风雨同舟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