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.

[参考译文] ADS1248:用于 RTD PT100热测量的连续转换模式下的 SPI 通信

Guru**** 2394295 points
Other Parts Discussed in Thread: ADS1248, ADS1148

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/763842/ads1248-spi-communication-in-continously-conversion-mode-for-rtd-pt100-thermo-measurement

器件型号:ADS1248
主题中讨论的其他器件: ADS1148

我想将 ADS1248与外部 Mikrocontroller (Diablo16)器件配合使用、以测量 PT100电阻器的温度。

ADS1248已将电源 AVDD 和 DVDD 设置为3、3V、启动并在硬件侧复位、在启动时保持高电平3、3V。  

ADS1248正在连续转换模式下工作、请参阅数据表中的图71第37页。 由于我接收的 ADS1248数据不正确、我在 SPI 总线上的通信出现问题。  

当 START 引脚始终保持高电平时、是否有关于连续转换模式(SCLK / DIN / DOUT)的其他信号的其他信息? 是否有必要发送 RDATA 或 RDATAC 命令来访问数据,或者在 DOUT/DRDY 指示新转换准备好访问正确数据后发送24个 SCLK 是否足够?  

我在这里附上了 SPI 通信的图片:

我正在使用在 ADS1248的 DRDY 引脚上触发的中断功能。 当 DRDY 发生变化时、我将发送24个 SCKL 来获取数据。

在下面添加了我将用于通过 SPI 与 ADS1248进行通信的 Mikrocontroller 源代码的部分:


