OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13508|回复: 32

ST三轴加速度LIS3DH读出数据错误?帖子有人发过但没有提供最终解决方案

[复制链接]

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-7-19
在线时间
26 小时
发表于 2016-11-20 17:08:26 | 显示全部楼层 |阅读模式
平台:stm32C8T6   采用:IIC通信  驱动:ST官方源码
1、初始化 100hz NoRmal模式  量程2g
QQ截图20161120161931.png
2、获取原始数据并打印到串口
QQ截图20161120162559.png
QQ截图20161120162749.png
3、根据官方提供数据对比
QQ截图20161120163005.png
说明:小白此处采用的 BLE=0 模式,根据手册 +1g 应该是 4000h(手册写错了),10进制就是16384。明显不对
4、参考 原子哥ADXL345例程对数据做了处理
QQ截图20161120163927.png
QQ截图20161120164328.png

说明 :  原始数据 拿掉符号位 右移四位便是实际加速度值(单位 : mg)
这里参考很多资料 可以确定 水平放置时 数据大约是 x = 0 ,y为负 ,z=1g
以上就是小白的思路了 在线等

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-12-4
在线时间
2 小时
发表于 2016-12-12 17:06:53 | 显示全部楼层
zj345030 发表于 2016-12-12 15:00
问题解决了,给自己回复一下吧,事实上所有的设置都是对的,问题就出在一旦有数据,STATUS_REG(7)标志就 ...

刚刚发的代码执行效率低,每次先读的话,会浪费一个1/odr的时间,正确的处理方法是在溢出判断力读一遍。具体代码如下:
u8_t LIS3DH_read_processing_xyz()
{
  u8_t status;
  u16_t xtemp,ytemp,ztemp;
  do
  {
    status = SPI_Mems_Read_Reg(0x27);
  }while(!(status&0x08));//waitting for data ready
  if(status&0x80)//check the data overwitten or not
  {
    xtemp = LIS3DH_read_x();
    ytemp = LIS3DH_read_y();
    ztemp = LIS3DH_read_z();
    return 0;//overwritten
  }
  xtemp = LIS3DH_read_x();
  ytemp = LIS3DH_read_y();
  ztemp = LIS3DH_read_z();
  xmg = LIS3DH_processinggg(xtemp);
  ymg = LIS3DH_processinggg(ytemp);
  zmg = LIS3DH_processinggg(ztemp);
  return 1;
}
希望可以给大家提供帮助。
回复 支持 1 反对 0

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-7-19
在线时间
26 小时
 楼主| 发表于 2016-11-20 17:09:46 | 显示全部楼层
顶 一个  
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-7-19
在线时间
26 小时
 楼主| 发表于 2016-11-20 17:11:35 | 显示全部楼层
在线 等啊 !  来人啊
回复 支持 反对

使用道具 举报

9

主题

31

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-9-13
在线时间
24 小时
发表于 2016-11-20 23:00:40 来自手机 | 显示全部楼层
楼主你好,我也在调试lis3dh,我的问题是我用示波器读出来数据一直不变,不管怎么晃动板子都不行!不知道楼主是怎么做的?我的QQ1402462106,求指教!!!
回复 支持 反对

使用道具 举报

9

主题

31

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-9-13
在线时间
24 小时
发表于 2016-11-20 23:01:02 来自手机 | 显示全部楼层
楼主留下QQ行不?
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-7-19
在线时间
26 小时
 楼主| 发表于 2016-11-21 10:40:39 | 显示全部楼层
SHU 发表于 2016-11-20 23:01
楼主留下QQ行不?

不稳定的问题找到了,LIS3DH焊接不能长时间加热。数据读不出来,你看看IIC有没有问题
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-7-19
在线时间
26 小时
 楼主| 发表于 2016-11-21 10:42:53 | 显示全部楼层
须弥指间 发表于 2016-11-21 10:40
不稳定的问题找到了,LIS3DH焊接不能长时间加热。数据读不出来,你看看IIC有没有问题

楼主 也是小白  不知道能不能帮到你 1490520478
回复 支持 反对

使用道具 举报

9

主题

31

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-9-13
在线时间
24 小时
发表于 2016-11-21 17:06:45 | 显示全部楼层
须弥指间 发表于 2016-11-21 10:42
楼主 也是小白  不知道能不能帮到你 1490520478

QQ要验证。。。。。
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-7-19
在线时间
26 小时
 楼主| 发表于 2016-11-21 17:55:00 | 显示全部楼层
SHU 发表于 2016-11-21 17:06
QQ要验证。。。。。

你 再试试 验证关了
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-7-19
在线时间
26 小时
 楼主| 发表于 2016-11-24 18:30:02 | 显示全部楼层
本帖最后由 须弥指间 于 2016-11-24 18:43 编辑

F:\博联\蓝牙 OTA\lis3dh\pict QQ截图20161124182909.png
几天的调试后问题解决了,读出来0重力水平的加速度值还是有点偏移,但手册允许 40mg内 的偏差

