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.

[参考译文] ADS124S08:ADS124S08作为三线 PT100 RTD 测量电路和 Linux 驱动程序存在问题

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1047179/ads124s08-problem-with-ads124s08-as-three-wire-pt100-rtd-measurement-circuit-and-linux-driver

器件型号:ADS124S08

您好!

我尝试使用带 STM32MPU 处理器的 ADS124s08模块读取 PT100的温度、但无法读取任何数据。

我启用了 Linux 驱动程序 ti-ads124s08.c、并看到它正确创建了12 in_volte_raw。

但是、该驱动程序不具有设置寄存器的功能、因此我添加了该部分:

我修改了驱动程序、以便在读取 IN_voltage0_RAW 时、它会将 DAC1设置为 AIN0和1mA 单冲模式。

我可以使用正确的值读回寄存器、并验证 DAC 通道输出电流。

我的配置如下:

数据寄存器(0x2)= 0x34 (单次触发模式)

REF REG (0x5)= 0x12 (内部基准打开)

电流寄存器1 (0x6)= 0x7 (1mA)

当前寄存器2 (0x7)= 0xD0 (dac2关闭、dac1通道0)

正如其他论坛问题中所述、驱动程序在 START 转换命令中存在错误、因此我也更改了该错误。

当我尝试读取数据(IN_voltage1_RAW)时、第一次模块不应答。 如果我发出第二个读取数据命令、我会看到模块在我请求设置多路复用器通道时输出值。

读取数据似乎与我的命令不同步。

root@stm32mp1:~# cat /sys/devices/platform/soc/44004000.spi/spi_master/spi0/spi0
.0/iio\:device0/in_voltage0_raw
[  579.350031] TI-ADS124: send wakeup cmd
[  579.351867] TI-ADS124: setting data register to one-shot mode
[  579.356227] TI-ADS124: data reg set to 52
[  579.359590] TI-ADS124: setting IDAC magnitude to 1mA
[  579.363703] TI-ADS124: IDACMAG reg set to 7
[  579.367043] TI-ADS124: setting internal voltage reference
[  579.372707] TI-ADS124: REF reg set to 18
[  579.376124] TI-ADS124: status reg = 128
[  579.379423] TI-ADS124: setting chan 0 to IDAC1
[  579.384144] TI-ADS124: DACMUX reg set to 208

读取通道1时、顺序如下:

将 INMUX REG 设置为0x01。

发送 START CONV CMD。

发送读取数据 CMD。

如果我使用单次触发模式、是否可以跳过读取数据命令?

我应该考虑 DRDY 引脚吗?

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

    Lidia、您好!

    欢迎来到 E2E 论坛!  一些可能有用 的资源是《适用于精密 ADC 的 RTD 测量和温度传感器固件基本指南》。  尽管固件示例是为嵌入式 C 应用编写的、但代码流应帮助您确定设置和进行 RTD 测量所需遵循的正确过程。

    从您的说明中可以看到、您正在提供 START 命令、然后在发出读取数据(RDATA)命令后立即提供该命令。  发出 START 命令后、您必须等待转换完成、然后才能尝试读取结果。  转换结束由 DRDY 的高电平到低电平转换发出信号。  

    另一种可使用的方法是在发出 START 命令后等待或延迟一段时间、然后再尝试读取数据。  延迟时间取决于寄存器设置中选择的数据速率和数字滤波器。  低延迟滤波器的 ADS124S08数据表的表13和 SINC3数字滤波器的表15中显示了所需的时间长度。

    此致、

    Bob B

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

    谢谢 Bob、

    我删除了 RDATA 命令、延迟一段时间后只读取3个字节。 现在工作正常。

    我还修改了驱动器、以设置正负通道。 原始 Linux 驱动程序非常假、或者至少不能进行 RTD 测量!

    此致

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

    Lidia、您好!

    很高兴听到 Bob 的帮助使其正常工作。 为便于将来参考      、适用于精密 ADC 的温度传感器固件具有 C 代码、其中显示了如何使用表配置 ADS124s08、不同的配置在 RTD 测量中使用 ADS124S08 EVM、配置有两线、三线和四线。 使用 您的驱动程序、此代码可通过一些修改移植到 Linux 系统。 实际上、看到您对 Linux 驱动程序所做的更改会很有趣。 此驱动程序是开源的,您可以向 现有驱动程序提交修补程序,也可以将其作为单独的驱动程序提交。

    就对 DRDY 信号的响应而言、IIO 驱动器需要注册触发器。 连接到 DRDY 的 GPIO 充当触发器、然后调用驱动器。 以下是文档:

    https://www.kernel.org/doc/html/latest/driver-api/iio/triggers.html

    此处 是 STM 文档 中用于寄存 内部 ADC 的示例、供参考  

    此致、
    佩德罗