加速度计和陀螺仪指南

上传人:cn****1 文档编号:487104889 上传时间:2023-03-07 格式:DOCX 页数:15 大小:253.30KB
返回 下载 相关 举报
加速度计和陀螺仪指南_第1页
第1页 / 共15页
加速度计和陀螺仪指南_第2页
第2页 / 共15页
加速度计和陀螺仪指南_第3页
第3页 / 共15页
加速度计和陀螺仪指南_第4页
第4页 / 共15页
加速度计和陀螺仪指南_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《加速度计和陀螺仪指南》由会员分享,可在线阅读,更多相关《加速度计和陀螺仪指南(15页珍藏版)》请在金锄头文库上搜索。

1、介绍本指南旨在向兴趣者介绍惯性MEMS (微机电系统)传感器,特别是加速度计和陀螺仪以及 其他整合IMU (惯性测量单元)设备。IMU单兀例子:上图中MCU顶端的ACC Gyro 6DOF,名为USBThumb,支持USB/串口通信在这篇文章中我将概括这么几个基本并且重要的话题:-加速度计(accelerometer)检测什么-陀螺仪(gyroscope,也称作gyro)检测什么-如何将传感器ADC读取的数据转换为物理单位(加速度传感器的单位是g,陀螺仪的单 位是度/秒)-如何结合加速度传感器和陀螺仪的数据以得到设备和地平面之间的倾角的准确信息 在整篇文章中我尽量将数学运算降低到最少。如果你知

2、道什么是正弦、余弦、正切函数,那 无论你的项目使用哪种平台你应该都会明白和运用这篇文章中的思想,这些平台如 Arduino、Propeller、Basic Stamps Ateml芯片、PIC芯片等等。总有些人认为使用IMU单 元需要复杂的数学运算(复杂的FIR或IIR滤波,如卡尔曼滤波,Parks-McClellan滤波等)。 你如果研究这些会得到很棒且很复杂的结果。我解释事情的方式,只需要基本的数学。我非 常坚信简单的原则。我认为一个简单的系统更容易操作和监控,另外许多嵌入式设备并不具 备能力和资源去实现需要进行矩阵运算的复杂算法。我会用我设计的一 新IMU模块 Acc Gyro Acce

3、lerometer + Gyro IMU 作为例子。在下 面的例子中我们会使用这个设备的参数。用这个模块作为介绍非常合适,因为它由3个设备 组成:-LIS331AL (datasheet) - 3 轴 2G 模拟加速度计-LPR550AL (datasheet)-双轴(俯仰、翻滚)500/s加速度传感器-LY550ALH (datasheet)-单轴(偏航)陀螺仪最后这个设备在这篇介绍中不使用,不过他 在 DCM Matrix implementation 中有重要作用它们一起组成了一个6自由度的惯性测量单元。这是个花哨的名字!然而,在花哨的名字后 面是个非常有用的设备组合,接下来我们会详细介

4、绍之。第一部分加速度计要了解这个模块我们先从加速度计开始。当我们在想象一个加速度计的时候我们可以把它想 作一个圆球在一个方盒子中。你可能会把它想作一个饼干或者甜圈,但我就把它当做一个球 好了:STILL WEIGTLE55 STATP我们假定这个盒子不在重力场中或者其他任何会影响球的位置的场中,球处于盒子的正中 央。你可以想象盒子在外太空中,远离任何天体,如果很难想象,那就当做盒子在航天飞机 中,一切东西都处于无重力状态。在上面的图中你可以看到我们给每个轴分配了一对墙俄 们移除了 Y+以此来观察里面的情况)。设想每面墙都能感测压力。如果我们突然把盒子向左 移动(加速度为1g=9.8m/s八2)

5、,那么球会撞上X-墙。然后我们检测球撞击墙面产生的压力, X轴输出值为-1g。请注意加速度计检测到得力的方向与它本身加速度的方向是相反的。这种力量通常被称为惯 性力或假想力。在这个模型中你你应该学到加速度计是通过间接测量力对一个墙面的作用 来测量加速度的,在实际应用中,可能通过弹簧等装置来测量力。这个力可以是加速度引起 的,但在下面的例子中,我们会发现它不一定是加速度引起的。如果我们把模型放在地球上,球会落在Z-墙面上并对其施加一个1g的力,见下图:GROUND在这种情况下盒子没有移动但我们任然读取到Z轴有-1g的值。球在墙壁上施加的压力是由 引力造成的。在理论上,它可以是不同类型的力量-例如

