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.

[参考译文] ADS1263:代码示例

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/730811/ads1263-code-example

器件型号:ADS1263
主题中讨论的其他器件:ADS1262

正如 Chris 建议的那样、我继续、但没有任何问题得到解决。 当我看到 TI 给出的示例时、从我的角度来看、问题仍然存在基本问题

  1. 如何配置初始化哪个 ADC 以及在何处读取其数据、因为 ADC 具有11个通道编号 一个示例
  2. 数据表中未提供时序图(这无疑为我们提供了了解其工作原理的简单方法)
  3. 我已经完成了一些初始化、如下所示、但不知道问题在哪里

/////////////////////////////////////////////////////// 包括文件//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "ADS1263.h"

////////////////////////////////////////////////////////////////////////// 引脚声明////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
GPIOE_ODR.B2上的 sbit defADC1263_RESETPin;
GPIOE_ODR.B3上的 sbit defADC1263_STARTpin;
sbit defADC1263_CSPin GPIOE_ODR.B4;
GPIOE_ODR.B5上的 sbit defADC1263_DRDYPin;

sbit defADC1263_SCKPin 在 GPIOB_ODR.B3;//
sbit defADC1263_DOUTPin 在 GPIOB_ODR.B4;//
sbit defADC1263_DINPin 在 GPIOB_ODR.B5;//

char j;

//
ADS1262.h - ADS1262 Shield Arduino Firmwar 的库。
由 Protocentral 创建、2013年12月27日。
发布到公共领域。
*/
char* ads1262_read_Data(){
静态 char SPI_Dummy_buff [6];
defADC1263_CSPin_Clr;

对于(j = 0;j < 6;+j){
SPI_Dummy_buff [j]= SPI3_read (CONFIG_SPI_MASTER_Dummy_D);
}
defADC1263_CSPIN_SET;
返回 SPI_Dummy_buff;
}

