智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1192|回复: 1
打印 上一主题 下一主题

电磁定位程序算法求解

[复制链接]

15

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
469
威望
285
贡献
104
兑换币
152
注册时间
2014-2-18
在线时间
40 小时
毕业学校
安徽师范大学
跳转到指定楼层
1#
发表于 2014-4-4 20:55:26 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
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在程序中的作用,求赐教

回复

使用道具 举报

25

主题

346

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3639

活跃会员奖章优秀会员奖章论坛元老奖章在线王奖章

威望
1617
贡献
1018
兑换币
901
注册时间
2012-5-31
在线时间
502 小时
2#
发表于 2014-4-5 10:07:30 | 只看该作者
感觉应该是对偏移量计算的修正,很多算法在偏移量增大到一定程度后计算出来的值反而变小
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-2-23 23:00 , Processed in 0.064080 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表