Post Go back to editing

adis16445获取PortID出错

 我最近使用STM32作为控制器,采集ADIS16445的数据。但是再通过SPI通信读取Port ID这里出现了问题,希望有人能帮忙解决,或给些建议。问题描述如下:

这是我编写的读取Port ID部分的代码:

将0x5600拆分成两个字节发送给ADIS16445,之后再读取两个字节,拼接出接收到的数据。

如此循环下去,STM32通过串口连接电脑,打印获取到的Port ID ,进行显示。

接下来是具体的问题,我在电脑上查看串口助手,并不能收到稳定准确的Port Id(0x403D)。

返回下面的内容:

有时返回的是0X000,有时返回的是0xffff,极少数情况下能够接受到正确的Port ID(0x403D)

接下来我使用示波器开始排除错误:

  • CS引脚:

每次发送两个字节的数据,所以CS有两次低电平时段,没有问题。

 

  • SCLK引脚:

发送一个字节需要8个脉冲,也没问题。

 

  • DIN

DIN引脚循环输出DIN = 0101 0110 0000 0000 = 0x5600没问题

 

  • DOUT:

以上三个引脚的波形都正确,但是DOUT输出的波形确是方波,而不是我们期望的Port ID

DOUT = 0100 0000 0011 1101 = 0x403D = 16,445,但这可以解释为什么我接收到的一段时0xffff,一段是0x0000,如此一直循环。但极少情况下能够接受到0X403D

下面是我采集数据的实物图:

现在的情况是,我通过STM32ADIS16445发送的内容都是正确的,但是ADIS16445的输出却不是期望的。

我觉得不是硬件连接的问题,没有短路或者接错线的情况,SPI通信也没问题,然而我也想不出还有哪里出错了。

真心的希望有人能帮我解决一下这个问题,或者给出一些建议。

再次感谢!

  • 我今天又调试了一天,可以确定的是,我的代码是没问题的,也就是SPI通信这里是正确的,所以问题定位到硬件连接上。

    根据我用示波器观察DOUT输出的波形,发现他发出的信号总是和SCLK的很相似,就好像输出的DOUT信号挂载在SCLK的信号上一样,所以我猜测是不是传送频率过高的原因,影响到了DOUT线的传输?我之前用的是杜邦线连接STM32和转接板,后来我使用质量更好一些的航空线进行连接,果然出现了正确的port id

    但是如图所示接收到的数据虽然也有正确的,但很断断续续,所以想问是不是线的原因影响到了信号的传输,DOUT线上的信号被SCLK线影响到?

  • 不知道现在读写正常了么?根据你的描述,你不妨尝试1) 通过用更短的地线连接来改善信号质量。2)降低SPI的SCLK速率。

  • 之前读portID数据不稳定的原因找到了,程序的连线都没有问题,问题出在接线上,用杜邦线连接这种高速通信的设备就会出现数据不稳定的现象,我之后画了一块自己的转接板,然后用灰排线连接转接板和STM32,可以稳定的读取到PortID.

    但接下来又出现了新问题,我一共买了四个ADIS16445,在测试通信的时候,有两个传感器读数非常稳定,另外两个断断续续,最严重的一个有三分之一的数据会缺失,因为我其他两个传感器都没问题,可以很好地完成数据稳定的读取,所以这两个不稳定的我猜测是不是传感器自己的原因导致,而不再是我程序、读取速率、接线的问题?

  • 我用IMU的评估软件看了一下传感器得到的数据,感觉有很多噪声

    这是传感器静止不动时候的样子,可以看到Z的加速度毛刺很多

    这是我动传感器时候的样子,数据表现的一点也不连贯,比如说X轴的陀螺仪(红色的线),升到波峰的时候总会有处于0的数据,感觉就是传感器没传过来正确的数据,丢失了,请问这样子是什么原因?是我的传感器坏了吗?或者我该怎么修改传感器参数呢?之前试过降低采样频率,但效果并不明显

  • 最后一张图表明数据不连续,有突变,我建议你用四通道示波器检查一下SPI上的波形。