打印

ADXL345加速度传感器,Z轴值不对,XY轴正确,估计是IC坏了??

[复制链接]
13318|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
理论正确值:
ADXL345水平正面放置,正常的值应该是: X:0 , Y:0,  Z:1g (即1000mg);
对于13bit模式,+/-16g ,一个LSB对应3.9mg;
静止放置时,Z轴1000mg, 对应的寄存器值应该是 255左右, 1000mg / 393mg = 255 ;


实际读出的值:
我现在读出的值是 X:0 , Y:0,  Z: 1220;
静止时Z轴的值怎么会那么大,这不是误差,误差这么大哪敢用?
移动ADXL345, XYZ值都会就,且XY都是对的,Z会变,但读数不正确;

上网查过,有的人说Z轴容易坏,有这种说法没??
沙发
car_software|  楼主 | 2012-12-22 09:33 | 只看该作者
初始化,读出的ID都是正确的,X和Y轴都是正确的,不同方向寄存器值范围:0到320左右;

但Z轴不对,不同方向寄存器值范围:700到1220左右;  
水平放置时Z轴寄存器值是1220, 反方向放置是700; (正确应该是: 255 ,0)

u8 ADXL345_Init(void)
{                                 
        IIC_Init();

        if(ADXL345_RD_Reg(DEVICE_ID)==0XE5)        //读取器件ID
        {  
                ADXL345_WR_Reg(DATA_FORMAT,0X2B);  //13位全分辨率,输出数据右对齐,16g量程
                ADXL345_WR_Reg(BW_RATE,0x0A);           //数据输出速度为100Hz
                ADXL345_WR_Reg(POWER_CTL,0x28);           //链接使能,测量模式
                ADXL345_WR_Reg(INT_ENABLE,0x00);   //不使用中断                 
                 ADXL345_WR_Reg(OFSX,0x00);
                ADXL345_WR_Reg(OFSY,0x00);
                ADXL345_WR_Reg(OFSZ,0x00);        
               
                return 0;
        }
                                
        return 1;                                                                             
}

//x,y,z:读取到的数据
void ADXL345_RD_XYZ(short *x,short *y,short *z)
{
        u8 buf[6];
        u8 i;
        
        IIC_Start();                                   
        IIC_Send_Byte(ADXL_WRITE);        //发送写器件指令         
        IIC_Wait_Ack();           
  IIC_Send_Byte(0x32);                   //发送寄存器地址(数据缓存的起始地址为0X32)
        IIC_Wait_Ack();                                                                                                               

        IIC_Start();                                      //重新启动
        IIC_Send_Byte(ADXL_READ);        //发送读器件指令
        IIC_Wait_Ack();
        
        for(i=0;i<6;i++)
        {
                if(i==5)        buf[i]=IIC_Read_Byte(0);        //读取一个字节,不继续再读,发送NACK  
                else                         buf[i]=IIC_Read_Byte(1);        //读取一个字节,继续读,发送ACK
        }        
                           
        IIC_Stop();                                        //产生一个停止条件
   
        *x=(short)((((u16)buf[1]<<8)+buf[0]));
        *y=(short)((((u16)buf[3]<<8)+buf[2]));            
        *z=(short)((((u16)buf[5]<<8)+buf[4]));   
}

使用特权

评论回复
板凳
04506hex| | 2013-3-13 23:50 | 只看该作者
楼主这个问题解决了吗?我遇到的问题和你一样,也不明白是什么原因造成的,期待你得回复。

使用特权

评论回复
地板
lxk1988| | 2013-5-20 20:53 | 只看该作者
本帖最后由 lxk1988 于 2013-5-20 21:05 编辑

遇到同样的问题啊,楼主怎么解决的?我用同样的软件测试,买的模块可以正常工作,但是自己的板子焊上就不能正常工作,不知道楼主的硬件设计是怎样的,怀疑是硬件的问题,或者是焊接的问题,或者是真的芯片坏了(我用热风枪吹的,温度比较高)。

使用特权

评论回复
5
xlwuhai| | 2013-5-23 23:34 | 只看该作者
这也是让我头痛的问题, 一开始真的感觉是芯片坏了,可是后来我买了四片ADXL345,同样是热风枪吹,并且把温度控制在220度左右,换了3片,这个问题依然存在.
部分原始数据如下,
Device ID:E5
X Axis:-159  Y Axis:-27  Z Axis:1375
X Axis:-159  Y Axis:-20  Z Axis:1373
X Axis:-162  Y Axis:-18  Z Axis:1380
X Axis:-160  Y Axis:-19  Z Axis:1379
X Axis:-161  Y Axis:-19  Z Axis:1376
X Axis:-162  Y Axis:-19  Z Axis:1380
X Axis:-161  Y Axis:-22  Z Axis:1383
X Axis:-160  Y Axis:-19  Z Axis:1379
X Axis:-160  Y Axis:-24  Z Axis:1381
....................................
比较了网上的模块原理图,附件中,硬件应该问题不大.
所以在这里很想和大家讨论一下,找找问题的源头.

[to:lxk1988]能把你买的模块原理图和ADXL采集的数据贴上来看看吗?

acc_sch.jpg (28.25 KB )

acc_sch.jpg

使用特权

评论回复
6
lxk1988| | 2013-5-28 21:36 | 只看该作者
本帖最后由 lxk1988 于 2013-5-28 21:40 编辑

这个是我的模块的原理图:

这个是我自己设计的原理图:

