4101|8

60

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

LIS3DHTR 数据转换 bit→g [复制链接]

 关于加速度的数据读取问题,贴个参考版本给大家参考!
传感器寄存器读出的数据的单位是bit,将读出数据乘以sensitivity得到mg单位的值。

  • HAL_I2C_Init();
  •     LIS3DH_GetWHO_AM_I(&dump);
  •     DEBUGOUT("LIS3DH ID:%x\n", dump);
  •      /* Set ODR (turn ON device) */
  •     response = LIS3DH_SetODR(LIS3DH_ODR_400Hz);
  •     if (response == 1) {
  •         DEBUGOUT("SET_ODR_OK\r\n");
  •     }
  •     /* Set PowerMode */
  •     response = LIS3DH_SetMode(LIS3DH_NORMAL);
  •     if (response == 1) {
  •         DEBUGOUT("SET_MODE_OK\r\n");
  •     }
  •     /* Set Fullscale */
  •     response = LIS3DH_SetFullScale(LIS3DH_FULLSCALE_2);
  •     if (response == 1) {
  •         DEBUGOUT("SET_FULLSCALE_OK\r\n");
  •     }
  •     /* Set axis Enable */
  •     response = LIS3DH_SetAxis(LIS3DH_X_ENABLE | LIS3DH_Y_ENABLE | LIS3DH_Z_ENABLE);
  •     if (response == 1) {
  •         DEBUGOUT("SET_AXIS_OK\r\n");



           /* Data bytes from hardware xL, xH, yL, yH, zL, zH */


           u8 acc_data[6];


s16 hw_d[3] = { 0 };


           err = acc_i2c_read_data(stat, acc_data, 6);


           if (err < 0)


                       return err;



           hw_d[0] = ( (s16) ( ( (acc_data[1] << 8) | acc_data[0] ) ) ) >>4; LIS3DH是一个12bit,左对齐的输出,如果16bit精度的话,数据不需要移位


           hw_d[1] = ( (s16) ( ( (acc_data[3] << 8) | acc_data[2] ) ) ) >>4;


           hw_d[2] = ( (s16) ( ( (acc_data[5] << 8) | acc_data[4] ) ) ) >>4;



           hw_d[0] = hw_d[0] * sensitivity;


           hw_d[1] = hw_d[1] * sensitivity;


           hw_d[2] = hw_d[2] * sensitivity;


最新回复

您好,我们这边是LIS3DHTR的,一手货源,老板是从原厂出来的,渠道比较特殊,有需求可以联系我QQ 1260072296   详情 回复 发表于 2017-4-25 15:15
点赞 关注
个人签名ST MEMS技术讨论群:415506792
 
 

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
楼主呀,这个代码排版很让人无语呀

点评

看到你的优化版本了,谢谢!  详情 回复 发表于 2016-12-12 12:52
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
本帖最后由 fkylin 于 2016-11-23 16:04 编辑 下面的代码是LIS3DH的初始化流程,基本上所有的acc和gyro都可以按照下面的流程初始化:读WHOAMI-->设置ODR-->设置POWER MODE-->设置Full Scale-->使能三轴输出
  1. HAL_I2C_Init();

  2. LIS3DH_GetWHO_AM_I(&dump);
  3. DEBUGOUT("LIS3DH ID:%x\n", dump);
  4. /* Set ODR (turn ON device) */
  5. response = LIS3DH_SetODR(LIS3DH_ODR_400Hz);
  6. if (response == 1) {
  7. DEBUGOUT("SET_ODR_OK\r\n");
  8. }
  9. /* Set PowerMode */
  10. response = LIS3DH_SetMode(LIS3DH_NORMAL);
  11. if (response == 1) {
  12. DEBUGOUT("SET_MODE_OK\r\n");
  13. }
  14. /* Set Fullscale */
  15. response = LIS3DH_SetFullScale(LIS3DH_FULLSCALE_2);
  16. if (response == 1) {
  17. DEBUGOU("SET_FULLSCALE_OK\r\n");
  18. }
  19. /* Set axis Enable */
  20. response = LIS3DH_SetAxis(LIS3DH_X_ENABLE | LIS3DH_Y_ENABLE | LIS3DH_Z_ENABLE);
  21. if (response == 1)
  22. {
  23. DEBUGOUT("SET_AXIS_OK\r\n");

    }

复制代码
下面是将寄存器值转为重力加速度的一个方法,例子是基于LIS3DH编写的,由于LIS3DH是12bit左对齐的方式存储数据,因此需要将高位和地位拼接之后再右移。注意:组合后的最高位为符号位,以补码方式存储。
  1. /* Data bytes from hardware xL, xH, yL, yH, zL, zH */
  2. u8 acc_data[6];
  3. s16 hw_d[3] = { 0 };
  4. err = acc_i2c_read_data(stat, acc_data, 6);

  5. if (err < 0)
  6. return err;
  7. //LIS3DH是一个12bit,左对齐的输出,如果16bit精度的话,数据不需要移位

  8. hw_d[0] = ( (s16) ( ( (acc_data[1] << 8) | acc_data[0] ) ) ) >>4;
  9. hw_d[1] = ( (s16) ( ( (acc_data[3] << 8) | acc_data[2] ) ) ) >>4;
  10. hw_d[2] = ( (s16) ( ( (acc_data[5] << 8) | acc_data[4] ) ) ) >>4;
  11. hw_d[0] = hw_d[0] * sensitivity;

  12. hw_d[1] = hw_d[1] * sensitivity;
  13. hw_d[2] = hw_d[2] * sensitivity;
复制代码
 
 
 

回复

2万

帖子

74

TA的资源

管理员

4
 


用代码功能试试,看看效果会不会好一些。
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复

9744

帖子

24

TA的资源

版主

5
 
代码再全一点就好了
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(中级)

6
 
fkylin 发表于 2016-11-23 15:49
楼主呀,这个代码排版很让人无语呀

看到你的优化版本了,谢谢!
个人签名ST MEMS技术讨论群:415506792
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(中级)

7
 
本帖最后由 jmsht33 于 2016-12-26 14:02 编辑


LIS3DETR 是一个8bit精度的加速度传感器,右移8位计算

12.hw_d[0] = ( (s16) ( ( (acc_data[1] << 8) | acc_data[0] ) ) ) >>8;

13.hw_d[1] = ( (s16) ( ( (acc_data[3] << 8) | acc_data[2] ) ) ) >>8;

14.hw_d[2] = ( (s16) ( ( (acc_data[5] << 8) | acc_data[4] ) ) ) >>8;
个人签名ST MEMS技术讨论群:415506792
 
 
 

回复

2774

帖子

8

TA的资源

版主

8
 
你可以点添加代码,排版会好看很多
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
您好,我们这边是LIS3DHTR的,一手货源,老板是从原厂出来的,渠道比较特殊,有需求可以联系我QQ 1260072296
 
 
 

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

随便看看
查找数据手册?

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-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表