This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] FDC2114EVM:慢速通信

Guru**** 2553450 points
Other Parts Discussed in Thread: FDC2114

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/631971/fdc2114evm-slow-communication

器件型号:FDC2114EVM
主题中讨论的其他器件:FDC2114

大家好、

对于我的项目、我需要从 FDC 获得至少6000SPS 的输出。 我尝试使用 Arduino Mini Pro 3、3V 以及 Raspberry Pi B+、但我从未接近这一点、即使理论最大值为13、3kSPS。

我使用4、7k Ω 上拉电阻器、时钟频率设置为400kHz。

在 Arduino 上、我测量了填充100个样本数组时经过的时间:244.000µs μ s/100Samples -> 244µs μ s/Sample -> 4098 SPS

在 Raspberry 上、我测量了在填充10000个样本列表时经过的时间:8361704µs μ s/10.000Samples -> 836µs μ s/Sample -> 1196 SPS

为什么在 Raspberry 上的通信缓慢、尤其是在有足够的电力接收此数量的数据的情况下? 我缺少什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Jonas、
    微处理器的开销可能会减慢整体吞吐量。 我建议从 FDC2114探测 I2C 线路和/或设置 INTB 引脚、以标记新数据就绪并进行检查。 您应该注意到、根据基准时钟频率和 RCOUNT 值、来自 FDC 的数据应该与预期的转换时间非常接近。
    您可能需要优化处理器中的代码以获得最快的速度。 请注意、如果您使用的是 RTOS、通常会有一些开销。 对于 Arduino 或 Raspberry PI、我建议访问他们的支持论坛并在那里提问。 如果您最终使用的是 TI 的微控制器之一、您可以在他们的论坛 上向我们的专家提问:e2e.ti.com/.../
    此致、
    Luke
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Jonas、

    您是否曾尝试将 INTB 引脚配置为在 DRDY 上触发、然后使用示波器探测 INTB 引脚以检查器件的转换时间?

    使用此 INTB 功能、错误配置(寄存器地址0x19)位0设置为1:

    在循环转换周期(所有已启用的通道都已被采样)完成后、DRDY 标志会发出。 INTB 通常为高电平、并在 DRDY 标志升高时置于逻辑低电平。

    下面的设置显示了启用两个通道时的 INTB 功能。 INTB 高电平持续时间是 CH1采样持续时间的两倍、此后 INTB 变为低电平、直到读取状态寄存器并开始新的转换。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    感谢您的回答。
    但是直到现在、我没有查看 INTB、但它看起来没有意义、因为如果 FDC2114的采样速度比我从芯片读取的速度慢、我会多次读取相同的值。
    但我认识到以下行为:使用 Raspberry 时、连接速度高度依赖于 I2C 速度。 因此、我使用了不同的时钟频率。 您可以想象、当使用更高的时钟频率时、芯片速度会更快。 我达到的最快速度约为6000SPS、时钟频率为800kHz (!) 在收到第一条错误消息之前、它在27小时内非常可靠。
    为简单起见、我现在使用 python、这是我用于读取和测量速度的代码:

    DEF 读取数据(reg):
    start_time = time.time ()
    数据=[]
    对于 I IN 范围(10000):
    读取= fdc.read_i2c_block_data (地址、reg、2)
    data.append (read[0]& 15)
    DATA[i]= DATA[i]<< 8
    DATA[i]+=读取[1]
    timedelta = time.time ()- start_time

    此外、python 进程的状态显示为"D"、这意味着它正在等待 I/O
    对我来说、这似乎是 I2C 时序方面的问题。
    或者、我是否做了一些导致此行为的错误?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Jonas、

    您可以使用 感应传感设计计算器工具、在 LDC131x/LDC161x 配置中、您可以输入 RCOUNT 和分频器设置来计算可能的最大采样率。

    此致、