1、首先:初始化如下
QQ截图20161124183349.png QQ截图20161124183404.png QQ截图20161124183416.png
小白使用的是轮询(这里也写了伐值触发中断的程序)
轮询最好使能数据块跟新功能,初始化顺序最好按手册来

2、数据处理 (这里一开始是错的)
QQ截图20161124184232.png
拿到原始数据,右移4位得到加速度值(单位:mg)

小白会继续跟新帖子


补充内容 (2016-12-7 14:01):
上次提到使用中断伐值功能,按照手册初始化后会有一个虚读reference寄存器的步骤(强制将高通滤波器的值加载到当前加速度值比较这里会产生一个起始中断),只要初始化结束延时一段时间后清中断便可屏蔽此无用中断
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-12-4
在线时间
2 小时
发表于 2016-12-4 22:08:31 | 显示全部楼层
须弥指间 发表于 2016-11-24 18:30
几天的调试后问题解决了,读出来0重力水平的加速度值还是有点偏移,但手册允许 40mg内 的偏差

1、首先 ...

我这段时间也在面临相似的问题,我用的spi,设置和读取ID都是正常的,就是读取加速度值的时候是不稳定的变化值,我按照数据手册和应用笔记来写的代码,实在不知道错在哪里了,您能不能提供一下跟lis3dh设置和读取相关的原码给我看看啊
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-7-19
在线时间
26 小时
 楼主| 发表于 2016-12-5 17:45:22 | 显示全部楼层
zj345030 发表于 2016-12-4 22:08
我这段时间也在面临相似的问题,我用的spi,设置和读取ID都是正常的,就是读取加速度值的时候是不稳定的 ...

加速度数据的高位平放时是不变的,只有低位是实时变化的。你先确定下自己的数据左右对齐方式,没问题后再去找其他问题。既然读取正常,那应该没什么大问题,数据处理那边注意一下就行
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-12-4
在线时间
2 小时
发表于 2016-12-10 14:24:13 | 显示全部楼层
须弥指间 发表于 2016-12-5 17:45
加速度数据的高位平放时是不变的,只有低位是实时变化的。你先确定下自己的数据左右对齐方式,没问题后再 ...

LIS3DH的数据不是都是左对齐吗?而且数据输出寄存器还是16位用满的,用满的情况下,左对齐和右对齐不都是一样的吗?不存在左边补0还是右边补0吧。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-12-4
在线时间
2 小时
发表于 2016-12-10 16:47:21 | 显示全部楼层
须弥指间 发表于 2016-12-5 17:45
加速度数据的高位平放时是不变的,只有低位是实时变化的。你先确定下自己的数据左右对齐方式,没问题后再 ...

还有我很奇怪,不论我怎么设置odr的频率,只要有数据产生,我总是发现STATUS_REG(7)为1,也就是说,要么寄存器里没数据,只要有了数据就直接是溢出的,然后读出来的数据就是完全不对的数据。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-12-4
在线时间
2 小时
发表于 2016-12-12 15:00:26 | 显示全部楼层
zj345030 发表于 2016-12-10 16:47
还有我很奇怪,不论我怎么设置odr的频率,只要有数据产生,我总是发现STATUS_REG(7)为1,也就是说,要么 ...

问题解决了,给自己回复一下吧,事实上所有的设置都是对的,问题就出在一旦有数据,STATUS_REG(7)标志就为溢出,不论准循环有多快可以轮询到读取函数,哪怕主循环里就只有数据读取并且ODR设置为1Hz也照样解决不了,不过通过这几天的来回尝试,找到了一个解决方法,我的解决方式是在读取status之前先读一遍数据输出寄存器。现在把读取数据的代码贴出来,希望可以给以后遇到此类问题的朋友一定的帮助。
u8_t LIS3DH_read_processing_xyz()
{
  u8_t status;
  u16_t xtemp,ytemp,ztemp;
  xtemp = LIS3DH_read_x();
  ytemp = LIS3DH_read_y();
  ztemp = LIS3DH_read_z();
  do
  {
    status = SPI_Mems_Read_Reg(0x27);
  }while(!(status&0x08));//waitting for data ready
  if(status&0x80)//check the data overwitten or not
  {
    return 0;//overwritten
  }
//  LIS3DH_GetAccAxesRaw(buff);
  xtemp = LIS3DH_read_x();
  ytemp = LIS3DH_read_y();
  ztemp = LIS3DH_read_z();
  xmg = LIS3DH_processinggg(xtemp);
  ymg = LIS3DH_processinggg(ytemp);
  zmg = LIS3DH_processinggg(ztemp);
  return 1;
}
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-7-19
在线时间
26 小时
 楼主| 发表于 2016-12-16 18:08:47 | 显示全部楼层
zj345030 发表于 2016-12-12 17:06
刚刚发的代码执行效率低,每次先读的话,会浪费一个1/odr的时间,正确的处理方法是在溢出判断力读一遍。 ...

