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:使用多个通道进行电压差分测量时的 ADS1263转换时间问题

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1484423/ads1263-ads1263-conversion-time-issue-when-using-more-than-one-channel-for-voltage-differential-measurement

器件型号:ADS1263
主题中讨论的其他器件: ADS1262ADS127L18ADS131E08、ADS131M08

工具与软件:

您好... 我正在尝试使用 ads1263和 Arduino megan/teensy 4.1测量电压差。 当我只测量 ads1263的一个差分输入对(A0-A1)时、采样率非常快、但当我使用多个 ads1263对(如 A0-A1、A2-A3等)时、我将只得到3-4个采样率... 在代码中,如果我减少转换时间小于延迟(55)它只提供0电压的所有通道...我也尝试了 drdy 引脚,但有相同的问题...任何人请帮助...提前感谢你.. 我想要更高的 sps 每通道. ..这里是代码..

#include

// ADS1262引脚定义
#define CS1 10 // ADC1的片选
#define CS2 9 // ADC2的芯片选择

// ADS1262命令
#define RESET_CMD 0x06
#define START_CMD 0x08
#define STOP_CMD 0x0A
#define READ_CMD 0x12
#define WRITE_CMD 0x42

// ADS1262 Registers
#define REGISTER_MUX 0x06 //输入多路复用器
#define REGISTER_PGA 0x03 // PGA GAIN
#define REGISTER_DRATE 0x05 //数据速率
#define REGISTER_MODE 0x01 //电源模式和基准使能
#define REGISTER_REF 0x02 //基准控制寄存器

//常量
#define VREF_EXT 2.5 //外部基准电压(V)
#define PGA_GAIN 128 //将增益设置为128
#define FULL_SCALE 2147483648.0 // 2^31 (32位 ADC 范围)

//针对 Arduino Mega 优化的 SPI 设置(16 MHz 时钟、降低速度以实现稳定性)
SPISettings ADS1262SPI (1000000、MSBFIRST、SPI_MODE1);

//定义每个通道的 MUX 设置
const uint8_t mux_settings[]={0x01、0x23、0x45、0x67、0x89};
#define NUM_CHANNELS (sizeof (mux_settings)/ sizeof (mux_settings[0])

float channel_voltages1[NUM_CHANNELS]={0};//存储 ADC1的电压
float channel_voltages2[NUM_CHANNELS]={0};//存储 ADC2的电压

void ADS1262_WriteRegister (uint8_t cs、uint8_t reg、uint8_t value){
SPI.beginTransaction(ads1262SPI);
digitalWrite (cs、low);
spi.transfer (write_CMD | reg);
spi.transfer (0x00);//仅写入1个寄存器
spi.transfer (value);
digitalWrite (cs、HIGH);
spi.endTransaction ();
}

int32_t ADS1262_ReadData (uint8_t cs){
uint8_t data[4];
int32_t result = 0;

SPI.beginTransaction(ads1262SPI);
digitalWrite (cs、low);
spi.transfer (READ_CMD);
SPI.transfer (0x00);

对于(int i = 0;i < 4;i++){
DATA[i]= spi.transfer (0x00);
}

digitalWrite (cs、HIGH);
spi.endTransaction ();

result =((int32_t) data[0]<< 24)|
((int32_t) data[1]<< 16)|
((int32_t) data[2]<< 8)|
((int32_t) data[3]);

返回结果;
}

void ADS1262_StartConversion (uint8_t cs){
SPI.beginTransaction(ads1262SPI);
digitalWrite (cs、low);
spi.transfer (start_CMD);
digitalWrite (cs、HIGH);
spi.endTransaction ();
delayMicroseconds (300);//无 DRDY 的最小转换延迟
}