//将串行接口配置为 SPI 模式1
PIN_HI (芯片选择);
PIN_SET (PIN_OUT、芯片选择);
如果(! SPI1_SDI_Pin (SDIPin)
打印(“SDI 引脚无效”);
ERR:= 1;
字节序
如果(! SPI1_SCK_Pin (串行时钟)
打印(“SCK 针脚无效”);
ERR:= 1;
字节序
如果(! SPI1_SDO_Pin (SDOPin)
打印(“SDO 针脚无效”);
ERR:= 1;
字节序
如果(! SPI1_Init (SPI_SPEED0、SPI8_MODE_0)//设置 SPI1 mit 4、375Mhz und SPI_mode1
打印(“初始化参数无效”);
ERR:= 1;
字节序

如果(错误)
永远重复
字节序

重复
状态:= Touch_get (Touch_status);//获取触摸屏状态
n:= img_talg(ndl,-1);
//----------------------------------------------
if (state =touch 按压)//如果有按压操作
x:= touch (touch)获取(touch_gRTX);
Y:= touch (touch)获取(触摸);
字节序
//----------------------------------------------
if (state =touch 已释放)//如果有释放
if (n=iDipswitch3) dip3func();
字节序
//----------------------------------------------
if (state =touch 移动)//(如果移动)
x:= touch (touch)获取(touch_gRTX);
Y:= touch (touch)获取(触摸);
if (n =iSlide1) movetrack1 ();// PWM PA4输出引脚的 Channel1跟踪条
if (n =iSlide2) movetrack2 ();// PWM PA9输出引脚的 Channel2跟踪条
if (n =iDipswitch1) dip1func();// Button Channel1 PA5 High (如果 n =iDipswitch1) dip1func();//按钮 Channel1 PA5高电平或低电平
if (n =iDipswitch2) dip2func();// Button Channel1 PA7 High (如果 n =iDipswitch2) dip2func();//按钮 Channel1 PA7高电平或低电平

字节序

BUS_SetChangeInterrupt (SPI_DATaread、DRDY);//通过更改 PA8上的 DRDY 来启动 SPI_DATaread 函数

结束基金

func spi_dataread()

PIN_LO (芯片选择);
//SPI1_Write (RDATA);//读取数据一次
SPI1_ReadBlock (str_ptr (rawdata)、3);//从 SPI 读取3个字节并将其存储在数组 res
//SPI1_Write (NOP);//send NOP 命令
//暂停(1);
PIN_HI (芯片选择);
结束基金

我很高兴能在这个问题上提供任何帮助

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

    欢迎来到 E2E 论坛! 您的通信似乎是正确的。 您能否提供用于 ADS1248的原理图和寄存器设置? 您能否详细解释数据以及您认为数据不正确的原因(例如您期望的内容和您收到的内容)?

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

    Bob、您好!

    现在、我在启动时使用默认寄存器设置、这意味着我不会写入寄存器。 我只需为 ADS1248加电、然后发送24个 SCKL 来获取数据。

    我还尝试通过以下命令设置寄存器、但它没有发生变化:

    PIN_LO (芯片选择);
    SPI1_Write (0x06);//向 ADS1248发送复位命令
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (WREG);//写入寄存器
    SPI1_Write (IDAC0);//地址 MUX0
    SPI1_Write (0xE);//烧毁电流源关闭/Pos 输入:AIN0 (默认值)/Neg 输入:AIN1 (默认值)
    PIN_HI (芯片选择);
    
    PIN_HI (芯片选择);
    SPI1_Write (WREG);//写入寄存器
    SPI1_Write (MUX0);//地址 MUX0
    SPI1_Write (0x01);//烧毁电流源关闭/Pos 输入:AIN0 (默认值)/Neg 输入:AIN1 (默认值)
    PIN_LO (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (WREG);//写入寄存器
    SPI1_Write (MUX1);//地址 MUX1
    SPI1_Write (0x20);//使用内部振荡器/内部基准始终开启/选择了 REFP0和 REFN0基准输入
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (WREG);//写入寄存器
    SPI1_Write (SYS0);//地址 SYS0
    SPI1_Write (0x20);//PGA = 4 / DR = 5SPS
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (WREG);//写入寄存器
    SPI1_Write (IDAC0);//地址 IDAC0
    SPI1_Write (0x06);//IDAC0:1mA
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (WREG);//写入寄存器
    SPI1_Write (IDAC1);//地址 IDAC1
    SPI1_Write (0x89);//IDAC1:IEXC1 IDAC2:IEXC2
    PIN_HI (芯片选择);
    
    PIN_HI (芯片选择);
    SPI1_Write (WREG);//写入寄存器
    SPI1_Write (VBIAS);//地址 VBIAS
    SPI1_Write (0x00);//禁用偏置电压
    PIN_LO (芯片选择);
    
    PIN_HI (芯片选择);
    SPI1_Write (WREG);//写入寄存器
    SPI1_Write (OFC0);//地址 OFC0
    SPI1_Write (0x00);//复位偏移校准
    PIN_LO (芯片选择);
    
    PIN_HI (芯片选择);
    SPI1_Write (WREG);//写入寄存器
    SPI1_Write (OFC1);//地址 OFC1
    SPI1_Write (0x00);//复位偏移校准
    PIN_LO (芯片选择);
    
    PIN_HI (芯片选择);
    SPI1_Write (WREG);//写入寄存器
    SPI1_Write (OFC2);//地址 OFC2
    SPI1_Write (0x00);//复位偏移校准
    PIN_LO (芯片选择);
    
    PIN_HI (芯片选择);
    SPI1_Write (WREG);//写入寄存器
    SPI1_Write (GPIOCFG);//地址 GPIOCFG
    SPI1_Write (0x00);//全部用作模拟输入
    PIN_LO (芯片选择);
    
    PIN_HI (芯片选择);
    SPI1_Write (WREG);//写入寄存器
    SPI1_Write (GPIODIR);//地址 GPIODIR
    SPI1_Write (0x00);//全部用作模拟输入
    PIN_LO (芯片选择);
    
    PIN_HI (芯片选择);
    SPI1_Write (WREG);//写入寄存器
    SPI1_Write (GPIODAT);//地址 GPIODAT
    SPI1_Write (0x00);//全部用作模拟输入
    PIN_LO (芯片选择); 

    是否需要在启动时设置寄存器,因为它们具有默认值?  

    我随附了我正在使用的原理图:

    e2e.ti.com/.../TempContMeas_5F00_v1.pdf

    我接收到的大部分值都是0xFFFFFFF 等值以及其他一些随机值。 它不是一个稳定的值、并且会在高阶数下发生变化。   

    我计算了 PT100电阻在80C°和-20C°下的最大和最小电阻:

    A = 3.9083*10^-3;
    B =-5.775*10^-7;
    C =-4.183*10^-12;
    R0 = 100;

    电阻下限的计算百分比
    RTD_1 = R0*(1+(A*T1)+(B*T1^2)+((C*T1^3)*(T1-100));
    计算较高电阻的百分比
    RTD_2 = R0*(1+(A*T2)+(B*T2^2));

    R (-20C°)= 92.16 Ω

    R (80C°Ω)= 130.89 Ω

    我使用的基准电阻为820欧姆、激励电流为1mA。

    我需要一个代码:R/Rref:100欧姆/820欧姆:0.1219... 因此需要一个大约为0x00000的代码。

    如果我不设置寄存器、是否可以更正默认情况下没有激励电流且测量失败?

    是否有方法可以测试是否可以正确写入寄存器?  

    感谢你的帮助

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

    尊敬的用户5922913:

    有关代码的几个方面。  首先、在发出 RESET 命令后、必须在与 ADS1248通信之前延迟。  请参阅 数据表第46页的图80。  此命令不是必需的、因为当所有电源都处于标称工作电压时、器件将被复位。  如果您确实希望使用重置命令、请确保在尝试任何进一步的通信之前等待。

    WREG 和 RREG 命令与您在代码片段中显示的命令略有不同。  作为一个示例、我将讨论 WREG 操作、但 RREG 是相似的。  有2个命令字节。  第一个命令字节以0100开头、低半字节是您希望开始写入的寄存器地址。  第二个命令字节是要写入的寄存器数量减1。  这允许块写入(或使用 RREG 命令进行读取)。  因此、如果您只想写入一个寄存器、则第二个命令字节将为0x00 (1个寄存器写入减1)。  2个寄存器将为0x01、依此类推。  2个命令字节之后的字节是数据。  您需要为要写入的寄存器数量提供正确数量的数据字节。

    例如、您的命令集将从以下位置更改:

    PIN_LO (芯片选择);

      SPI1_Write (WREG); //写入寄存器

      SPI1_Write (IDAC0); //地址 MUX0

      SPI1_Write (0xE);  //烧毁电流源关闭/Pos 输入:AIN0 (默认值)/Neg 输入:AIN1 (默认值)

      PIN_HI (芯片选择);

    至:

    PIN_LO (芯片选择);

      SPI1_Write (WREG|IDAC0); //写入寄存器

      SPI1_Write (0x00); //地址 MUX0

      SPI1_Write (0xE);  //烧毁电流源关闭/Pos 输入:AIN0 (默认值)/Neg 输入:AIN1 (默认值)

      PIN_HI (芯片选择);

    至于使用默认设置、如果不配置寄存器、则无法获得有意义的数据。  这将包括打开内部基准(用于建立 IDAC 源)、设置 IDAC 幅度、为 IDAC 源布线以及为要测量的 RTD 选择基准。  当然、您还需要选择要测量的输入。

    我看到您的基准输入上没有任何滤波器、您的 RTD 输入上只有非常大的电容值。  我强烈建议查看以下信息:

    使用 ADS1148和 ADS1248进行 RTD 比例测量和滤波:

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

    和《RTD 测量基本指南:

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

    此致、

    Bob B

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

    尊敬的 Bob:

    非常感谢您迄今提供的帮助。

    我现在使用以下代码设置 ADS1248的寄存器:

    // ADS1248的初始化
    
    PIN_LO (芯片选择);
    SPI1_Write (0x40); //写入寄存器地址 MUX0 WREG|IDAC0
    SPI1_Write (0x00); 要写入的//字节- 1.
    SPI1_Write (0x01); //烧毁电流源关闭/Pos 输入:AIN0 (默认值)/Neg 输入:AIN1 (默认值)
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x41); //写入寄存器 VBIAS WREG|VBIAS
    SPI1_Write (0x00); 要写入的//字节- 1.
    SPI1_Write (0x00); //偏置电压被禁用
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x42);//写入寄存器 MUX1 WREG|MUX1
    SPI1_Write (0x00);//要写入的字节- 1.
    SPI1_Write (0x20);//使用内部振荡器/内部基准始终开启/选择了 REFP0和 REFN0基准输入
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x43);//写入寄存器 SYS0 WREG|SYS0
    SPI1_Write (0x00);//要写入的字节- 1.
    SPI1_Write (0x20);//PGA = 4 / DR = 5SPS
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x4A);//写入寄存器 IDAC0 WREG|IDAC0
    SPI1_Write (0x00);//要写入的字节- 1.
    SPI1_Write (0x06);//IDAC0:1mA DOUT/DRDY = DOUT
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x4B);//向寄存器 IDAC1写入 WREG|IDAC1
    SPI1_Write (0x00); 要写入的//字节- 1.
    SPI1_Write (0x89);//IDAC1:IEXC1 IDAC2:IEXC2
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x44);//写入寄存器0FC0 WREG|0FC0
    SPI1_Write (0x00); 要写入的//字节- 1.
    SPI1_Write (0x00);//复位偏移校准
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x45);//写入寄存器 OFC1 WREG|OFC1
    SPI1_Write (0x00); 要写入的//字节- 1.
    SPI1_Write (0x00);//复位偏移校准
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x46);//写入寄存器 OFC2 WREG|OFC2
    SPI1_Write (0x00); 要写入的//字节- 1.
    SPI1_Write (0x00);//复位偏移校准
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x4C);//写入寄存器 GPIOCFG WREG|GPIOCFG
    SPI1_Write (0x00); 要写入的//字节- 1.
    SPI1_Write (0x00);//全部用作模拟输入
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x4D);//写入寄存器 GPIODIR WREG|GPIODIR
    SPI1_Write (0x00); 要写入的//字节- 1.
    SPI1_Write (0x00);//全部用作模拟输入
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x4E);//写入寄存器 GPIODAT WREG|GPIODAT
    SPI1_Write (0x00); 要写入的//字节- 1.
    SPI1_Write (0x00);//全部用作模拟输入
    PIN_HI (芯片选择); 

    我使用 RREG 命令检查寄存器是否正确设置:

    PIN_LO (芯片选择);
    SPI1_Write (0x20);//读取寄存器 MUX0
    SPI1_Write (0x00);//bytes to be read - 1.
    SPI1_Write (0xFF);//使用 NOPS 读取数据
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x21);//读取寄存器 VBIAS WREG|VBIAS
    SPI1_Write (0x00);//bytes to be read - 1.
    SPI1_Write (0xFF);
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x22);//读取寄存器 MUX1 WREG|MUX1
    SPI1_Write (0x00);//bytes to be read - 1.
    SPI1_Write (0xFF);
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x23);//读取寄存器 SYS0 WREG|SYS0
    SPI1_Write (0x00);//bytes to be read - 1.
    SPI1_Write (0xFF);
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x2A);//读取寄存器 IDAC0 WREG|IDAC0
    SPI1_Write (0x00);//bytes to be read - 1.
    SPI1_Write (0xFF);
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x2B);//读取寄存器 IDAC1 WREG|IDAC1
    SPI1_Write (0x00);//bytes to be read - 1.
    SPI1_Write (0xFF);
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x24);//读取寄存器0FC0 WREG|0FC0
    SPI1_Write (0x00);//bytes to be read - 1.
    SPI1_Write (0xFF);
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x25);//读取寄存器 OFC1 WREG|OFC1
    SPI1_Write (0x00);//bytes to be read - 1.
    SPI1_Write (0xFF);
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x26);//读取寄存器 OFC2 WREG|OFC2
    SPI1_Write (0x00);//bytes to be read - 1.
    SPI1_Write (0xFF);
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x2C);//读取寄存器 GPIOCFG WREG|GPIOCFG
    SPI1_Write (0x00);//bytes to be read - 1.
    SPI1_Write (0xFF);
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x2D);//读取寄存器 GPIODIR WREG|GPIODIR
    SPI1_Write (0x00);//bytes to be read - 1.
    SPI1_Write (0xFF);
    PIN_HI (芯片选择);
    
    PIN_LO (芯片选择);
    SPI1_Write (0x2E);//读取寄存器 GPIODAT WREG|GPIODAT
    SPI1_Write (0x00);//bytes to be read - 1.
    SPI1_Write (0xFF);
    PIN_HI (芯片选择);
    

    我检查了 RREG 命令的答案,现在寄存器似乎是正确的设置:)

    现在、我接收的数据不再一直跳转到0xFF、并且是稳定的。 但是、在第二次触摸 PT100时、它会将值更改为0xFFFF。 这是否必须与 PGA 的增益有关? 我使用的是820欧姆电阻器、1%作为基准。  

    我正在使用一个函数读取数据、该函数在 ADS1248的 DRDY 输出更改状态时触发。 我是否需要仅在高电平状态时触发该功能,以便检查 DRDY 是否从低电平变为高电平? 现在我在函数中使用仅获取3个 NOP 的数据,是否需要使用 RDATAC 命令?

    PIN_LO (芯片选择);
    SPI1_ReadBlock (str_ptr (rawdata)、3);//从 SPI 读取3个字节并将其存储在数组 rawdata
    pin_HI (ChipSelect)中; 

    我在基准输入和 PT100输入上添加了低 pas 滤波器 我添加了远程信息处理:

    e2e.ti.com/.../TempContMeas_5F00_v3.pdf

    我已查看您参考的滤波器的应用手册。 我并不完全理解、但有人说、模拟输入滤波器和基准输入之间的频率削减不应有太大差异。 我°了示例中的值、并计算了-3dB 截止频率:模拟输入 f (80°)=255、6Hz 和 f (-20)=256、4Hz 以及基准输入288、4Hz。 是否可以使用此值?

    此致  

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

    如何将 RTD 实际连接到连接器和电流路径有点困难。 当 AIN0连接到您的(-)感测点时、您使用的寄存器设置将提供负输出、但该寄存器连接到 AINP。 您可能需要交换输入多路复用器的设置、以便 AIN0为 AINN、AIN1为 AINP。

    此外、从原理图上看、基准实际上连接到 REFP1而不是 REFP0、因此您需要在寄存器设置中为所需的电流路径使用正确的基准。 要验证路径、您应该能够采用 DMM 并测量 RTD 两端和基准端的电压、以确保使用正确的路径进行所需的测量。

    您的滤波器值应该可以。 ADS1248上的由高到低转换(不是由低到高)信号表示最近完成的转换。 您不需要使用 RDATA 命令、但如果您认为在读取数据时出现时序问题、则可能需要使用 RDATA 命令。 在连续读取数据模式下、数据始终在 DRDY 的高电平到低电平转换时更新。 如果您尝试在更新期间读取数据、您将收到旧数据和新数据的混合数据。 使用 RDATA 命令可以避免这种情况。

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

    首先、我尝试使一个 PT100正常工作、然后我想在串行的每个电流路径上使用2个 PT100。

    对于一个 PT100、我将连接以下设备:
    PT1_Forc+=> IEXC1
    PT1_SENSE+=> AIN1/IEXC
    PT1_SENSE-=> AIN0/IEXC
    PT2_FORCE-=> REFP1
    REFN1 => AGND

    您在哪里可以看到多路复用器设置,我也更改了它们,我也改为了 REFP1和 REFN1:)

    我在 RTD 100mV 之间测量、但在 IEXC1和 REFN1 100mV 之间测量。
    我有点疑惑、因为我使用的是1mA 的激励电流。 我不应该在 RTD AIN1和 AIN0上测量100mV 左右的电压、在 AIN1和 REFN1之间测量大约1V 的电压、因为我在那里有820欧姆的 RTD 和基准电阻器?

    我认为我的中断函数上仍然存在一些时序问题。 该值现在是稳定的、但当我触摸 RTD 时、该值仍然存在相同的问题。

    我想说的另一件事。 当我测量 SPI 数据通信时、不再触发中断函数。

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

    如果正确连接、则 RTD 上的电压应为100mV、基准电阻器上的电压应为820mV (REFP1至 GND)。 如果您在传感器上看到100mV、但在基准上看不到、则在电流流动时必须有一个将 RTD 直接接地的电压。 仔细检查您的所有布线、并验证您的电路板是否正确连接了网。 还要确保基准电阻器上不存在焊接问题。

    对于触摸 RTD 而器件未正确响应、这听起来像是 ESD。

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

    我检查了电压、RTD 之间的电压为100mV、Rref 至 GND 之间的电压为820mV、因此连接起来似乎正确。

    当我向其吹气时、器件未正确响应的问题也会出现。
    似乎我仍然使用 mikrocontroller 从 ADS1248获取数据、但软件问题仍然存在。

    我还在 SPI 连接中添加了一些47欧姆电阻器、以降低急剧转换。

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

    您看到返回了什么代码值? 使用820mV 基准电压和100mV ADC 输入电压、同时使用4增益、您应该会看到大约0x3E7063。

    在代码中、当触发中断时、请确保禁用中断、收集数据、清除中断标志、然后重新启用中断。

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

    尊敬的 Bob:

    我记录了从 ADS1248接收的一些数据、它们采用十六进制值:

    4305 0F
    43 06 8A
    21 85 25.
    21 82 A6
    21 82交流
    43 05 54.
    21 82 97
    43 05 3C
    21 05 2B
    43 07 98
    43 05 45.
    21 82 A7
    43 02 A9
    21 82 B9.
    21 82 8C
    21 05 88
    43 05 92
    43 05 90
    21 82 C9
    43 05 8A
    21 05 78
    21 82 89
    21 85 A0
    43 05 D9
    4305 AB
    21 82 D5.
    61 82直流
    21 83 BB
    4305 FB
    21 82 E9
    21 82 EE
    61 82 F2

    MSB 仍然相对较高。

    我将通过检查您的建议来检查中断功能是否正常工作。  

    对于 43 05 FB => 4392443、我计算的 RTD 值为107欧姆、这不是最佳精度、但至少在有意义的范围内。

    有时、我看到 ADS 正在发送静态数据、而 CS 再次处于高电平、这可能是 MSB 中跳转值的原因。

    此致  

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

    您能告诉我您使用的线性 RTD 有多少? 您的设置最好用于4线 RTD。

    在计算中、您需要确保了解精度水平。 这尤其会是基准电阻器值。 在进行比例式测量时、激励源会从计算中退出。 返回的代码是 RTD 与基准电阻器的比率(通过施加的增益进行调整)。 因此、为基准电阻器使用高精度、低漂移电阻器至关重要。 然后、您需要校准您的系统。 我建议始终在上电后立即发出 SELFOCAL (自偏移校准)以消除 ADC 偏移。 然后、您需要使用已知值的两点校准来校准系统中的 RTD。 根据校准、您需要确定作为电阻计算一部分的读数中将考虑的斜率。

    但是、在此之前、您需要稳定读数。 我建议您使用固定的电阻值代替 RTD。 您发送的读数似乎有定期模式。 对于输入滤波值、滤波器的 RC 值非常大(6k 欧姆和51uF)。 该滤波器需要很长时间才能稳定。 我建议移除共模电容器并将差分输入电容器从51uF 更改为10nF、以开始查看读数是否具有一定的稳定性。 您可以在以后获得稳定的读数后调整滤波器值。

    如果您的 CS 在 SCLK 完成之前变为高电平、则需要监控缓冲区以确保传输周期已完成。 SPI 外设中的缓冲器或 FIFO 将独立于代码循环运行、并可在外设上的操作完成之前返回。 一种监控方法是观察接收缓冲区中显示新数据可用的标志。 在发出下一个虚拟字节进行发送前、读取 RX 缓冲器。 重复此过程、直到所有3个字节都已被读取、然后将 CS 设置回高电平。

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

    尊敬的 Bob:

    非常感谢您迄今提供的帮助、因为它对我帮助很大。

    我使用的是4线 RTD 设置。

    作为基准电阻、我使用的是820欧姆、精度为1%。  

    我解决了数据问题。 错误发生在连接到 ADS1248的 Mikrocontroller 中。 我读出了错误的地址区域、因此出现了0xFFFF 错误、我有跳跃值。 现在、我有相当稳定的值。

    今天、我测试了系统、并获得了温度结果、该结果与基准温度测量器件之间存在1-2°C°的差异。 我在20C°和60C°下测得。 我的基准电阻精度为1%是导致结果漂移的原因吗?  

    加电后使用 SELFLOCAL 校准时,是否需要执行其它操作? 因此,OFC 寄存器在校准后自行更新,并在输出代码中添加一个前置因子?

    对于滤波器值、它的意图是 nF、而不是 UF。我在这里输入了一些错误。

    我有一个关于测量路径中的两个传感器的问题。 在每次使用不同 RTD 进行测量之前,我必须向 MUX0寄存器写入数据以更改输入通道是否正确?

    此致

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

    基准电阻器是获得稳定结果的关键。 可以校准初始精度、但漂移无法校准。 通常、精度更高的电阻器将具有更好的温度系数。 1%的电阻器将具有100-200ppm/°C 的漂移、而0.1%的电阻器将具有15至25ppm/°C 的漂移。 显然、漂移数越低越好。

    当 SELFOCAL 被发出时、OFC 寄存器的内容被更新以校正器件偏移。 自动从每个转换结果中减去这些寄存器值。 最好在发出 SELFOCAL 之前先设置 PGA 和数据速率、以便在校准偏移时使用实际运行条件。

    当您连接多个 RTD 并对其进行测量时、不仅需要将 MUX0寄存器更改为所需的输入通道、还需要确保使用与 MUX1寄存器中配置的 RTD 相对应的正确基准。

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

    尊敬的 Bob:  

    我想知道的一点是、我使用函数在 DRDY 发生变化时触发 SPI 读数。
    我需要在 SDI 引脚接地端放置一个大约1MegOhm 的电阻器、以便触发该功能。 我不知道为什么我需要这么做。 可能是因为我的 ADC 布局中的容量、使用电阻器时、时间常数会变得足够长、以便显示屏可以触发中断功能。

    我检查了 OSCi、并看到 DRDY 引脚在两次读数之间变为连续高电平状态、而不是在没有电阻器的情况下达到较小的高峰值。

    原因是否在于,我没有在信号路径上放置任何电阻器,就像数据表中所写的那样,建议 放置47欧姆电阻器?

    此致、

    Flo

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

    数字线路上的47欧姆电阻器会减慢时钟边沿、以帮助降低噪声。 这对 DRDY 没有影响。 我不确定是否遵循 SDI 和1MEG 电阻器。 这不应产生任何影响。 设置中断的方法是获取 DRDY 信号(ADS1248的始终驱动输出)、并将 DRDY 连接到在 DRDY 下降沿触发的 GPIO 输入。 查看数据表第36页的图70。

    如果您没有从 ADS1248读取任何数据、您将看到 DRDY 中发生的脉冲、该脉冲遵循为 ADS1248配置的数据速率。 DRDY 将在一小段时间内升高、即更新周期。 当 DRDY 从高电平变为低电平时、新的转换数据可用。 如果您读取了结果、请注意 DRDY 在第一个 SCLK 之后如何变为高电平。 因此、如果您读取结果、则 DRDY 在大部分时间都将保持高电平。

    您的中断应在从 DRDY 从高电平状态到低电平状态的边沿转换时触发。 一旦您为数据计时、DRDY 将恢复高电平。 在 DRDY 从高电平到低电平转换时、转换结束和新结果准备就绪。

    此致、
    Bob B