打印

为什么ADXL345的读数不正确?

[复制链接]
9660|41
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
与时俱进|  楼主 | 2013-7-11 11:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
从网上掏了ADXL345模块,与单片机连接,用单片机I/O模拟4线制SPI,读取加速度值。
设置测量范围16g,数据又对齐,DATAREADY中断,程序调试后,正确地读到芯片的ID值0xe5,并且通过对xyz偏移寄存器的写读操作,证明对345的读写程序完全正常,但是读到的三轴加速度数据却不正确。
通过对读到的数据进行分析,发现一个有趣的现象:如果把 DATAx0(0x32)、 DATAx1(0x33)、DATAy0(0x34)、 DATAy1(0x35)、DATAz0(0x36)、 DATAz1(0x37)的顺序颠倒一下,即把寄存器0x37当做 DATAx0,0x36当做DATAX1......0X32当做DATAz1,三轴加速度就对了,这时为什么呀?!!

相关帖子

沙发
与时俱进|  楼主 | 2013-7-12 12:29 | 只看该作者
Ding.

使用特权

评论回复
板凳
tsdwddp| | 2013-7-12 14:00 | 只看该作者
顶一下,说两点看法,互相学习
1:SPI读寄存器顺序是否正确,
2::345是如何放置的,可将芯片水平放置,X=0,Y=0,Z=1g试一下

使用特权

评论回复
地板
tsdwddp| | 2013-7-12 14:03 | 只看该作者
多半是程序逻辑问题

使用特权

评论回复
5
ayb_ice| | 2013-7-12 14:15 | 只看该作者
仔细看手册吧

使用特权

评论回复
6
与时俱进|  楼主 | 2013-7-13 20:49 | 只看该作者
tsdwddp 发表于 2013-7-12 14:00
顶一下,说两点看法,互相学习
1:SPI读寄存器顺序是否正确,
2::345是如何放置的,可将芯片水平放置,X=0 ...

一次性的读写345多个寄存器,只能按从小到大相邻地址顺序读取,想把顺序搞错都难啊!
我已经说过,“并且通过对xyz偏移寄存器的写读操作,证明对345的读写程序完全正常”---方法是先往三个偏移寄存器写入数据,再读出出来,读出来的值与原来写入的值完全相同。因此不用怀疑我的读写子程序的正确性。

使用特权

评论回复
7
与时俱进|  楼主 | 2013-7-13 20:55 | 只看该作者
ayb_ice 发表于 2013-7-12 14:15
仔细看手册吧

手册看得仔细呢。
“如果把 DATAx0(0x32)、 DATAx1(0x33)、DATAy0(0x34)、 DATAy1(0x35)、DATAz0(0x36)、 DATAz1(0x37)的顺序颠倒一下,即把寄存器0x37当做 DATAx0,0x36当做DATAX1......0X32当做DATAz1,三轴加速度就对了,这时为什么呀?!!”
我为什么下这个结论?因为我按照6个寄存器顺序颠倒的方式,计算加速度和倾斜角,得出的数值完全正常!因此“顺序颠倒”的结论不是空穴来风。我都怀疑我买到不完全兼容的山寨芯片。

使用特权

评论回复
8
long870912| | 2013-7-14 13:55 | 只看该作者
路过!

使用特权

评论回复
9
ayb_ice| | 2013-7-15 08:32 | 只看该作者
应该是大小端的问题吧

使用特权

评论回复
10
与时俱进|  楼主 | 2013-7-15 08:50 | 只看该作者
ayb_ice 发表于 2013-7-15 08:32
应该是大小端的问题吧

除了大小端的问题,还有X轴数据变Z、Z变X的问题。

使用特权

评论回复
11
与时俱进|  楼主 | 2013-7-15 09:09 | 只看该作者
当我用  ReadFromADXL345ViaSpi(0x32, 6 , BUF); //读0x32--0x37六个寄存器。
读出三轴加速度时,BUF[0]实际情况是Z轴高字节,BUF[1]是Z低字节,BUF[4]是X高字节,BUF[5]是X低字节,这跟手册上定义的三轴寄存器顺序刚好颠倒了。            

使用特权

评论回复
12
与时俱进|  楼主 | 2013-8-21 12:44 | 只看该作者
用过的请说说。

使用特权

评论回复
13
与时俱进|  楼主 | 2013-9-12 11:21 | 只看该作者
还是给大家汇报一下:最后通过IIC接口实验成功了!

使用特权

评论回复
14
myl593799546| | 2014-2-14 09:41 | 只看该作者
与时俱进 发表于 2013-9-12 11:21
还是给大家汇报一下:最后通过IIC接口实验成功了!

楼主怎么解决的啊,我的IIC读数不正确,ID读数正确

使用特权

评论回复
15
与时俱进|  楼主 | 2014-2-14 10:23 | 只看该作者
本帖最后由 与时俱进 于 2014-2-14 16:20 编辑
myl593799546 发表于 2014-2-14 09:41
楼主怎么解决的啊,我的IIC读数不正确,ID读数正确

多字节数据读写的字节顺序搞错了。

使用特权

评论回复
16
guangbiao| | 2014-2-14 10:43 | 只看该作者

使用特权

评论回复
17
myl593799546| | 2014-2-14 16:44 | 只看该作者
与时俱进 发表于 2014-2-14 10:23
多字节数据读写的字节顺序搞错了。

能帮下忙吗?我用IIC读出来的数据:
静止在桌面上得读数是这样子的
x:ff9f
y:ffa3
z:0533
照道理应该是0,0,1才对吧,求指导下

使用特权

评论回复
18
myl593799546| | 2014-2-14 16:45 | 只看该作者
与时俱进 发表于 2014-2-14 10:23
多字节数据读写的字节顺序搞错了。

我怀疑是不是芯片坏了呢,如果可以的话,能贴出你的读数截图么

使用特权

评论回复
19
与时俱进|  楼主 | 2014-2-14 18:37 | 只看该作者
可以去AD论坛看看有关帖子http://ezchina.analog.com/community/mems

使用特权

评论回复
20
FAQ| | 2014-2-14 20:36 | 只看该作者
关注下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

1290

帖子

2

粉丝