6585|6

5260

帖子

239

TA的资源

管理员

楼主
 

ST加速计使用基础篇【ST工程师干货文章分享】 [复制链接]

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

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

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





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

  

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


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

六个寄存器分别以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 轴与水平面的夹角。


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




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



图片10.png (74.14 KB, 下载次数: 3)

图片10.png
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

最新回复

原来是这样,一言道破真相  详情 回复 发表于 2019-4-29 14:27
点赞 关注(1)
 
 

回复
举报

1300

帖子

0

TA的资源

纯净的硅(中级)

沙发
 
谢谢分享
个人签名

 

 

 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
正在 学习中,感谢分享

点评

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

回复

5260

帖子

239

TA的资源

管理员

4
 
shilinzhu_1 发表于 2018-7-8 09:45
正在 学习中,感谢分享

欢迎来论坛分享心得
或者遇到问题来论坛交流
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

5
 
本帖最后由 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
 
 
 

回复

9790

帖子

24

TA的资源

版主

6
 
本帖最后由 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

帖子

0

TA的资源

一粒金砂(初级)

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

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

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表