void setup(){
Serial.begin(115200);
引脚模式(CS1、输出);
引脚模式(CS2、输出);
digitalWrite (CS1、HIGH);
digitalWrite (CS2、HIGH);
SPI.begin();

//为两个 ADC 复位 ADS1262
SPI.beginTransaction(ads1262SPI);
digitalWrite (CS1、LOW);
spi.transfer (RESET_CMD);
延迟(1);
digitalWrite (CS1、HIGH);
digitalWrite (CS2、LOW);
spi.transfer (RESET_CMD);
延迟(1);
digitalWrite (CS2、HIGH);
spi.endTransaction ();
延迟(1);

//为两个 ADC 配置 ADS1262的外部基准和 PGA = 128
ADS1262_WriteRegister (CS1、REGISTER_PGA、0x07);
ADS1262_WriteRegister (CS1、REGISTER_DRATE、0x0F);//设置为38400SPS 以进行高速转换
ADS1262_WriteRegister (CS1、REGISTER_MODE、0x00);//使用 FIR 滤波器以实现更快的响应

ADS1262_WriteRegister (CS2、REGISTER_PGA、0x07);
ADS1262_WriteRegister (CS2、REGISTER_DRATE、0x0F);
ADS1262_WriteRegister (CS2、REGISTER_MODE、0x00);

//打印标题行以显示电压
serial.print ("ch1_adc1\tch2_adc1\tch3_adc1\tch4_adc1\t");
serial.print ("ch1_adc2\tch2_adc2\tch3_adc2\tch4_adc2\tch4_adc2\tch5_adc2\n");
}

void loop(){
对于(int I = 0;I < NUM_CHANNELS;i++){
ADS1262_WriteRegister (CS1、REGISTER_MUX、mux_settings[i]);
ADS1262_StartConversion (CS1);
延迟(55);
int32_t ADC_raw1 = ADS1262_ReadData (CS1);
Channel_voltages1[i]=((float) ADC_raw1 / full_scale)* VREF_EXT;

ADS1262_WriteRegister (CS2、REGISTER_MUX、mux_settings[i]);
ADS1262_StartConversion (CS2);
延迟(55);
int32_t ADC_raw2 = ADS1262_ReadData (CS2);
Channel_voltages2[i]=((float) ADC_raw2 / full_scale)* VREF_EXT;
}

对于(int I = 0;I < NUM_CHANNELS;i++){
serial.print (channel_voltages1[i]、9);
serial.print ("\t");
}
对于(int I = 0;I < NUM_CHANNELS;i++){
serial.print (channel_voltages2[i]、9);
serial.print ("\t");
}
serial.println();
}

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

    尊敬的 Gopal Das:

    此行为是 ADC 中转换延迟的结果。 这是所有多路复用 Δ-Σ ADC (例如 ADS1263)固有的特性。 有关更多信息、请参阅此应用手册: https://www.ti.com/lit/an/sbaa535a/sbaa535a.pdf?ts = 1741547248339

    您可以降低 sinc 滤波器阶数来提高采样率(例如、sinc1)。

    您还可以使用多个 ADC、因为该问题是由于您需要扫描通道而导致的。 如果您仅连续测量单个通道、则不会看到此行为。

    您还可以使用同时采样 ADC 来避免延迟。 有关低噪声选项、请参阅 ADS131E08、ADS131M08或 ADS127L18

    -Bryan

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

    您的意思是 ads1263对多通道应用来说是无用的... 虽然它在单通道中具有32k SPS、如果这样 非常失望…

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

    尊敬的 Gopal Das:

    请参阅 ADS1263数据表中的表9-13了解第一次转换延迟。 例如、如果选择7200SPS 数据速率和 sinc4滤波器、则第一个数据将以~0.98ms 为单位可用。 连续转换模式下的第二次及后续转换将在~1/7200 = 0.138ms 时可用

    每次输入改变、数字滤波器 都会清空并复位、从而产生转换延迟。 一般来说、Δ-Σ 架构也是如此

    如果您希望获得更高的数据速率、还有其他选择。 这有助于您更详细地了解您的应用以及您试图实现的所需规格

    -Bryan