MMA7260角度测量小结.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MMA7260角度测量小结

MMA7260是飞思卡尔半导体公司生产的三轴加速度传感器,下面是网友的一段原话…. 加速度传感器测的是什么? 我觉得很多时候大家都被它的名字给误导了 我觉得准确的来说它测的不是加速度 至少对于mma7260这类的片子 它检测的是它受到的惯性力(包括重力!重力也是惯性力)。那又有人要问了 F=ma 惯性力不就是加速度么? 差矣 加速度传感器实际上是用MEMS技术检测惯性力造成的微小形变 注意 检测的是微小形变 所以 你把加速度传感器 水平静止放在桌子上 它的Z轴输出的是1g的加速度 因为它Z轴方向被重力向下拉出了一个形变 可是你绝对不会认为它在以1g的加速度往下落吧 你如果让它做自由落体 它的Z轴输出应该是0 给个形象的说法 可以把它看成是一块弹弹胶 它检测的就是自己在三个方向被外力作用造成的形变。从刚才的分析可以发现 重力这个东西实际是个很恶心的东西 它能隔空打牛,在不产生加速度的情况下对加速度传感器造成形变,在产生加速度的时候不造成形变,而其他力都做不到。可惜的是,加速度传感器不会区分重力加速度与外力加速度。 所以,当系统在三维空间做变速运动时,它的输出就不正确了 或者说 它的输出不能表明物体的姿态和运动状态 举个例子 当一个物体在空间做自由落体时 在X轴受到一个外力作用 产生g的加速度 这时候x y z 轴的输出分别是 g,0,0 如果这个物体被x轴朝下静止放在水平面上 它x y z 轴的输出也分别是 g,0,0 所以说 只靠加速度传感器 来估计自己的姿态 是 很危险而不可取的 且不管它是怎么制造的,我只知道它的三个轴在不同的加速度环境下会给出不同的电压信号,这个电压信号即是当前状态不用对它积分(有别与陀螺仪)知道这个就可以侧角度了. 由图可知,三个轴的正负方向,这里参考的芯片本身,而我们在使用时一般使用的是该模块的一个扩展板,所以要看清扩展板上芯片的方向. 好了,明确这一点后我们就需要找一个扩展板来测角度了,市面上的扩展板接口基本相同,这里以实验室现有的扩展模块为例简要说明。 板子的各个引脚定义已经在图中标上了, 3.3V可以不接,因为模块上有电源管理芯片,当右边的接上5V电后,板子上会产生3.3V的电压。 Enable端接5V就行了。这个是芯片睡眠模式控制,我们上电就让它工作,手机为了功耗才考虑它,我们不管它。 Z、Y、X是芯片给出的三轴模拟电压值,这个值最大也不会大于3.3V,所以对于A/D采样电路的参考电压最好选3.3V,例如同样采用10位的A/D来转换该模拟值,对于3.3V的来说其数字量分布在0—1024,而对于5V的来说最大也不会超过675,所以其精度就不如3.3V的高。还有该传感器灵敏度很高,有一点点震动都会引起数值的变化,这种变化时大时小,在软件设计上不好滤波,所以在使用时将该模拟电压加一个电压跟随器比较好。 g-select1/g-select2就是芯片的灵敏度量程选择, 这里选择的1.5g 800mv/g 的灵敏度,假设我们测量X平面和Z平面的夹角。 如图重力g会在x轴和z轴上有个分量,通过芯片测回这两个分量,就可以知道α角了, 还有一点要注意,由芯片的手册可知各轴在不受外力的情况下其输出电压是1.65V 所以测回值要减去1.65V, /************************************************************* function: MMA7260角度测量 version: V1.0 date: 2011-8-27 note: 三轴加速度测量可以测量x面、y面以及整个平面与水平面 的夹角, 这里简化使用,仅测得x面与水平面的夹角(有正负)-90~~+90 返回一个三位数个位是小数位。 0通道:X 2通道:Z **************************************************************/ int angle_measure(void) { float angle_temp; X_g =(float)AD0[7]*4.85/1024; Z_g =(float)AD2[7]*4.85/1024; X_g = (X_g-1.65)*1.25; Z_g = (Z_g-1.65)*1.25; angle_temp = atan(X_g / Z_g); angle_x_hd = angle_temp ; //保存摆面的 弧度 angle_temp = angle_temp * 60.95; // 57.2957 if(angle_temp=90) //最后的弧度值转化中含有修正因子

文档评论(0)

cgtk187 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档