打印

用过加速度传感器MXD2020E测量倾斜角度的大侠们进来聊聊

[复制链接]
3600|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
卧薪又尝胆|  楼主 | 2013-4-10 17:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        MXD2020E的用法大概就是:测出X/Y轴输出信号的占空比,然后根据公式 An=(T1/T2-0.5)/20%   和 α = arcsin An/gn   即可算出倾斜角度
         在网上找了一个程序,分析了一下 大概流程是这样的 用定时器测量高电平的时间,每10us进一次中断,制定了两个表格,每0.5°做一个元素,范围是-45°~45°,精度是0.5°,然后根据测量出来的时间 通过查表得到角度值
       工程上要求精度是0.1°,测量范围是-90°~90°,如果现在还用表格有点不太现实对吗?通过示波器测量输出信号,占空比最大为70%,即90°,最小为30%,即-90°。要想提高精度,就要提高采样的频率,即缩短定时器每次进中断的时间,我采用的是12M晶振,
if(X_Pre==0)
  TempX = 0;    // 清除X轴计数器
else if(X_Current==1)
  TempX++;    // X轴计数器增加
else
  Ax = TempX;    // 导出X轴计数器结果
X_Pre = X_Current;
这是中断程序,Ax*单次中断的时间,即是高电平的时间,理论上单次中断的时间越短,则算出来的角度精度越高,但是采用12M晶振,实际测下来执行一次中断最短也要约5us,这样角度精度依然不够,想来想去,决定不用中断,直接在主函数中做,程序如下:
while(1)
{
  key_scan();
  
   if(key_en_flag)
   {
       key_en_flag = 0;
       EA=0;
       angel = 0;
       for(i=0;i<10;i++)
       {
               while(X_IN);
               while(!X_IN);
               TR3=1;
              while(X_IN);
              TR3=0;
              angel += TH3*256;
             angel += TL3 ;
             TL3= 0;
             TH3= 0;
   }
   
   angel = angel/10;
   angel = angel*2/3;  //时钟周期个数*1/12us*8
   
   angel = (angel/10000-0.5)*5;
      angel = asin(angel);
      angel = angel*180/PI;
   angel = angel * 10;
   angel = angel + 0.5;//四舍五入
   angel = (int)angel;
   EA = 1;
   ranger_en = 1;
  }

      display(angel);        
}
简单说下思路,当检测到测量按键以后,关闭总中断,等待信号输出脚的低电平,测到高定平时,开启定时器,测到低电平时,在关闭定时器,
得到定时器的值,即为高电平的时间,这样做10次,再取平均值,减小误差,得到了时间 (这样得到的时间值和实际的时间有大约10us的误差,不不知道什么原因,请高手们指点一下)     把测得时间带入两个公式 ,求出角度。

这样测试下来精度能达到0.1°,范围在-75°~90°之间,-75°~-90° 测不出来 不知道什么原因?


我知道上面讲的可能有很多错误,请高手们指点一下啊





相关帖子

沙发
airwill| | 2013-4-10 18:15 | 只看该作者
哦, 在讲测高电平时间哪
不如用 51 定时器里的 GATE 来控制,配合 INT0/1 可以最高精度测量脉冲时间。
软件处理也简单

使用特权

评论回复
板凳
卧薪又尝胆|  楼主 | 2013-4-10 18:36 | 只看该作者
airwill 发表于 2013-4-10 18:15
哦, 在讲测高电平时间哪
不如用 51 定时器里的 GATE 来控制,配合 INT0/1 可以最高精度测量脉冲时间。
软 ...

信号脚接的是普通引脚 不是INT0/1 ,硬件已经不定不能改了啊  

使用特权

评论回复
地板
airwill| | 2013-4-10 19:12 | 只看该作者
那么你这个设计方案有缺陷,只好把中断服务和中断系统精打细算,避免中断延迟导致误差了

使用特权

评论回复
5
卧薪又尝胆|  楼主 | 2013-4-11 09:32 | 只看该作者
airwill 发表于 2013-4-10 19:12
那么你这个设计方案有缺陷,只好把中断服务和中断系统精打细算,避免中断延迟导致误差了 ...

不用中断了 在主程序中直接处理的 处理一共用了大约100MS 关闭了总中断 这个时候不能做其他事情了 不知道这样合理吗

使用特权

评论回复
6
airwill| | 2013-4-11 09:35 | 只看该作者
应该也可以实现了

使用特权

评论回复
7
quanjj123| | 2013-8-15 09:56 | 只看该作者
占空比测量用AVR很方便的。先上升沿捕获,再改为下降沿捕获,再改为上升沿捕获,三次捕获值即可计算出占空比。我用步进电机控制,实测了占空比和倾斜角的数据表,在实用中很方便。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

92

帖子

1

粉丝