最近没看贴。就是喜欢解决问题贴出来的人,棒
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-7-19
在线时间
26 小时
 楼主| 发表于 2016-12-16 18:16:23 | 显示全部楼层
zj345030 发表于 2016-12-10 14:24
LIS3DH的数据不是都是左对齐吗?而且数据输出寄存器还是16位用满的,用满的情况下,左对齐和右对齐不都是 ...

我的意思是 符号位左右对齐的问题
回复 支持 反对

使用道具 举报

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-12-3
在线时间
46 小时
发表于 2017-3-10 14:00:31 | 显示全部楼层
楼主你好,我最近也在用stm32f2+lis3dh做项目,我现在用的是模拟spi来进行通信的。我用的官方例程来测试,发现每次对lis3dh读寄存器和写寄存器需要加几百ms的延时,不加延时读出来的数据就是0x00。我是在线仿真的时候看的读出的数据。请问楼主有遇到这样的情况吗?
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-7-19
在线时间
26 小时
 楼主| 发表于 2017-3-10 14:48:02 | 显示全部楼层
zhang90283 发表于 2017-3-10 14:00
楼主你好,我最近也在用stm32f2+lis3dh做项目,我现在用的是模拟spi来进行通信的。我用的官方例程来测试, ...

我用的i2c,你可以询问本帖使用SPI的,他们问题也都解决了
回复 支持 反对

使用道具 举报

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-12-3
在线时间
46 小时
发表于 2017-3-10 18:12:43 | 显示全部楼层
本帖最后由 zhang90283 于 2017-3-10 18:19 编辑

楼主,读取的X、Y、Z值,为什么右移四位就是实际加速度值呢?
回复 支持 反对

使用道具 举报

6

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-12-3
在线时间
46 小时
发表于 2017-3-10 18:14:42 | 显示全部楼层
须弥指间 发表于 2017-3-10 14:48
我用的i2c,你可以询问本帖使用SPI的,他们问题也都解决了

好的,谢谢!现在问题已经解决了,原因是spi没配置好,现在读写数据正常了,准备按照你的方法试下加速度值是否一致。
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-7-19
在线时间
26 小时
 楼主| 发表于 2017-3-14 00:53:57 | 显示全部楼层
zhang90283 发表于 2017-3-10 18:12
楼主,读取的X、Y、Z值,为什么右移四位就是实际加速度值呢?

右移四位直接把小数位拿掉了
回复 支持 反对

使用道具 举报

懂懂 该用户已被删除
发表于 2017-4-1 11:30:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2017-6-10
在线时间
14 小时
发表于 2017-6-10 09:14:11 | 显示全部楼层
请教一下楼主,为什么我读出来的数据会有1900+mg,稍微转动一下角度会出现2040+,然后再转动一下会变成几乎是0的值,就是在0以前会出现一个很大的数据不知道是为什么。
回复 支持 反对

使用道具 举报

8

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2014-10-10
在线时间
17 小时
发表于 2017-7-26 10:58:43 | 显示全部楼层
数据怎么处理的
天道酬勤
回复 支持 反对

使用道具 举报

6

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1604
金钱
1604
注册时间
2017-12-18
在线时间
173 小时
发表于 2017-12-18 17:31:24 | 显示全部楼层
楼主有没有后续将三轴加速度转化成倾斜角显示出来啊?
回复 支持 反对

使用道具 举报

6

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1604
金钱
1604
注册时间
2017-12-18
在线时间
173 小时
发表于 2017-12-18 17:32:16 | 显示全部楼层
信奉3 发表于 2017-7-26 10:58
数据怎么处理的

同问数据怎么处理的,你解决了吗?能分享一下思路不,感谢
回复 支持 反对

使用道具 举报

72

主题

245

帖子

0

精华

高级会员

Rank: 4

积分
505
金钱
505
注册时间
2015-11-13
在线时间
130 小时
发表于 2018-3-1 09:19:41 | 显示全部楼层
楼主能分享下您的代码吗
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2018-7-4
在线时间
1 小时
发表于 2018-7-5 10:00:55 | 显示全部楼层
能否共享一下代码
有事联系QQ 282651571
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2019-4-4
在线时间
11 小时
发表于 2019-6-1 20:27:01 | 显示全部楼层
能发一份源代码,最近也在使用lis3dh
回复 支持 反对

使用道具 举报

53

主题

566

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2081
金钱
2081
注册时间
2017-2-11
在线时间
305 小时
发表于 2019-8-13 17:13:27 | 显示全部楼层
楼主,能发一份源代码,最近也在使用lis3dh
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2020-9-23
在线时间
1 小时
发表于 2020-9-23 11:18:20 | 显示全部楼层
楼主你好,
   我现在用LIS3DH,发现PCBA贴的25块板子有5块X轴数据读取异常,看到你帖子说这颗芯片焊接时间不能太长。不知楼主对PCBA焊接时有没好的建议?
万分感谢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-8 22:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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