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.

[参考译文] ADS131A04:在发送数据流时缩短 ADS131A04和 STM32F7之间的通信时间

Guru**** 2392095 points
Other Parts Discussed in Thread: ADS131A04

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/999193/ads131a04-reducing-communication-time-between-ads131a04-and-stm32f7-while-sending-dataframe

器件型号:ADS131A04

您好!

在我的项目中、我使用595-ADS131A04IPBSR 执行模数转换 、数据由 STM32F7微控制器读取。 ADC 在 异步中断模式下工作、因为电气设计人员将引脚 M2硬连接到 Vdd。 ADC 设置为发送24位字、微控制器读取每个数据帧所需的时间超过40us、峰值高达50us。  

由于新的要求、我希望将此时间缩短至大约35 μ s、但我不确定最佳策略、因此如果有人能帮助我、我将非常感激。

我附加了用于 ADC 初始化和 ADC 读取的代码。

我提前感谢您。

此致、

Giovanni
e2e.ti.com/.../6724.ADC.c

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

    您好、Giovanni、

    如果我正确理解了您的寄存器和问题、ADS131A04当前配置为在馈入8MHz 外部时钟时的输出数据速率(ODR)为20KSPS、每50us 一次新采样、您希望将器件配置为每35uS 输出一个采样、即28.5kSPS。 为此、您需要降低 CLK2寄存 器中 OSR[3:0]位的 OSR、如第9.3.1.4节"数据速率"中所述。 根据  表30、将#define ADC24_CLK2_CFG 0b00101001更改为0b001011应将 ODR 从20kSPS 更改为31.250kSPS。 您可能需要从 STM 中增加 SCLK 脉冲的频率以适应增加的 ODR、并记住测量的精度将会降低、如表1至表4所示。

    修改时钟频率也允许您对此进行调整、但听起来您对电路板更改不感兴趣。 请告诉我我的理解是否正确以及您是否有任何问题。  

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

    您好、Alexander、感谢您的回复。 我意识到、我可能没有正确解释我要做的事情。

    我想将采样频率保持在20kSPS;但是、我想知道是否有办法加快 ADC 和 MCU 之间的通信。 我测量了执行函数 ADC24_read()所需的时间,峰值大于50us 时大约为45us。 我的目标是缩短此时间、因为 MCU 应 以相同的采样频率更新 DAC、知道更新的 DAC 需要大约13.5us。

    自昨天起、我还一直在处理发送到 ADC 的 SPI 时钟信号。 当波特率为13.5Mbit/s 时、通信所需的时间值就是我报告的值、而当波特率为54Mbit/s 时、我可以将平均时间降至约32us、峰值时间为40us。 尽管这很好、但在阅读 ADC 数据表时、我已经看到 f_SCLK 的最大值为25MHz、因此不清楚 ADC 如何在54MHz 的串行时钟下不崩溃。  

    另一种解决方案可能是抑制 ADC 的4通道之一、因为我不需要它。 通过这样做、我希望可以缩短沟通时间;但是、如果我理解正确、渠道可以全部打开或全部关闭。

    我更喜欢避免的另一种方法是、我物理上切断 MO 与 IOVDD 的连接(见图)、因此我可以尝试其他 SPI 通信模式。

    此致、

    Giovanni

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

    您好、Giovanni、

    感谢您的澄清。 由于/CS 由 GPIO 控制、因此很难在这短时间内满足所有通信需求。  

    使用超出规格的54MHz SCLK 不一定会使 ADC 崩溃、但它超出指定操作的范围。 我们无法保证器件在这种情况下的行为方式。  

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

    您好、Alexander、

    感谢您的回复。 在需要从 ADC 获取数据的所有时间内、我都尝试使 CS 保持有效(在此期间、SPI 总线不与其他外设共享)、并且没有任何变化。  

    假设我可以重新设计电路、您会建议什么来实现我的目标?

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

    您好、Giovanni、

    如果您希望加快通信速度、最简单的方法是:

    1. 增加 SCLK 频率(在指定范围内)
    2. 将字大小(M0设置)减少到16位
    3. 减少每帧的字数。  

    设备默认为动态帧模式。 由于我看到您的代码中禁用了 CRC、这会从帧中删除 CRC 字。

    可通过使用同步接口实现进一步改进。 这将消除与启用和禁用/CS 相关的时序延迟。 但是、这些延迟通常只会产生10ns 的延迟。

    此致、

    Ryan

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

    您好、Ryan、  

    最后、我更改了 FW 中的几个方面:

    • 我将中断例程替换为连续读取连接到 MCU 的就绪引脚、
    • 我使用于 SPI 发送和接收的 HAL 函数更轻、更快。

    尽管采用了蛮力法、但它仍然运行良好。

    此致、

    Giovanni