ADI 技术
直播中

唐红菊

7年用户 146经验值
私信 关注
[问答]

请问ADXL350_SPI读数偶尔跳变,是配置有错误吗?

[size=10.5000pt]使用ADXL350遇到了读数问题。控制器使用定时器在1秒内定时读取1024数据,但是把数据发送到上位机显示,发现数据有跳变错误。如下图所示:黄色:Z轴,紫色:Y轴,蓝色:X轴。下图为传感器静止放置时,1秒内每个轴读取的1024个点数据连续波形。


[size=10.5000pt]说下配置:4线SPI,±2g,全分辨率(DATA_FORMAT= 0x09),POWER_CTL =  0x8INT_ENABLE=0x00800Hz采样BW_RATE=0xDFIFO旁路模式FIFO_CTL=0x00
[size=10.5000pt]尝试过降低SPI度,同样现象。还尝试过使用1600HZ采样,这种错误现象更加剧烈。尝试过FIFO流水线模式,同样有此数据错误现象。
[size=10.5000pt]但是只要将传感器换一个方向,让XY轴都在重力方向有分量,Z轴与水平面平行,数据出错的概率就有明显改善。如下图所示:


[size=10.5000pt]问题1:我的配置是否有错误?
[size=10.5000pt]问题2:这种现象是怎样产生的,怎样解决?
[size=10.5000pt]问题3:这个会不会和传感器内部更新寄存器时,外部SPI同时又在读取同一个寄存器,导致冲突,致使数据出错?
[size=10.5000pt]问题4:由于需要在1秒内读取1024个数据然后做FFT,有没有更好的方式来读取1024个点数据?

[size=10.5000pt]谢谢!

回帖(1)

刘悦竹

2018-8-2 08:36:47
您好,
 
1. 初始化配置没什么问题,建议写0x0B到寄存器DATA_FORMAT,因为在full resolution模式下,器件的灵敏度是固定的512 l***/g,这个灵敏度不随量程而改变,而是相当于ADC位数会随着量程变化,这是ADXL350比较特殊的地方。当然,你原来的配置也不会引起你看到的问题。
2. 产生这一现象很有可能是电源出现不稳定跳动造成的,还有一个很大可能是你注意一下读数的方式,ADXL350的3轴输出,或者说6个byte的输出要连读,也就是手册里写的multiply bytes, burst read。不要一个字节一个字节的读,否则有可能造成你高字节读的一组数据,低字节是下次转化的数据了,把两者拼接到一起就可能出错了。
3. SPI速度不会有影响,但要确认你的MCU在你配置的速度下是能稳定工作的。这可以通过连续读器件的DEVICE ID来确认。因为ID是写好不会变的。一般来说3MHz左右的速度不会有什么问题的。
4. 还要注意数据是否是在传到上位机的过程中出错,这可以在MCU里加一个判断,看是否从ADXL350输出的原始数据有那么大跳动。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分