主题中讨论的其他器件: ADS1262、 ADS127L18、 ADS131E08、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();
}