6、,你可以想象我们的球是铁质的, 将一个磁铁放在盒子旁边那球就会撞上另一面墙。引用这个例子只是为了说明加速度计的本 质是检测力而非加速度。只是加速度所引起的惯性力正好能被加速度计的检测装置所捕获。 虽然这个模型并非一个MEMS传感器的真实构造,但它用来解决与加速度计相关的问题相 当有效。实际上有些类似传感器中有金属小球,它们称作倾角开关,但是它们的功能更弱, 只能检测设备是否在一定程度倾斜,却不能得到倾斜的程度。到目前为止,我们已经分析了单轴的加速度计输出,这是使用单轴加速度计所能得到的。三 轴加速度计的真正价值在于它们能够检测全部三个轴的惯性力。让我们回到盒子模型,并将 盒子向右旋转45度。现

7、在球会与两个面接触:Z-和X-,见下图:GROUND0.71g这个值是不是任意的,它们实际上是1/2的平方根的近似值。我们介绍加速度计的下 一个模型时这一点会更清楚。在上一个模型中我们引入了重力并旋转了盒子。在最后的两个例子中我们分析了盒子在两种 情况下的输出值,力矢量保持不变。虽然这有助于理解加速度计是怎么和外部力相互作用的, 但如果我们将坐标系换为加速度的三个轴并想象矢量力在周围旋转,这会更方便计算。请看看在上面的模型,我保留了轴的颜色,以便你的思维能更好的从上一个模型转到新的模 型中。想象新模型中每个轴都分别垂直于原模型中各自的墙面。矢量R是加速度计所检测的矢量(它可能是重力或上面例子中

8、惯性力的合成)。RX, RY, RZ是矢量R在X, Y,Z上 的投影。请注意下列关系:,R八2二RX八2 + RY八2 + RZ八2(公式1)此公式等价于三维空间勾股定理。还记得我刚才说的1/2的平方根0.71不是个随机值吧。如果你把它们代回上式,回顾一下 重力加速度是1g,那我们就能验证:1 八 2 二(SQRT (1/2)八 2 + 0 八 2 + (SQRT (1/2)八 2在公式1中简单的取代:R=1, Rx =-SQRT(1/2), Ry = 0 , Rz =-SQRT(1/2)经过一大段的理论序言后,我们和实际的加速度计很靠近了 RX, RY, RZ值是实际中加速 度计输出的线性相

9、关值,你可以用它们进行各种计算。在我们运用它之前我们先讨论一点获取加速度计数据的方法。大多数加速度计可归为两类: 数字和模拟。数字加速度计可通过I2C, SPI或USART方式获取信息,而模拟加速度计的输 出是一个在预定围的电压值,你需要用ADC (模拟量转数字量)模块将其转换为数字值。 我将不会详细介绍ADC是怎么工作的,部分原因是这是个很广的话题,另一个原因是不同 平台的ADC都会有差别。有些MCU具有置ADC模块,而有些则需要外部电路进行ADC转 换。不管使用什么类型的ADC模块,你都会得到一个在一定围的数值。例如一个10位ADC 模块的输出值围在0 . 1023间,请注意,1023=2

10、 a 10 -1。一个12位ADC模块的输出值 围在 0 . 4095,注意,4095 = 2 a 12-1。我们继续,先考虑下一个简单的例子,假设我们从10位ADC模块得到了以下的三个轴的数 据:AdcRx = 586AdcRy = 630AdcRz = 561每个ADC模块都有一个参考电压,假设在我们的例子中,它是3.3V。要将一个10位的ADC 值转成电压值,我们使用下列公式: VoltsRx 二 AdcRx * VREF / 1023小注:8位ADC的最大值是255=2 a 8 -1, 12位ADC最大值是4095=2 a 12 -1。将3个轴的值代入上式,得到:VoltsRx = 5

11、86* 3.3 /1023二 1.89V(结果取两位小数)VoltsRy = 630* 3.3 /1023二 2.03VVoltsRz = 561* 3.3 /1023二 1.81V每个加速度计都有一个零加速度的电压值,你可以在它的说明书中找到,这个电压值对应于 加速度为0g。通过计算相对0g电压的偏移量我们可以得到一个有符号的电压值。比方说, 0g电压值VzeroG=1.65V,通过下面的方式可以得到相对0g电压的偏移量: DeltaVoltsRx = 1.89V - 1.65V = 0.24V DeltaVoltsRy = 2.03V - 1.65V = 0.38V DeltaVoltsR

12、z = 1.81V - 1.65V = 0.16V现在我们得到了加速度计的电压值,但它的单位还不是g (9.8m/sA2),最后的转换,我们 还需要引入加速度计的灵敏度(Sensitivity),单位通常是mV/g。比方说,加速度计的灵敏 度Sensitivity=478.5mV / g=0.4785V /以灵敏度值可以在加速度计说明书中找到。要获得 最后的单位为g的加速度,我们使用下列公式计算: RX 二 DeltaVoltsRx /SensitivityRX = 0.24V / 0.4785V / G = 0.5gRY = 0.38V / 0.4785V / G = 0.79gRZ = 0

13、.16V / 0.4785V / G = 0.33g当然,我们可以把所有的步骤全部放在一个式子里,但我想通过介绍每一个步骤以便让你了(公式2)解怎么读取一个ADC值并将其转换为单位为g的矢量力的分量。Rx = (AdcRx * Vref / 1023 - VzeroG) / SensitivityRy = (AdcRy * Vref / 1023 - VzeroG) / SensitivityRz = (AdcRz * Vref / 1023 - VzeroG) / Sensitivity现在我们得到了惯性力矢量的三个分量,如果设备除了重力外不受任何外力影响,那我们就 可以认为这个方向就是重力

14、矢量的方向。如果你想计算设备相对于地面的倾角,可以计算这 个矢量和Z轴之间的夹角。如果你对每个轴的倾角都感兴趣,你可以把这个结果分为两个 分量:X轴、丫轴倾角,这可以通过计算重力矢量和X、丫轴的夹角得到。计算这些角度比 你想象的简单,现在我们已经算出了 Rx, Ry, Rz的值,让我们回到我们的上一个加速度模 型,再加一些标注上去:我们感兴趣的角度是向量R和X, Y, Z轴之间的夹角,那就令这些角度为Axr, Ayr, Azr。观察由R和Rx组成的直角三角形:cos(Axr) = Rx / R ,类似的:cos(Ayr) = Ry / Rcos(Azr) = Rz / R从公式 1我们可以推导

15、出R = SQRT( Rx八2 + Ry八2 + Rz八2)通过arccos()函数(cos()的反函数)我们可以计算出所需的角度:Axr = arccos(Rx/R)Ayr = arccos(Ry/R)Azr = arccos(Rz/R)我们花了大段的篇幅来解释加速度计模型,最后所要的只是以上这几个公式。根据你的应用 场合,你可能会用到我们推导出来的几个过渡公式。我们接下来要介绍陀螺仪模块,并向大 家介绍怎么融合加速度计和陀螺仪的数据以得到更精确的倾角值。但在此之前,我们再介绍几个很常用的公式:cosX = cos(Axr) = Rx / RcosY = cos(Ayr) = Ry / RcosZ = cos(Azr) = Rz / R这三个公式通常称作方向余弦,它主要表达了单位向量(长度为1的向量)和R向量具有 相同的方向。你可以很容易地验证:SQRT (cosX 八 2 + COSY 八 2 + cosZ 八 2) = 1这是个很好的性质,因为它避免了我们一直检测R向量的模(长度)。通常如果我们只是对 惯性力的方向感兴趣,那标准化模长以简化其他计算是个明智的选择。第二部分陀螺仪对于陀螺仪我们将不会像加速度计一样介绍它的等价盒子模型,而是直接跳到加速度计的第 二个模型,通过这个模型我们会向大家介绍陀螺仪是怎么工作的。陀螺仪的每个通道检测一个轴的旋转。例如

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号