void ads1262_Init(){
GPIO_Digital_Output (&GPIOB_BASE、_GPIO_PINMASK_3 |_GPIO_PINMASK_5);
GPIO_Digital_Output (&GPIOE_base、_GPIO_PINMASK_2 |_GPIO_PINMASK_3 |_GPIO_PINMASK_4);
GPIO_Digital_Input (&GPIOE_base、_GPIO_PINMASK_5);
GPIO_Digital_Input (&GPIOB_BASE、_GPIO_PINMASK_4);

//defADC1263_RESETPIN_SET;
//defADC1263_STARTPin_SET;
//defADC1263_CSPIN_SET;
//defADC1263_SCKPIN_SET;
//defADC1263_DINPIN_SET;
//while (1);
//启动 SPI 库:
// SPI.begin();
// SPI.setBitOrder(MSBFIRST);
//CPOL = 0、CPHA = 1
// SPI.setDataMode(SPI_MODE1);
//为 SPI 选择1MHz 时钟
// SPI.setClockDivider(SPI_CLOCK_DIV8);// DIV16

// hs
// SPI2_Init ();

SPI3_Init ();
ads1262_Reset();
delay_ms (100);
// ads1262_Disable_Start ();
// ads1262_Enable_Start ();

ads1262_Hard_Stop();
// ads1262_Start_Data_Conv_Command ();
// ads1262_SOFT_Stop ();
delay_ms (50);
// ads1262_Stop_Read_Data_Continuous(); // SDATAC 命令
delay_ms (300);

ADs1262_Reg_Write (POWER、0x11); //将采样率设置为125SPS
delay_ms (10);
ADs1262_ReG_Write (interface、0x05); //导联脱落补偿关闭、测试信号禁用
delay_ms (10);
ADs1262_Reg_Write (MODE0、0x00); //lead-off 默认值
delay_ms (10);
ADs1262_Reg_Write (MODE1、0x80); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_ReG_Write (Mode2、0x06); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_Reg_Write (INPMUX、0x01); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_Reg_Write (OFCAL0、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_ReG_Write (OFCAL1、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_ReG_Write (OFCAL2、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_Reg_Write (FSCAL0、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_Reg_Write (FSCAL1、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_Reg_Write (FSCAL2、0x40); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_ReG_Write (IDACMUX、0xBB); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_ReG_Write (IDACMAG、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_ReG_Write (REFMUX、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_ReG_Write (TDACP、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_Reg_Write (TDACN、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_Reg_Write (GPIOCON、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_Reg_Write (GPIODIR、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_Reg_Write (GPIODAT、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_Reg_Write (ADC2CFG、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_Reg_Write (ADC2MUX、0x01); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_Reg_Write (ADC2OFC0、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_Reg_Write (ADC2OFC1、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_Reg_Write (ADC2FSC0、0x00); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ADs1262_Reg_Write (ADC2FSC1、0x40); //Ch 1被启用、增益6、被连接至中的电极
delay_ms (10);
ads1262_Start_Read_Data_Continuous();
delay_ms (10);
ads1262_Enable_Start();
}

void ads1262_Reset(){
defADC1263_RESETPIN_SET;
delay_ms (100); //等待100毫秒
defADC1263_RESETPin_Clr;
delay_ms (100);
defADC1263_RESETPIN_SET;
delay_ms (100);
}

void ads1262_Disable_Start (){
defADC1263_STARTPin_Clr;
delay_ms (20);
}

void ads1262_Enable_Start (){
defADC1263_STARTPin_SET;
delay_ms (20);
}

void ads1262_Hard_Stop (void){
defADC1263_STARTPin_Clr;
delay_ms (100);
}


void ads1262_Start_Data_Conv_Command (void){
ads1262_SPI_Command_Data (开始); //将0x08发送到 ADS1x9x
}

void ads1262_SOFT_Stop (void){
ads1262_SPI_Command_Data (停止); //将0x0A 发送到 ADS1x9x
}

void ads1262_Start_Read_Data_Continuous (void){
ads1262_SPI_Command_Data (RDATAC); //将0x10发送到 ADS1x9x
}

void ads1262_Stop_Read_Data_Continuous (void){
ads1262_SPI_Command_Data (SDATAC); //将0x11发送到 ADS1x9x
}

void ads1262_SPI_Command_Data (unsigned char data_in){
char CD2[1];
//data[0]= data_in;
defADC1263_CSPin_Clr;
delay_ms (2);
defADC1263_CSPIN_SET;
delay_ms (2);
defADC1263_CSPin_Clr;
delay_ms (2);
SPI3_Write (DATA_IN);
delay_ms (2);
defADC1263_CSPIN_SET;
}

//向 SCP1000
void ads1262_Reg_Write (unsigned char read_write_address、unsigned char data){发送写入命令
char dataToSend;
//现在将寄存器地址和命令组合成一个字节:
dataToSend = read_write_address | WREG;

defADC1263_CSPin_Clr;
delay_ms (2);
defADC1263_CSPIN_SET;
delay_ms (2);
//将芯片选择设置为低电平来选择器件:
defADC1263_CSPin_Clr;
delay_ms (2);

SPI3_Write (dataToSend);//发送寄存器位置
SPI3_Write (0x00); //要处理的寄存器数
SPI3_Write (DATA); //发送要记录到寄存器的值

delay_ms (2);
//将芯片选择设置为高电平以取消选择:
defADC1263_CSPin_set;
}

char ADC_DRDY_Status (){
char ucStatus;
if (defADC1263_GetPinStatusDRDY = 0) //监视器数据就绪(DRDY 引脚)
{
ucStatus = 1;
}
否则{
ucStatus = 0;
}
返回 ucStatus;
} 

TIPD188参考设计附带发布了一些 ADS1263示例代码。 请参阅"软件"部分下的"TIPD188固件"下载。 希望这能帮您解决问题!

此致
、Chris

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

    您能否发布沟通详情的屏幕截图? 您的代码中没有任何内容会以"错误"的形式在我身上跳出来、但似乎您正在尝试与 Arduino 设备通信、而 Chris 则指向为 MSP430编写的代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您的回复、现在我可以在终端上看到一些数据、这是我到目前为止所做的事情

    1. 我不使用 Arduino、而是使用 STM cortex 4作为控制器  
    2. 我的交叉检查 ADC 引脚与控制器均已正确布线
    3. 我已检查 SPI 通信引脚
    4. 现在、我能够看到 ADC 的数据、但它不正确首先、数据出现负值、例如、如果通道1比读取后的电压为500mV。 ADC 输出采用负极并具有反向计数

    我已将 ADC 通道编号设置为

    ADs1262_ReG_Write (INPMUX、0b00001100);

    我所犯的错误请告诉我、ADC 的 c 和 h 文件随附在电路图中。 实际上我使用的是 ads1262

    e2e.ti.com/.../0552.adc.he2e.ti.com/.../7534.adc.c

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

    您好、Himanshu、

    查看您的原理图、我发现 AGND 和 DGND 未连接。 这可能会导致通信问题、因为 AGND 和 DGND 需要短接。

    此外、您如何配置 SPI 接口? 在代码中、您已注释掉了一些重要的 SPI 设置。 ADS1262在 SPI 模式1下运行、因此请确保您不会尝试在模式0下读取数据。

    此致、
    Chris

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

    尊敬的 Chris:

    感谢您的评论、我已按照建议再次定义 SPI、如下所示、并确认 AGND 和 DGND 之间的连接短接为0欧姆电阻

    //将 SPI3设置为主模式,数据长度为8位,时钟=外设/64,时钟空闲状态低电平,数据在第一个时钟边沿转换时发送,MSB 首先传输,从机选择被禁用:
    
    SPI3_Init_Advanced (_SPI_FPCLK_DIV2、_SPI_MASTER |_SPI_8_BIT |_SPI_CLK_IDLE_LOW |_SPI_FIRST_CLK_EDGE_TRANSITION |_SPI_MSB_FIRST |_SPI_SS_DISABLE |_SPI_SSM_ENABLE |_SPI_SSI_CLK_MODE|_SPI_CLK_TRIPE |_SPI_CLK_SPI_CLK_TRIPLE_1000、SPI_CLK_TRIP_3_ms 和 SPI3_SPI_CLK_MODULE)
    
    

    我检查了输出、就像、  

    1.204伏

    -2029.459228
    ,-2032.3673431
    ,-2028.249389
    2029.996826
    ,-2032.908813
    ,-2028.727905
    ,-2030.877563
    ,-2033.414794
    ,-2032.586791

    为0.5伏

    -2346539550
    ,-2362.093994
    ,-2363.292480
    ,-2361.949951
    ,-2362.846191

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

    SPI 模式1应使用"_SPI_second_CLK_EDGE_TRANSITION "、因为数据在 SCLK 的下降(第二)边沿上采样。 请尝试调整模式、看看这是否会改变您的结果。

    此外、您能否共享从 ADC 读取的十六进制数据以及数据读取期间 SPI 通信的一些示波器屏幕截图? 浮点值不会为我提供太多信息、因为我看不到这些值是如何计算的、我也不能推测给定值的 ADC 输出代码是什么。

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

    尊敬的 Chris:

    希望你们做得好、

    根据您的建议、我已根据以下代码更改 SPI 配置

    SPI3_Init_Advanced (_SPI_FPCLK_DIV8、_SPI_MASTER |_SPI_8_BIT |_SPI_CLK_IDLE_LOW |_SPI_second_CLK_EDGE_TRANSITION |_SPI_MSB_FIRST |_SPI_SSM_ENABLE |_SPI_SS_DISABLE |_SPI_SSI_CLK_DELAY |_SPI_CLK_SPI_CLK_TRIPE |_1000和 SPI_CLK_MODULE;_1000
    (SPI3_IP_3_1000) 

    现在、我将使用下面的输出进行标题

    设置电压为0.5伏

    计算得出的 ASCII 为-0.037588

    计算的十六进制表示 为0xFF、0xFF、0x81、0xE0、  

    执行 claculation 的代码主要部分如下所示

    #define PGA 1. //可编程增益= 1
    #define VREF 2.500 // 2.048V
    #define VFSR VREF/PGA
    #define FSR 的内部基准(((long int) 1<<23)-1)
    
    //ads1262 PC_ADS1262; / //类
    
    浮点 VOLT_V=0;
    浮点 VOLT_mV=0;
    volatile int I;
    volatile char SPI_RX_buff [10];
    volatile long ads1262_Rx_Data[10];
    volatile static int spi_RX_buff _Count = 0;
    volatile char * spi_RX_buff _ptr;
    volatile int Responsebyte =-1;
    volatile signed long sads1262Count = 0;
    volatile signed long uads1262Count=0;
    double resolution;
    int data;
    
    
    char Readadc (){
    char ADC_READY = 0;
    
    if (ADC_DRDY_Status ()=0) //监视器数据就绪(DRDY 引脚)
    {
    SPI_RX_buff _ptr = ads1262_Read_Data ();//读取6字节转换寄存器
    Responsebyte = 1;
    ADC_READY = 1;
    }
    
    if (响应字节= 1)
    {
    对于(I = 0;I <5;I++)
    {
    SPI_RX_buff [SPI_RX_buff 计数++]=*(SPI_RX_buff + ptr);
    }
    Responsebyte =-1;
    }
    
    IF (SPI_RX_缓冲 器计数>= 5)
    {
    ads1262_Rx_Data[0]=(unsigned char) SPI_RX_buff [1];//读取4字节 ADC 计数
    ads1262_Rx_Data[1]=(无符号字符) SPI_RX_buff [2];
    ads1262_Rx_Data[2]=(无符号字符) SPI_RX_buff [3];
    ads1262_Rx_Data[3]=(无符号字符) SPI_RX_buff [4];
    
    uads1262Count =(signed long)(((unsigned long) ads1262_Rx_Data[0][<24)|(unsigned long) ads1262_Rx_Data[1]<16)|(ads1262_Rx_Data[2]<8)|ads1262_Rx_Data[3]);通过移出原始 ADC/位数
    sads1262Count =(signed long)(uads1262Count); //获取有符号值
    分辨率=(double)((double) VREF/pow (2、31)); //分辨率= Vref/(2^n-1),Vref=2.5,n=位数
    VOLT_V =(分辨率)*(浮点) sads1262Count; //电压=分辨率* ADC 计数
    VOLT_mV = VOLT_V*1000.0; //电压,单位为 mV
    }
    SPI_RX_缓冲 器计数= 0;
    返回 ADC_READY;
    }
    
    //////////////////////////////////////////////////////// 函数声明////////////////////////////////////////////////////////////////////////////////////
    void main (void){
    vMain_PowerOnInit();
    
    while (1){
    USB_POLLING_Proc (); //定期调用此例程
    KK = HID_READ();
    如果(kk!= 0){
    if (ReadADC ()==1){
    sprintf (writebuff、"%lf\n\r、"、VOLT_mV);
    }
    其他
    strcpy (writebuff、"ADC not ready");
    
    writebuff [20]=ads1262_Rx_Data[0];
    writebuff [21]=ads1262_Rx_Data[1];
    writebuff [22]=ads1262_Rx_Data[2];
    writebuff [23]=ads1262_Rx_Data[3];
    
    HID_Write (writebuff、64);
    }
    
    if (SecFlag=1){
    SecFlag = 0;
    }
    }
    
    /********* / 

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

    您好、Himanshu、

    [引用用户="Himanshu Sharma14"]

    计算得出的 ASCII 为-0.037588

    计算的十六进制表示 为0xFF、0xFF、0x81、0xE0、  

    [/报价]

    0xFFFF81E0相当于十进制的"-3228代码"并且 LSB 大小为1.164nV/代码、您应该计算的电压应该为-37.588uV。

    如果您的计算值以"mV"为单位、那么您的计算值将看起来是正确的。

    您是否测量单端0.5V 信号? 此外、您连接到哪些输入引脚?

    您已经展示了两种不同的 ADC 配置...

    上面的代码片段显示: "ads1262_Reg_Write (INPMUX、0x01);"
    但是、附加的"adc.c"文件显示:"ads1262_ReG_Write (INPMUX、0b00001100);"

    在第一种情况下、您将测量 AIN0和 AIN1之间的差分电压。
    在第二种情况下、您将在 AIN0和 AVDD/4 (~1.25V)之间进行测量。

    对于单端信号、我建议在 AIN0和 AINCOM 之间进行测量、并启用 VBIAS 电平转换器。 这样、您的差分输入电压将为0.5V - 2.5V =-2V、因此 ADC 的输出代码应约为0x99999A。

    为了进行故障排除、您还可以尝试启用内部测试 DAC 并对 INPMUX 寄存器进行编程以连接到测试 DAC、以查看输出代码是否与不同的输入电压正确对应。

    此致、
    Chris

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

    尊敬的 Chris:

    如您所建议(对于单端信号、我建议在 AIN0和 AINCOM 之间进行测量、并启用 VBIAS 电平转换器。 这样、您的差分输入电压将为0.5V - 2.5V =-2V、因此 ADC 的输出代码应约为0x99999A。)

    我选择了 AN0和 AINCOM、下面的使能电平转换器是代码

    SPI3_Init_Advanced (_SPI_FPCLK_DIV8、_SPI_MASTER |_SPI_8_BIT |_SPI_CLK_IDLE_LOW |_SPI_second_CLK_EDGE_TRANSITION |_SPI_MSB_FIRST |_SPI_SSM_ENABLE |_SPI_SS_DISABLE |_SPI_SSI_SPI_SSI_CLK_MODE|_SPI_SPI_CLK_TRIPE |_SPI_CLK_SPI_CLK_TRIPE |_SPI_12345和 SPI3_MO
    delay_ms (1000);
    
    ads1262_Reset();
    delay_ms (100);
    ads1262_Disable_Start ();
    ads1262_Enable_Start();
    ads1262_Hard_Stop();
    ads1262_Start_Data_Conv_Command ();
    ads1262_SOFT_Stop ();
    delay_ms (50);
    ads1262_Stop_Read_Data_Continuous(); // SDATAC 命令
    delay_ms (300);
    
    ADs1262_Reg_Write (0x00、0x40);
    delay_ms (10);
    ADs1262_Reg_Write (POWER、0x13); //将采样率设置为125SPS
    delay_ms (10);
    ADs1262_ReG_Write (interface、0x05); //导联脱落补偿关闭、测试信号禁用
    delay_ms (10);
    ADs1262_Reg_Write (MODE0、0x01); //lead-off 默认值
    delay_ms (10);
    ADs1262_Reg_Write (MODE1、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ads1262_ReG_Write (Mode2、0b00001001); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_ReG_Write (INPMUX、0b00001010); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_Reg_Write (OFCAL0、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_ReG_Write (OFCAL1、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_ReG_Write (OFCAL2、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_Reg_Write (FSCAL0、0x40); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_Reg_Write (FSCAL1、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_Reg_Write (FSCAL2、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_ReG_Write (IDACMUX、0b00001010); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_ReG_Write (IDACMAG、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_ReG_Write (REFMUX、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_ReG_Write (TDACP、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_Reg_Write (TDACN、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_Reg_Write (GPIOCON、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_Reg_Write (GPIODIR、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_Reg_Write (GPIODAT、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_Reg_Write (ADC2CFG、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_Reg_Write (ADC2MUX、0x01); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_Reg_Write (ADC2OFC0、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_Reg_Write (ADC2OFC1、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_Reg_Write (ADC2FSC0、0x00); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ADs1262_Reg_Write (ADC2FSC1、0x40); //Ch 1被启用、增益6、被连接至中的电极
    delay_ms (10);
    ads1262_Start_Read_Data_Continuous();
    delay_ms (10);
    ads1262_Enable_Start(); 

    我的应用是测量单端信号、我在 AN0通道上设置了2V、现在我接收到0x00、0x00、0x63、0xC8十六进制、计算得出的浮点结果为0.029738、采用旧计算

    但这次、我得到的结果都是50 mV 到2伏之间的正数结果

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

    您好、Himanshu、

    我在您的代码中注意到了这一点:

    ads1262_ReG_Write (FSCAL0、0x40);//这是非默认值
    delay_ms (10);
    ads1262_ReG_Write (FSCAL1、0x00);
    delay_ms (10);
    ads1262_ReG_Write (FSCAL2、 0x00);//这是非默认值
    DELAY_ms (10); 

    FSCAL2应设置为0x40、而不是 FSCAL0

    这可以有效地将所有转换结果乘以"1/65536"。 如果将2V 乘以该比率、则得到的结果约为当前测量的0.029mV。

    此致、
    Chris

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

    尊敬的 Chris:

    我非常感谢您的支持、最终看起来在某种程度上是什么样的、并得到了所需的帮助。  

    现在、我设置0.5伏并接收

    449.095672
    448.987640
    449.113128
    449.004852
    449.105346
    449.113616
    449.061584
    ,449.098815
    448.967285
    ,449.150543

    在1k 个样本时、结果是否可以得到更大的改善?我希望得到~18-19位的数据?

    IC 的布局部分是根据 TI 布局指南完成的。

    我已经采集了100个样本、结果如下所示、它看起来甚至不是16位分辨率、我错过了什么吗?

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

    您是否能够尝试在 ADC 输入短接至1/2 Vs 电压的情况下测量噪声性能? (例如、在启用 VBIAS 电平转换器的同时、为正负输入选择 AINCOM)。

    0.5V 信号可能会产生大量噪声、因此在输入短路的情况下测量噪声性能可消除电路中的此噪声源。 如果在输入短路的情况下仍然看到性能不佳、则下一步是对电源或 PCB 布局进行故障排除、以查看其中的任何一个是否耦合到器件中。

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

    我按照中的建议更改了多路复用器选择

    ADs1262_ReG_Write (INPMUX、0b101010);

    数据如下所示、其噪声看起来很高

    0.30175
    0.297206
    0.299609
    0.299567
    0.294709
    0.296665
    0.301401
    0.303395
    0.303014
    0.29589
    0.299432
    0.307081
    0.289952
    0.293127
    0.300508
    0.298458
    0.299627
    0.3025.
    0.302227
    0.2998777

    布局按照数据表中的布局说明进行设计、如下所示

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

    我对变压器基极电源进行了相同的测试、但响应相同

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

    测试噪声时、您还使用0欧姆电阻器替代了 C72、对吧?
    如果是、那么这可能是您将能够通过当前布局实现的最佳噪声性能。

    您的 PCB 是否只有2层?
    ADS1262的良好布局更难实现、因为只有两个 PCB 层可以使用、 因为您必须避免底层的布线迹线、从而为器件下方的接地平面和所有连接信号留出尽可能多的空间。

    在当前布局中、有几个问题可能会导致额外的噪声:
    - ADC 周围的接地平面看起来是镂空的、这使得所有连接布线更具电感。
    -顶层接地填充中的切口使接地平面的效率降低。
    -模拟接地和数字接地连接的迹线比所需的迹线长。 最好将这些引脚连接到器件正下方。
    - SCLK 布线不会布置在接地平面之上、也会穿过过孔。 该信号易于具有许多快速边缘、这些边缘可能在布线为电感时发生振铃。 为了避免这种振铃并减少耦合到其他信号中的时钟噪声、最好将 SCLK 信号路由到接地层上、使该走线尽可能短、并避免在该走线上出现不必要的过孔。
    - ADC 下方的布线(不带内部接地层)也可能导致布线之间的噪声耦合。

    我希望我有更多有用的建议、但您可以通过电流 PCB 来提高噪声性能。 您可以尝试用尽可能短的导线将 DGND 连接到 AVSS 以降低这些引脚之间的阻抗、 但随着接地层的剪切程度达到原样、这可能仍无助于降低所有连接信号的布线电感。

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

    谢谢 Chris、

    将来会考虑这些要点、并会尝试实施建议、如果获得改进将会让您知道

    谢谢、此致、

    Himanshu