社区导航

 

搜索
查看: 3208|回复: 6

[力学传感器] ST加速计使用基础篇【ST工程师干货文章分享】

[复制链接]

3644

TA的帖子

202

TA的资源

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2017-3-9 11:24 | 显示全部楼层 |阅读模式

随着手机,运动,游戏,亦即物联网的深入发展, MEMS sensor已经无处不在,
所以 有越来越多的工程师开始接触到运动传感器。 ST 拥有全球最全面的 MEMS 产品线, 加速度,陀螺仪,磁力计 已广泛应用到各个领域。 今天我给初次接触ST 加速度计的伙伴们介绍一些最基本的使用技巧。此次以lis3dh为例。

()sensor 设置
Lis3dh 是一颗数字的加速度计,有别于古老的模拟加速计输出模拟信号(通常是电压)来反应加速度的大小,它可以直接输出加速度数值, 原因是它内部已经将模拟信号通过ADC采样转换成了数字。既然是由ADC 采样而来的数据,这里就有两个最最要的概念.

1 FULLSCALE
就是你想要测量的范围,以LIS3DH为例,有 +- 2, +-4, +-8  ,+-16 G,  对应如下寄存器FS0-FS1 两个bit .

图片2.png
图片3.png


2 ODR ( Output data rate)
     如下寄存器 ODR0-ODR3. 这四个bit定义了 power down ,1 hz 一直到5khz 的数值的输出频率。Power down 是sensor的关机模式。   

图片4.png   

到此要使的此sensor 工作,根据你的应用选着合适的FULLSCALE 和 ODR , 只要设置以上两个寄存器就可以了。是不是很简单


