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:如何将读取的值转换为度数

Guru**** 2595805 points
Other Parts Discussed in Thread: ADS124S08

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/835919/ads124s08-how-to-convert-read-values-to-degrees

器件型号:ADS124S08

您好!

在上一个线程之后、

e2e.ti.com/.../3090752

我获取以下数据

* ads124xxx_SPI_datrd:5394087 (524ea7h)温度 val:52h 4Eh 52h a7h Drdy=0
* ads124xxx_SPI_datrd:5396529 (525831h)温度 val:52h 58h 52h 31h Drdy=0
* ads124xxx_spi_datrdh:5396529 (52h 52h
) dh 5224h 52h:52h 24h (SPI_52h)温度 dh 52h 52h 24h 24h (539h) dh 52h 52h 52h) drh (539h 52h 52h 52h 52h 52h 52h 52h 24h 24h 24h) dh (539h 52h 52h 52h 52h 52h 52h 52h) drd:52h 52h 52h 52h 52
52h 47h 52h 86h Drdy=0
* ads124xxx_SPI_datrd:5394582 (525096h)温度范围:52h 52h 96h Dry=0
* ads124xxx_SPI_datrd:5394053 (524e85h) temp:52h 52h 52h 85h 85h 85h * addy=0 * ads124xxx_spi_dath:5394053 (524e85h
) dh 539h 24h (SPI_dh)温度范围:5392452h 52h 2452h 24524h 52h 24h 24h 24h 24596h (24h)
52h 49h 52h 63h Drdy = 0
* ads124xxx_SPI_datrd:5391723 (52456bh)温度范围:52h 45h 52h 6bh Drdy = 0
* ads124xxx_SPI_datrd:5392023 (524697h)温度范围:52h 52h 52h 52h 56h *
dh (d2452h) dh:539h 2452h (dh) dh 2452h
) dh (SPI_dh 52h)温度范围:539h 52h (539h) dh 52h 52h (dh) dh 52h 52h 2452h (dh) 52h 43h 52h FDH Dry=0
* ads124xxx_SPI_datrd:5392397 (52480dh)温度 val:52h 48h 52h 0dh Dry=0
* ads124xxx_SPI_datrd:5391191 (524357h)温度 val:52h 52h 52h 52h Dh Dh D_dh = 0 * ads124xxx_datrd
:5391h (52h)
dh 242452452452424h) dh (SPI_dh) dh 245245245244242424h 24h (SPI_0b) dh 524242424242424h 24h) dh (5245244rh) dh 524 52h 525552h 22h Drdy = 0
* ads124xxx_SPI_datrd:5399255 (5262d7h)温度 val:52h 62h d7h Drdy = 0
* ads124xxx_SPI_datrd:5392257 (524781h)温度 val:52h 52h 52h d7h d7h Drdy = 0 * ads124xxx_spi_datrd
:539h (539h
) d1969 (539h) d2453h) dh (546h) d2453h dh d4h (546h) d24d24dh) d24h (SPI_Dh) d4h (546h) d24d24d24d24d24 52h 55h 52h d3h Drdy = 0
* ads124xxx_SPI_datrd:5394175 (524effh)温度值:52h 4Eh 52h FFH Drdy = 0
* ads124xxx_SPI_datrd:5390391 (524037h) spi val:52h 52h 52h 52h 37h DedH
= 0 * ads124xxx_data0 * dh:5390391 (524037h) spi val:52h 24h 24h) temp dh (52h) deh 32h 24h 24h 24h 24h = 52h (52h

如何将此数据转换为摄氏度?

数据表中没有特别提到任何内容。

有什么想法?

谢谢、

制造商

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

    您好、Manu、

    我们还在讨论内部温度传感器吗?  对于内部温度传感器、您测量的输出是相对于基准的电压。  ADS124S08数据表的第9.3.9.1节第52页的数据表中提供了一些信息。  电气特性表指出25°C 时的典型电压为129mV、温度系数为403uV/°C。  因此、首先需要确定电压、然后将电压转换为温度。  电压等于输出代码乘以 LSB (或1个代码的值)。  LSB 值等于+/-Vref/(增益* 2^24)或 Vref/(增益* 2^23)。

    转换为温度的输出电压为(Vtemp-V25deg)/(403uV/°C)+ 25°C

    例如、假设您的内部温度传感器转换为135mV 的值。  温度将为(135mV-129mV)/(403uV/°C)+25°C = 14.88 +25 = 39.88°C

    您显示的数字对于内部温度传感器而言似乎非常高、因此我将使用示波 器验证您是否在代码中正确读取 SPI 数据。

    此致、

    Bob B

     

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

    尊敬的 Bob:

    感谢您的回复。 实际上是内部温度传感器。

    我读了几次9.3.9.1、但想知道为什么数据表的详细信息如此少。

    不过、通过添加更多详细信息、本文档可能会更好一些。

    (特别是当您拉出头发时,文档可能是导致头发增加的原因。 ;-))

    因此、与 SPI 相关的代码(STM32F334)如下所示:

    /**
    * PB.6 Heartbeat LED
    * PC.4 USART Tx
    * PC.5 USART Rx
    * PC.10 ADS124xxx strt
    * PC.11 ADS124xxx RST
    * PC.12 ADS124xxx DRDY
    * PA.4 ADS124xxx CS
    * PA.5 ADS124xxx SCK
    * PA.6 ADS124xxx MISO
    * PA.7 ADS124xxx DRDY * PA.4 ADS124xxx DRDY * PA.4 * PA.4 ADS124xxx CS * PA.4 ADS124xxx CS * PA.4 ADS124xxx CS * PA.5 ADS124xxx CS * PA.5 ADS124xxx SCK
    
    * PA.5 ADS124xxx SCK * PA.x * PA (_g->BSRR =__p):(__g->BSRR =(__p << 16)))
    
    #define PIN_RST(1 << 11)
    #define PIN_CSx(1 << 4)
    
    /**
    SPI 芯片选择(CS#)
    */
    #define _SPI_CSx (_ SPI_Rx)(_ SPI_CSR_SP_Rx_TS_Rx (_SP_TS_Rx)
    #define SPI_TRIGN
    
    
    
    (_SP_SP_TS_Rx_Rx_Rx_SR_TS_Rx_Rx_TRE (_)#SP_SP_TS_TS_Rx_TR_TR_TRIGN)#SP_SP_TRIGN (_SP_SP_TS_TS_TS_Rx_TS_Rx_TRIGN)#SP_TS_TR_SR_TS_TR_TS_TR_TS_TS_TR_0_SP_SP_TS_TR_ = 0 ||((SPIx)->SR & SPI_SR_BSY)
    #define SPI_ENABLED (SPIx)(((SPIx)->CR1 & SPI_CR1_SPE)
    
    uint8_t addedef 124xxx_SPI_regrd (SPI_tyReg)((SPIx、uint8_t reg);
    SPIDR_1
    
    
    
    
    
    
    
    (SPIDR_1)
    
    
    + SPIDR_1)+ SPI0 (SPIDR_1)+ SPI*(SPIDR_1)+ SPICR_RESP*(SPIDR_1)+ SPI0)(SPICR_RES_RES_TR_1 (SPI0)+ SPI0)+ SPICR_RESP*(SPICR_RES_RES_TR_TR_1 (SPI0)+ SPI+ SPICR_RES_TR_TR_1 (SPI0)(SPI0)+ SPICR
    SPI1->DR = 0x00;//读取单个寄存器*/
    while (SPI_BUSY (SPI1));
    tmp = SPI1->DR;
    __SPI_Wr ();// CS disable */
    
    return
    
    
    
    
    tmp;}uint8_t ads124xxx_spI_regf * SPIx、uintx_r (uint8_t
    
    
    
    
    
    );{=spi_tr_trad_trad_try_de+(while);t regist_tr_int8_tr_trap_trap_tr_t (sp_trap_tr_trap_trap_trap_trag_tr_t);(如果启用 SPIx_tr_trap_tr_trap_trap_trap_t);(SPI8
    /* reg Addr + Write 操作码*/
    while (SPI_Busy (SPI1);
    tmp = SPI1->DR;
    
    while (SPI_Busy (SPIx);
    SPIx->DR = 0x00;// Write single register */
    while (SPI_Busy (SPI1);
    tmp = SPI1->DR;
    
    while (SPIx_DR)
    = SPIx*;tmp_(DSPIx_DR
    
    
    
    
    
    
    
    void ads124xxx_spi_datrd (spi_typedef * SPIx)
    {
    uint8_t drdy;
    uint8_t r0、r1、r2、r3;
    uint32_t x = 0、temp = 0;
    
    drdy = GPIO_ReadInputDataBit (GPIOC、GPIO_Pin_12);//当/DRDY=0时* RD
    *(如果(drdy)
    返回;
    
    __SPI_ENA();
    if (!SPI_ENABLED (SPIx))
    返回;
    
    while (SPI_BUSY (SPIx =
    0x12);SPIx = 0x12)/* RDATA 操作码*/
    while (SPI_BUSY (SPIx);
    r0=SPIx->DR;
    
    while (SPI_BUSY (SPIx);
    SPIx->DR = 0x00;// 8 CLK */ while
    (SPI_BUSY (SPIx);
    r1=SPIx->DR;
    
    while (SPIx-*=SPIx_DR=0x00; SPIx_CLK=SPIx*(SPIx)*=24*(SPIx_DR)
    
    
    
    
    
    
    ;SPIx_CLK =SPIx*(SPIx_DR=24*(SPIx)*(SPIx_CLK =SPIx)*(SPIx_DR=24)*(SPIx_CLK =SPIx_DR);SPIx_DR=SPIx_DR=SPIx*(SPIx_DR=SPIx
    r3 = SPIx->DR;
    
    __SPI_DIS();
    
    temp =((UINT32_t)R2 <<16)和0x00ff0000;
    temp |=((UINT32_t)r1 <<8)和0x0000ff00;
    temp |=(UINT32_t)r3 & ff;
    
    printf ("*%s:%02xh_dy_%02xh_,temp %02xh_
    ,%02xh_r_r_,%02xh_,%02xh_,temp %02xh_,%02xh_,%02xh_ r1、r2、r3、drdy);
    }
    
    uint8_t ads124xxx_spi_cmd (spi_typedef * spIx、uint8_t cmd)
    {
    uint8_t cmd;
    
    __spi_ena();
    if (!spi_enabled (SPIx))
    ) return 0;
    
    while (spi_busy (SPIx (SPIx)
    
    
    = dr);stmp_dr = dr = dr = dr (SPIx = dr = dr);
    
    __SPI_DIS();
    返回 tmp;
    }
    

    而不是

    5394087 (524ea7h) temp val: 52h 4eh 52h a7h

    如果看起来是这样的

    5132967 (4e52a7h) temp val: 52h 4eh 52h a7h

    它是否仍然很远? (我猜是这样)

    在 ads124xxx_SPI_datrd()中,一个拼写错误导致 R1和 R2交换,从而交换了2个半字节。 我想,尽管如此,读数还是会偏离?

    我需要设置一个逻辑分析仪、以便更好地进行捕获。 需要从 SPI 缓冲器获取已知值以进行读取和比较。 早上5点左右、需要稍微关闭我的眼罩。

    不过、寄存器内容似乎还可以。

    示波器捕获如下所示:

    (在我设置逻辑分析仪并在早上进行深入挖掘之前。) 您在快速浏览时发现的任何问题?

    谢谢、

    制造商

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

    您好、Manu、

    我不确定我在使用示波器镜头时看到的是什么。  要验证 RDATA 通信、您只需查看该特定序列(总共32位)。  您的代码有点偏离、因为 r0和 r1字节在几乎所有情况下都应该相同。  R1的值是最高有效字节、但在代码中、您将在函数内汇编数据、其中 R1为中间字节。   

    temp =  ((uint32_t)r2 << 16) & 0x00ff0000;
        temp |= ((uint32_t)r1 << 8) & 0x0000ff00;
        temp |= (uint32_t)r3 & 0x000000ff;
    我假设 ADS124S08在工作时约为室温。  当使用增益为4的2.5V 内部基准时、输出十六进制代码应更接近0x1A 6B 50。
    此致、
    Bob B
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bob:

    我清楚而大声地听到你所说的话。

    SPI 移位寄存器中是否有某种已知值、

    以便我可以读取和验证内容、以确定真实性

    首先是 SPI 传输本身?

    谢谢、

    制造商

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

    您好、Manu、

    由于读寄存器功能似乎正常工作、我建议在将新配置写入寄存器后、验证新内容以确保寄存器设置正确。  我还会发出自偏移校准、以从结果中消除该小误差。  这应该在更改 PGA 增益设置后完成。

    接下来、我将看一下 RDATA 通信的范围截屏。  这只有32个时钟、因此您应该能够充分放大、以判断传输的值是否是您在代码中接收的值。

    此致、

    Bob B

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

    尊敬的 Bob:

    正如您所说的、读取寄存器似乎至少对寄存器有效。

    在发出 RDATA 命令时,我不会有这样的感觉:事情真的很好。

    原因是这些值只是在这里和那里徘徊过多。

    我怀疑这将是一个现实的世界可能性。 当然、可以通过滤波 AS 来降低

    您说、但它会减少这么多吗? 我怀疑。

    我觉得它与 SPI 传输本身有关、但我不知道到底是什么、

    或从何处开始。 我们将在连接示波器和逻辑分析仪的情况下查看它。 以获得更好的效果

    值之间的相关性。

    将更多地调试 SPI 传输。

    您提到的自偏移校准也会尝试这样做。

    谢谢、

    制造商

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

    您好、Manu、

    在通信方面、您只需验证您看到的与示波器快照相关的传输内容是您的软件作为正确的代码提供给您的内容。

    对于变化的结果、这将取决于您使用的增益/数据速率。  默认数据速率为20sps 和低延迟滤波器。  使用内部基准、您可能会看到至少16个代码在读数之间切换。  您的数据多次显示、因此您不是真正测量内部温度传感器、就是存在一些可能与通信或电源/基准电源相关的其他问题。

    就像您之前说过您有接线问题一样、我将假定您上次在上一篇文章中提供的原理图是原型形式、而不是 PCB 上的原理图。  此假设是否正确?  为确保 ADS124S08内部的模拟电路的稳定性、必须确保 AVDD/AVSS 之间至少有330nF 的电容。  REFOUT 和 REFCOM 之间还必须有一个至少1uF 的电容、并且 REFCOM 必须连接到 AGND。

    您还应使用低阻抗连接(无铁氧体)直接将 AGND 和 DGND 连接到 ADS124S08附近的某个位置。

    此致、

    Bob B

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

    尊敬的 Bob:

    [引用用户="Bob Benjamin "]

    在通信方面、您只需验证您看到的与示波器快照相关的传输内容是您的软件作为正确的代码提供给您的内容。

    [/报价]

    我认为 SPI 通信存在一些问题。 随我一直在调试的 SPI 通信附加一个文档文件。

    e2e.ti.com/.../SPI_5F00_Debug.docx

    -无论我使用8位还是16位 SPI 通信、F334都能进行16位 SPI 通信、我想、看看 SPI 波形、这是我遇到的一个问题。

    -当我读取单个寄存器时,它会被正确读取。

    -当我一次读取几个寄存器时、逻辑分析仪上的 SPI 解码器在第一次传输时缺失并抱怨 CLK 初始设置。

    ——有些地方看起来很奇怪,但看不到到底是什么错了;我需要更深入地看一下。

    您是否认为相同?

    [引用用户="Bob Benjamin "]

    对于变化的结果、这将取决于您使用的增益/数据速率。  默认数据速率为20sps 和低延迟滤波器。  使用内部基准、您可能会看到至少16个代码在读数之间切换。  您的数据多次显示、因此您不是真正测量内部温度传感器、就是存在一些可能与通信或电源/基准电源相关的其他问题。

    [/报价]

    是的,可能我甚至不会读取温度传感器,可能是吗?

    读回数据的上升和下降幅度过大的原因,对吧? 这不应该是这样的,对吧?

    [引用用户="Bob Benjamin "]

    就像您之前说过您有接线问题一样、我将假定您上次在上一篇文章中提供的原理图是原型形式、而不是 PCB 上的原理图。  此假设是否正确?  为确保 ADS124S08内部的模拟电路的稳定性、必须确保 AVDD/AVSS 之间至少有330nF 的电容。  REFOUT 和 REFCOM 之间还必须有一个至少1uF 的电容、并且 REFCOM 必须连接到 AGND。

    [/报价]

    遗憾的是、我在 PCB 上安装了它。

    我之前提到的问题 是使用了 REFP1/N1对而不是 REFP0/N0对。 您之前评论过、默认寄存器设置是使用 REFP0/N0对。 在我的情况下、我可能需要更改默认设置以改用 P1/N1对。 看来,仅仅标记网,虽然与机器一起工作,但对人类根本不友好。

    随附的原理图

    我有:

    REFCOM 和 REFOUT 之间的1uF 电容(C11)。

    - AVDD 和 AVSS 之间的100nF 和1uF MLCC 电容(C3和 C4)、最靠近 PCB 另一侧的 ADC、使用过孔。

    - AGND 和 PGND 连接在一起、靠近 ADC。

    谢谢、

    制造商

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

    您好、Manu、

    我想、您可能要进行 RTD 测量、也可能要进行一些测量、其中 IDAC 生成连接到 REF1的基准电压。  使用 REF1或 REF0无关紧要、但必须确保为正在进行的测量选择正确的基准。

    要测量内部温度、应使用内部基准、该基准要求将其打开并选择为基准。  您应该使用此参考的原因是它不依赖于任何外部连接。

    数据传输的长度确实是16位。  只要数据格式正确、并且 CS 在整个通信事务(您似乎是这样做的)中保持低电平、就可以使用16位传输。  如果是 WREG 或 RREG 等多字节命令、则命令字由2个字节(或16位)组成、因此只要您对缓冲区进行写入/读取、就应该是可以的。

    对于长度为8位的命令(例如 RDATA)、您需要确保捕获的数据与传输和接收的数据相同。  ADS124S08数据表第70页的图91显示了时钟序列。  我们将假定状态和 CRC 未被启用为被发送、并且只有转换数据被发送。 发送的 RDATA 命令还将包含在第一个16位传输中接收到的 MSB。  因此、您必须确保从 FIFO 接收到字节。  事务的第二部分将包含另一个16位传输、接收缓冲区现在将包含转换数据的中字节和 LSB。  您在逻辑分析仪上捕获的内容应与您在代码中捕获的内容相匹配。  否则、您将无法正确读取或保存缓冲区数据。

    此致、

    Bob B

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

    尊敬的 Bob:

    确实、这是一个很好的见解、SPI 通信存在一些问题。 发现并解决了问题! 为了完成、我在这里添加了代码片段。 不过、我有几个问题。

    问题现已修复、原因是 SPI 写入。 由于采用16位 SPI 通信、ADS124S08将写入 DC 字节作为要写入寄存器0x05 (即0x00)的数据。 因此、基准被"不"打开。 这说明了读取值中的大摆动。 仅使用 START 命令时、ADC 工作异常。

    uint8_t ads124xxx_spi_regwr (spi_typedef * spix、uint8_t reg、uint8_t dat)
    {
    uint8_t tmp;
    
    __spi_ena();
    if (!spi_enabled (SPIx)
    )返回0;
    
    while (spi_busy (SPIx));
    *
    
    
    
    
    代码= SPIr_dr = 1 + SPIdr + 1 + SPIdr = 1 + SPIdr +代码+ 1 + SPIdr! STM32F334 SPI 外设错误!
    *使用 STM32F334时、所有 SPI 传输均为16位、
    *即使选择了8位模式。
    *问题1:
    * ADS124S08使用第二个字来表示
    要写入 ADC 的*字节数。
    *由于控制器进行16位传输、
    *发送到 ADS124S08的长度字段始终为"0"
    *因此只能写入单个寄存器。
    *问题2:
    *由于长度字默认假设为"0"
    *不需要再次将"length"字段发送到
    * ADS124S08
    *可能存在变通办法。
    //
    while (SPI_BUSY (SPIx));
    SPIx->DR = dat;//向寄存器写入*/ while
    (SPI_BUSY (SPIx));
    tmp = SPIx->DR;
    __SPI_DIS ();
    
    return tmp;
    }
    
    void ads124xxx_sfocal (SPIx)*= 0x124ixxx、
    
    01241_ref (SPIx);启用
    ***、0x1241x_ref (***、01241_ref
    
    
    ); 0x30);// PGA 输入短接至(AVDD+AVSS)/2 */
    ads124xxx_SPI_regwr (SPI1、0x03、0x00);// gain=1 */
    ads124xxx_SPI_cmd (SPI1、0x08);//开始(0x08)转换*/
    GPIO_SetBits (GPIC_Pin)*
    
    、0x124n_FOC_(*
    、0x1210_FOC_);//完成* RFIF_PIN_C12430_FOC_(*、0x12_FOC_)
    
    
    /**
    *测量内部裸片温度
    *转换为温度的输出电压为
    *(Vtemp-V25deg)/(403uV/°C)+ 25°C
    *
    内部温度传感器输出一个相对于基准的电压。
    *参考:ADS124S08数据表第9.3.9.1节中的第52页。
    *典型输出电压为129mV @Ta=25C。
    *它的温度系数为403uV/°C。
    *
    -首先需要确定电压
    、*然后将电压转换为温度。
    *
    *-电压等于输出代码乘以 LSB
    *(或1个代码的值)。
    *
    *- LSB 值等于
    :*+/-Vref/(增益* 2^24)-OR
    * Vref/(GAIN*2^23)。
    *
    *-转换为温度的输出电压为
    *(Vtemp-V25deg)/(403uV/°C)+ 25°C
    */
    void ads124xxx_temp_sense (SPI_typedef * SPIx)
    {
    /**
    *您必须具有有效的基准电压才能生成转换结果。
    * e2e.ti.com/.../3090752
    *尝试通过写入0x1a 来打开并使用内部基准
    */
    ads124xxx_spi_regwr (SPI1、0x05、0x1a);
    printf ("*%s:启用的基准电压\r"、__func__);
    ads124xxx_dump_regs (SPI1);
    
    /**
    *测量内部温度传感器时
    ,*模拟输入与 ADC 断开连接,
    *温度传感器的输出电压将
    *路由到 ADC 进行测量。 如果启用、
    则必须将 PGA 增益*限制为4才能使温度传感器测量
    *保持在
    PGA 允许的绝对输入电压范围*内。
    //
    ads124xxx_spi_regwr (SPI1、0x09、0x50);//启用温度传感器*/
    adsprintxxx_spi_regwr (SPI1、0x03、0x0a);//启用 PGA,限制增益= 4 */
    ads124xxx_spi_cmd (SPI1、0x08);//
    
    启用 SPICT_r_convertifr*
    
    
    
    
    、0x08_spi_conversion (*、0x124r_spi_spi_conversion);///* INPMUX:AIN8:+IN、AIN9:-IN */
    ads124xxx_SPI_regwr (SPI1、 0x03、0x0a);//启用 PGA,GAIN=4 */
    ads124xxx_SPI_regwr (SPI1、0x05、 0x04);//参考输入:REFP1、REFN1 */
    ads124xxx_SPI_regwr (SPI1、0x06、0x05);// IDACwr:500uA */
    ads124xxx_SPI_regwr (SPI1、0x07、0xBA);// IDACMUX:IDAC2->IDAC11->AD124xxx_ADMAG (SPI1、0x07、0xBa)
    0x09、0x10);//
    
    printf ("*%s:将引用设置为 REFP/N1\r"、__func__);
    ads124xxx_dump_regs (SPI1);
    
    ads124xxx_spi_cmd (SPI1、0x08);/* start (0x08)转换*/
    GPIO_SetBits (GPIOC、GPIO_Pin_10);/* START 引脚使能*/
    }
    
    int main (void)
    {
    int x = 0;
    uint32_t dat;
    
    SysTick _Config (SystemCoreClock / 1000);/* SysTick event @1ms *
    / GPIO_setup();
    USART1_INTI-/-/-*-/-/-/-/-/-/-/-/-/-/-/print/-r-
    
    
    \r");
    printf (" ADS124xxx Test\r");
    printf ("-------- \r\n
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    ^ GPIO);ads124xxx_reset ();//重置 ADC */ ads124xxx_spi_test (SPI1);//读取寄存器0x01 dat = ads124xxx_spi_regrd (SPI1、0x01);if (!(dat & 0x07))) regf ("ADS124S08 found (r)\r)= ads124i1 (SP124i1);/sp124i1)*/spr_remote_remote_s*(s1*;ades1);ades* offset (s124i1);/sp124i1)/sp124i1)/spr_remote_remote_remote_remote_ds124124r*(s*(s*(s124r*(swi1);ads124r_offset (s124r_offset);adr_offset (s124r*);/ad/*切换 LED */
    delay (500);
    ads124xxx_SPI_datrd (SPI1、&dat);
    }
    }
    

    这样、我就得到了足够的、好的值、我想。

    读回值看起来足够稳定。

    我有几个问题、尽管它们与读取 RTD 有关:

    int main (void)
    {
    int x = 0;
    uint32_t dat;
    
    SysTick _Config (SystemCoreClock / 1000);// SysTick 事件@1ms */
    GPIO_setup();
    USART1_Init();//用于 IO 重定向*/
    SPI_setup();
    
    printf ("-r ----------------- \r");
    printf (" ADS124xxx Test\r");
    printf ("-------- \r\n
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    ^ GPIO);ads124xxx_reset ();//重置 ADC */ ads124xxx_spi_test (SPI1);//读取寄存器0x01 dat = ads124xxx_spi_regrd (SPI1、0x01);if (!(dat & 0x07))) regf ("ADS124S08 found (r)\r)= ads124124xxx (SPI1*);adsense_remote_remote_s*(SP124i1);/sp124i204124r*(s*)/spr_remote_remote_remote_s*(SP124i1);/ads1* offset (SP124i1);ads124r*(s124r*/spr_offset)/spr_remote_remote_remote_remote_ds124r*(s*);(s124r*(s124r*/*切换 LED */
    delay (500);
    ads124xxx_SPI_datrd (SPI1、&dat);
    }
    }
    

    -自偏移校准是正确的方法?

    -正如您在上面的功能中看到的,我一直在尝试配置 MUX 和 IDAC 以读取 RTD,但没有取得很大的成功。

    我已将 IN1A 和 IN1B 连接到+3V3、因此选择将 AIN7、AIN8连接到 AIN8并将 AIN9连接到 ADC 的网络、而无需任何多路复用、以确保安全测试。

    结果很奇怪:

     -如果我断开 RTD 连接、我得到0x7f ff FFH 作为输出

    如果我插入 RTD、它看起来有点奇怪:

    我得到的只是读取值的一些变化:

    如果我卸下 RTD 连接器、然后只需触摸连接器上的引脚、我会看到以下数据变化:

    因此、当我触摸终端时、ADC 输入正在读取它被抛出的数据。 但 IDAC 可能无法正常工作?

    我的逻辑是否正确? 如果是、您在我的初始化过程中看到了任何问题?  ads124xxx_rtd_sense () functon 与上述相同。

    您想评论什么?

    谢谢、

    制造商

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

    尊敬的 Bob:

    内部基准似乎有问题。 再次跳闸。 :-)

    数据表在脚注中说明(我确实错过了脚注、即使在多次阅读后也是如此!):

    "(2)要使用 IDAC、必须打开内部电压基准。" 它的工作原理是!

    您对自偏移校准过程有何看法?

    谢谢、

    制造商

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

    您好、Manu、

    SFOCAL 命令仅要求在 ADC 处于活动转换模式时(假设您还具有进行转换的有效基准)发出命令。  您无需将多路复用器设置为短接、因为 SFOCAL 命令将自动作为命令的一部分建立此连接。  最好将增益设置为您将用于传感器的增益。

    另一条信息与 START 命令和 START 引脚相关。  您只需使用一种或另一种模式即可启动。  START 引脚优先于命令。

    此致、

    Bob B

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

    尊敬的 Bob:

    感谢您的解释。 START 引脚可能有助于启动事务、而 SPI 写入函数则无法传输本应传输的数据。

    有关如何转换 RTD 值、最佳 IDAC 电流设置等的任何想法、以实现实际目的。 (目前、我盲目假设100uA)。

    谢谢、

    制造商

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

    您好、Manu、

    请阅读  《RTD 测量基本指南》和 ADS124S08数据表第10.2节中所示的3线 RTD 应用电路。  您还可以查看指导手册中的电路:

    http://www.ti.com/lit/an/sbaa330a/sbaa330a.pdf

    此致、

    Bob B

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

    尊敬的 Bob:

    谢谢你。 我将深入了解这些文档。

    我绘制了输出值(未校准)、以了解输出值。

    在室温下、RTD 保持在手边几秒钟、然后释放。 (只是为了视觉享受)

    谢谢、

    制造商