关于ADXL345加速度传感器的问题__到底是我的芯片坏掉了还是其他什么问题
前段时间网上淘了一块ADXL345模块,是基于IIC接口的。个人感觉IIC通信过于复杂,速率也有限,就改成SPI接口的了,修正后的电路原理图如下:http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_657684PG0WO4.jpg
基于SPI的ADXL345电路原理图 (原文件名:SPI.jpg)
通过SPI通信测试,可以正常读写,包括读芯片ID号,还有对相关寄存器的读写;
本来数据文档上说基于SPI接口时VDD也需要接高电平,但是我接上后发现不能正常通信,就连正常的读取芯片ID号也不行;我把VDD断开,直接浮空,发现可以正常通信(如上述原理图所示),不知道是不是ADI官网资料手册出错了,还是什么其他原因,也没管那么多,反正黑猫白猫能抓老鼠就是好猫!
我把芯片配置成满量程16g输出,通过Data_Ready位产生的中断来同步数据读取,读出的数据换算成以重力加速度g为单位;
模块水平放置(也就是只有Z轴受重力作用,x、y轴不受重力作用),数据输出显示在上位机上,如下图所示:
http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_657610YQSKK2.jpg
ADXL345水平放置数据输出 (原文件名:ADXL345水平放置数据输出.jpg)
上图纵轴单位为g,从图中可以看出各轴输出分别为:X=0.34g; Y=0.22g;Z=0.57g;
理论上, X=0g; Y=0g;Z=1g;数据手册上说,x、y的最大零漂是150mg,z的最大零漂是250mg。而我这里显示的零漂分别为:Xoff=340mg, Yoff=220mg, Zoff=430mg,这零漂也忒大了点吧!!!
由此还引出后面一系列问题,我不说了,也不知道有没直接关系,现在一头雾水啊!!!./emotion/em052.gif
有谁遇到和我同样的问题啊???./emotion/em073.gif
有谁知道是什么原因啊??? ./emotion/em073.gif 这个......你的“模块水平放置”经过校准了吗? 回复【1楼】kclc
-----------------------------------------------------------------------
没经过校准诶!之所以这么做是想看看它的零偏有多大,比较和数据手册上有多大差异。 mark 楼主 你这个上位机软件可不可以共享一下啊~~~~~~ 貌似满给力的! 自己用labview写的,大家参考参考……
三轴加速度上位机显示部分ourdev_658200LDOZVY.zip(文件大小:54K) (原文件名:AccRateToPC.zip) 回复【2楼】thisjoy
-----------------------------------------------------------------------
如果没校准的话:“模块水平放置(也就是只有Z轴受重力作用,x、y轴不受重力作用)”这就应该有问题了吧?
如果没有放置完全水平的话,有X,Y轴加速度分量应该没什么问题,Xoff=340mg, Yoff=220mg, Zoff=430mg这应该是三个分量,但正交合成后怎么只有540mg。
--!......就当帮顶吧! 如果没校准的话,是漂的比较大,不过应该在芯片的范围内
不过看你信号跳动很小,不错 是啊,芯片的校准也是一个问题啊,,,不知道芯片什么时候完全水平,什么时候完全垂直,如果没有精密的仪器还是比较难校准的吧,但如果芯片电路还有时序没问题的话,粗略的校准还是可以接受的吧,至少应该在人为观察范围之内吧…… ADXL345的零位还是相对较准的。
我测试过的十多片,零位最多也就十几个LSB。
1个G是250多 回复【9楼】thl315
-----------------------------------------------------------------------
你是用什么接口来测试的啊,IIC还是SPI啊???可以提供你的ADXL345的电路原理图吗,我不知道上面我的那个基于SPI的ADXL345电路原理图是不是有什么错误啊……如果硬件电路有错误,那其他工作肯定会有影响啊!!! 能把初始化代码发一下么我老是用不起中断 回复【楼主位】thisjoy
-----------------------------------------------------------------------
不要相信pdf的数据,mems器件有很大的差异。自己测试的才是最准确的,而且器件缺陷一般只有在高低温和震动等环境试验下才回暴漏出来 回复【11楼】hiluck
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_665328TW46LF.jpg
ADXL345初始化代码 (原文件名:初始化代码.jpg)
这是我的初始化代码,if语句的后边是read_byte()函数,用来验证对寄存器的配置是否正确的;最后3个write_byte()函数是配置零位偏移补偿的! 零位偏移的问题已经解决,是上位机的数据处理问题,不过也有几个确实也是芯片有问题才使问题特别突出;确实,如果芯片没问题的话零位偏移还是可以接受的;所以建议测试芯片好坏的话,要采用第一手数据,即芯片中直接读出的数据进行分析,不要要求直观而进行复杂的处理,当然如果你很有把握的话也没问题啊。下图是问题解决后的波形输出,下位机还有测试环境都没变:
http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_665332RZCQGN.jpg
问题解决后的数据输出 (原文件名:QQ截图未命名.jpg)
不过还是对345采用SPI接口时为何不接VDDio通信正常,反而通信不正常有所疑问。打电话给ADI,他们的说法是VDDio是肯定要接高电平的。所以现在我改成IIC接口的了,不了解的少用为妙吗!大家对SPI和adxl345的通信有什么心得可以讨论讨论啊。。。 回复【14楼】thisjoy
-----------------------------------------------------------------------
最近在搞ADXL345的SPI通信,用CC2430控制,但对CC2430的SPI接口不是很了解,是2430的问题还是ADXL345的问题分不清楚,有点郁闷! thisjoy你好,请问SPI发送读取ID命令及地址后是自动返回ID号吗? 我刚开始用,打算采用iic接口,lz可否共享下初始化和数据传送代码? 没有使用过,但是比较感兴趣啊! ID号已经读取出来了,可我写入寄存器后再读取读出的数据不正确,看来写函数又出问题了! 回复【16楼】zhui_meng
-----------------------------------------------------------------------
是的啊,spi是全双工的通信总线,在一个时钟序列里同时执行收发数据,参照adxl345的数据手册,就很清楚的。
http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_668750SGOQYQ.jpg
SPI四线读时序 (原文件名:QQ截图未命名.jpg)
若是采用单字节读的话:R=1,MB=0;如果A0~A5是ID地址,D0~D7就是ID号了! 回复【17楼】wsn05
-----------------------------------------------------------------------
网上资料很多啦,也是参照网上的;
http://www.analogcn.com/Article/wz3/201103/20110314144340.html STM32驱动345代码;
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3453570&bbs_id=3020 STM32模拟IIC总线代码; 回复【19楼】zhui_meng
-----------------------------------------------------------------------
反正之前用SPI时是问题多多啊,即使寄存器配置成功,读取的数据也是不正常的……如果你的数据读出正常了,希望能分享下啊! 我用过I2C和345通信,都比较正常。后来不用了,因为10位的精度不够,做功能的话,这片子还是很强的。还有这片子比较贵。 回复【24楼】solarnick
-----------------------------------------------------------------------
是啊,之前买过几片15元一片吧,精度高的也有,只是使用模拟输出的好像…… 我们游戏手柄上有一个,不知道怎么用 你现在对ADXL345的操作做到哪一步了,功能可以了吗,我正在操作功能上的利用活动中断唤醒单片机静止中断让单片机休眠,可还没来得急消除ADXL345的中断,单片机就又进入中断了? 回复【28楼】zhui_meng
-----------------------------------------------------------------------
你是不是想利用345的运动检测来确定345是否静止 啊,运动检测中断还没用过,不过我是用人为软件方式通过计算3轴矢量和来进行运动检测的。相比较与你的中断唤醒MCU休眠,我的肯定功耗要高一点。如果你功能还没实现,建议你功能实现了再关注功耗的问题。至于ADXL345的中断的消除,它应该是345自动的吧,你关注的应该是如何在无中断的时候让MCU从休眠进入工作状态。你问题的具体描述我不是很了解。。。 楼主的上位机软件的通信协议还有啊?另外是不是要装什么驱动啊,我检测不到串口的 回复【30楼】feiling208
-----------------------------------------------------------------------
是的,你需要装labview的
,我是用labview编的 回复【31楼】thisjoy
-----------------------------------------------------------------------
我已经装好labview了,我应该向串口发什么样格式的数据啊?比如说是按照“X轴,Y轴,Z轴”高字节在先低字节在后的 顺序么?
还是其他自己顺序?或者说labview里面有串口格式的定义说明?这些都不是很清楚哎
刚刚接触这个软件,感觉好强大哇,呵呵,希望楼主能解释一下 labview还是很好学的,就是跨平台性不好。至于通信协议它是自己定的,建议如果你是初学,你可以利用labview里自带的帮助功能学学对串口是如何控制的。自己写下位机负责往串口发送数据……像我共享的vi程序里,主要是负责对每帧数据的检测,分辨出帧头帧尾,以及分辨出X、Y、Z轴数据的分辨。还有程序中处理的数据是直接从传感器中读出来的,是16进制的,labview负责处理及显示。 LZ硬件spi调试成功了么?
能否给一份你写的程序
296585810@qq.com
感谢了 回复【34楼】wuyin51
-----------------------------------------------------------------------
SPI的没去涉及了,那个项目很久没去动了…… 回复【楼主位】thisjoy
-----------------------------------------------------------------------
MARK 应该是没结果校准。。 在使用中发现在3200Hz,13位,16g模式下,静止输出数据变动太大了。
楼主的能不能帮住测一下您的芯片在此模式下静止时输出数据的变化范围。
期待回答! ./emotion/em040.gif 楼主你好!关于那个上位机,为什么属性节点的字符数为什么跟13比较,帧头帧尾加上三轴的12个字符不是应该是14吗?C:\Documents and Settings\Administrator\桌面 我也怀疑是不是我的芯片出现了问题:
当输出的值比较大的时候还正常;
小到一定成都的时候就正负不断交替了:不知道为什么。。。
谁来帮我看一下:
ADI的资料比飞思卡尔做的好很多,很认真 solarnick 发表于 2011-8-18 12:43 static/image/common/back.gif
我用过I2C和345通信,都比较正常。后来不用了,因为10位的精度不够,做功能的话,这片子还是很强的。还有这 ...
solarnick您好,请问可否共享一下您的ADXL345与IIC通信的程序,我现在正在使用,不过也是读出来的数据跳变很大,不知道是哪里出问题了
页:
[1]