(二 读取sensor 数据
Sensor 设置完了接下来又要如何得到真实的加速度数据呢?
数据输出寄存器:
图片5.png
图片6.png
图片7.png

六个寄存器分别以2的补码形式存储了X, Y , Z 三个轴的数据。


Step1: 读取输出寄存器,转换成对应每个轴逻辑数(LSB .
      Example:
注意以下数据类型

              u8 acc_data[6];
              s16 hw_d[3] = { 0 };  // 每个轴对应的逻辑数(LSB)
        acc_data[0] = (OUT_X_L);
        err = lis3dh_acc_i2c_read(stat, acc_data, 6);  //读取输出六个寄存器
        hw_d[0] = (((s16) ((acc_data[1] << 8) | acc_data[0])) >> 4);  //X
        hw_d[1] = (((s16) ((acc_data[3] << 8) | acc_data[2])) >> 4);  //Y
        hw_d[2] = (((s16) ((acc_data[5] << 8) | acc_data[4])) >> 4);  //Z

这里为什么要右移4位 ,是因为lis3dh 是12 位的加速计。如果用ST 精度更高的加速计,要调整适当的右移位数。如果是16bit , 就没有必要右移了。

  Step2 :  得到轴对应的LSB后, 再根据sensor 的精度值(sensitivity)计算出最终的加速 度值。
在器件的特性表里可以找到对应的精度值,四个精度值对应了四个不同的FULLSCAL.
Note: 这里有很多同学习惯用sensor的fullscale 和 器件的位数反推出精度来,我想更正的是,此方法不适用于 ST的所有MEMS器件。 必须严格参考特性表里的sensitivity值。

hw_d[0] = hw_d[0] * sensitivity;  // hw_d[0] 代表了最终的加速度值。
hw_d[1] = hw_d[1] * sensitivity;
hw_d[2] = hw_d[2] * sensitivity;

Tips : 读取数据的方式有中断和polling的方式,这取决于应用对加速的响应速度。 在要求省电的环境时,可以使用用sensor 的fifo模式. 另外sensor还能实现一些简单的姿态 识别, 如 单击,双击, free fall, wake up  等等,请伙伴们参考此sensor的应用手册 或在以后文档中再作介绍 。    (www.st.com 有所有器件的相关文档)。



(三)加速度应用
    加速度计是测量加速度的, 根据公式F=ma ,(m是质量, a 是加速度),  因为这里质量是不变的,所以最终加速度对应的就是sensor所受的外力, 当sensor 只受到重力作用时, 它的加速度的输出就是1个g,  。 这里我们可以做个试验,分别把sensor 的x ,y ,z 轴中的一个轴垂直于地球水平面,而另外两个轴平行水平面, 你会发现垂直水平面的轴输出是1g, 而平行于水平面的轴输出是0g.   然后继续试验,把sensor 任意放在空间中,读取三个轴的数据,看看 是否x*x+y*y+z*z=1g*1g.

如下图,我们常常定义pitch 和 Roll, 分别表示 x 和 y 轴与水平面的夹角。

图片8.png
用三轴的加速计可以很轻易的算出pitch和Roll 两个角度。 Ax1 , Ay1 , Az1分别是三个轴的输出加速度。


图片9.png

Tips : 在实际应用中,由于加速计有offset,  线性等误差,会影响输出的精度,为提高计算的精度,在计算前要做必要的校准。还有一点,以上在做角度计算时前提是sensor只受到重力的作用, 如果有其他外力的影响时,可能还需要结合陀螺仪等做实时的滤波等融合算法。



来源:EEWorld ST传感器与低功耗无线技术论坛板块,转载请附上链接

扫一扫,关注 EEWORLD 微信订阅号

行业资讯、电子趣闻、技术干货、精彩活动……尽可掌握~

图片10.png


回复

使用道具 举报

920

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2017-3-9 13:07 | 显示全部楼层
谢谢分享
大秦正声蓝牙电子
提供蓝牙芯片批量生产烧录服务:1带3脱机烧录工具,支持cc2540/cc2541,cc2530/2531,同时可以烧录msp430fr系列铁电mcu


回复

使用道具 举报

4

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-7-8 09:45 | 显示全部楼层
正在 学习中,感谢分享

点评

nmg
欢迎来论坛分享心得 或者遇到问题来论坛交流  详情 回复 发表于 2018-7-9 09:57


回复

使用道具 举报

3644

TA的帖子

202

TA的资源

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

 楼主| 发表于 2018-7-9 09:57 | 显示全部楼层
shilinzhu_1 发表于 2018-7-8 09:45
正在 学习中,感谢分享

欢迎来论坛分享心得
或者遇到问题来论坛交流


回复

使用道具 举报

2

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2019-4-29 09:51 | 显示全部楼层
本帖最后由 Alex.Guo 于 2019-4-29 09:52 编辑

是不是搞错了?不是应该Data_H左移4位+Data_L右移4位么?
hw_d[0] = (((s16) ((acc_data[1] << 4) | acc_data[0])) >> 4);  //X
hw_d[1] = (((s16) ((acc_data[3] << 4) | acc_data[2])) >> 4);  //Y
hw_d[2] = (((s16) ((acc_data[5] << 4) | acc_data[4])) >> 4);  //Z

点评

估计你是被大量的括号弄迷糊了 ACC = MSB= 4 右移4位后丢掉低4位,高4位补1,变成有符号的12位数据  详情 回复 发表于 2019-4-29 11:02


回复

使用道具 举报

6369

TA的帖子

10

TA的资源

版主

Rank: 6Rank: 6

发表于 2019-4-29 11:02 | 显示全部楼层
本帖最后由 littleshrimp 于 2019-4-29 11:04 编辑
Alex.Guo 发表于 2019-4-29 09:51
是不是搞错了?不是应该Data_H左移4位+Data_L右移4位么?
hw_d[0] = (((s16) ((acc_data[1] > 4);  //X
h ...

估计你是被大量的括号弄迷糊了
ACC = MSB<<8 | LSB 得到一个有符号的16位数据,高位为符号位
ACC >>= 4 右移4位后丢掉低4位,变成有符号的12位数据
虾扯蛋


回复

使用道具 举报

2

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2019-4-29 14:27 | 显示全部楼层
littleshrimp 发表于 2019-4-29 11:02
估计你是被大量的括号弄迷糊了
ACC = MSB= 4 右移4位后丢掉低4位,变成有符号的12位数据

原来是这样,一言道破真相


回复

使用道具 举报

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

关闭

站长推荐上一条 /5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-9-18 13:01 , Processed in 0.226329 second(s), 19 queries , Gzip On, MemCache On.

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