水平放置,+/-16g量程时采样的数据:
Y:-0.00g
Z: 8.31g
X:-0.00g
Y:-0.00g
Z: 8.31g
X:-0.00g
Y:-0.00g
Z: 8.31g
X:-0.00g
Y:-0.00g
Z: 8.31g
X:-0.00g
Y:-0.00g
Z: 8.31g
X:-0.00g
Y:-0.00g
Z: 8.31g
X:-0.00g
Y:-0.00g
Z: 8.31g
X:-0.00g
Y:-0.00g
Z: 8.30g
X:-0.00g
Y:-0.00g
Z: 8.30g
X:-0.00g
Y:-0.00g
Z: 8.30g
X:-0.00g
Y:-0.00g
Z: 8.30g
C语言的数据转换程序应该没问题,直接读0x36和0x37地址是0x53 0x08,13位来看的话,最高位为0,次高位为1,应该折算过来就是显示的数据。看原理图也没什么区别,你把那几个电阻改成4.7k试试,不知道是不是这个原因。

使用特权

评论回复
7
lxk1988| | 2013-5-29 10:53 | 只看该作者
刚才在网上看到,有人说跟芯片的批号有关,我的是#123

使用特权

评论回复
8
hitwnx| | 2013-6-8 10:40 | 只看该作者
我也遇到同样问题。五块电路板只有第5块数据正常。其它四块测量静止加速度值偏差太大。尤其Z轴数据偏差居然达到4g多。设置测量范围:+-16g,13bits 输出。以下是5块板测量数据。数据测量波动倒是很小。
电路编号       传感器放置方式  X轴 原始值(换算值)  Y轴 原始值(换算值)     Z轴 原始值(换算值)   备注
#1:                      水平放置 Z轴向上   FF3D(-760.5)                    FEE7(-1095.9)                      0386(3517.8)                 基本水平
              水平放置 Z轴向下   FF67(-596.7)                    FF3C(-764.4)                        017C(1482)            与水平约有30度夹角

#2:                      水平放置 z轴向上   006B(417.3)                       FEE7(-1095.9)                      04CE(4797)                   基本水平
              水平放置 z轴向下   0084(327.6)                       FF3D(-760.5)                     02C6(2769)          与水平约有30多度夹角

#3:                      水平放置 z轴向上   FF86(-475.8)                      000F(58.5)                              03D9(3841.5)          基本水平
              水平放置 z轴向下   FF86(-475.8)                      0012(70.2)                              01C2(1755)            基本水平

#4:                      水平放置 z轴向上   FFA9(-339.3)                     FF56(-663)                               0375(3451.5)          基本水平
              水平放置 z轴向下   FF9B(-393.9)                    FF63(-612.3)                            0160(1372.8)          基本水平

#5:                      水平放置 z轴向上   000E(54.6)                         FFF7(-35.1)                             00D4(826.8)            基本水平
              水平放置 z轴向下   FFF9(-27.3)                        0002(7.8)                                 FEE0(-1123.2)         基本水平

请各位高手指点。到底是芯片问题还是焊接造成的。

使用特权

评论回复
9
不爱说话| | 2013-6-8 15:55 | 只看该作者
应该是芯片坏了,我也遇到过4片这样的问题。同一批中就一颗是好的。

使用特权

评论回复
10
zeluo| | 2013-6-8 20:53 | 只看该作者
换一个芯片试一试  不知道能不能解决   试一试

使用特权

评论回复
11
与时俱进| | 2013-7-2 22:57 | 只看该作者
读ID正常、读写也正常,就是三轴数据不正常,不知道什么原因。

使用特权

评论回复
12
kouten| | 2014-6-9 09:41 | 只看该作者
遇到相同问题,楼主问题解决了不?

使用特权

评论回复
13
wqluck| | 2014-7-19 23:14 | 只看该作者
我遇到的情况是读ID正常,但是读取三轴数据全为零,不知道是什么原因啊,求帮助!

使用特权

评论回复
14
yjvijfhvk| | 2015-1-13 18:30 | 只看该作者
楼主我也遇到这问题 z=1280 y=0 x=0

使用特权

评论回复
15
zhitao2072| | 2015-3-23 14:15 | 只看该作者
我也遇到同样的问题,x=-80,y=-235,z=1574

使用特权

评论回复
16
lpdengsh| | 2015-4-6 15:22 | 只看该作者
本帖最后由 lpdengsh 于 2015-4-6 15:24 编辑

都木有后续的帖子了?新人才开始用这个芯片也出现同样问题,XY轴出现100左右的偏差Z轴出现1000的偏差,什么问题呢?我测试了下将芯片正立放着和倒立放着,Z轴值差500多说明Z轴测试应该是正确的

使用特权

评论回复
17
小浣熊| | 2015-4-6 21:06 | 只看该作者
楼主的问题解决了吗??是不是IC的问题啊??

使用特权

评论回复
18
hugo0chen| | 2016-4-6 21:28 | 只看该作者
本帖最后由 hugo0chen 于 2016-6-8 11:27 编辑

我的Device ID读取就是错误的,问题在哪呢?示波器发现,发送slaveaddress后,没有有效ack信号。

问题解决了,I2C通信问题

但是XYZ轴的数据不正确,水平放置,Z轴读数据1003 ,x轴100,Y轴也100左右
16g量程,full_resolution
是不是芯片坏了,风枪温度高,导致的呢?
我有一批,整个数据不变,Device ID是正确的。

使用特权

评论回复
19
天行健1| | 2016-11-4 22:13 | 只看该作者
问题解决了吗

使用特权

评论回复
20
1359787445| | 2017-5-14 17:54 | 只看该作者
您好  请问您的的问题解决了吗

使用特权

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

本版积分规则

2

主题

44

帖子

0

粉丝