大家好!
希望大家都过得很愉快。
这是我第一次在论坛上提出质询,如果我犯了任何一个先例,请原谅我。
我使用的是 带有 Raspberry Pi 4B 的 ADS1256波形板。 我修改了 waveeshare 提供的代码,基本上添加了时序限制。 它适用于单通道输出、但对于多通道输出、其在高达2mV 的输出中抛出随机尖峰。 更大的尖峰通常具有相同的幅度、因此我认为我超出了某个延迟限制、但无法弄清出现了什么情况、因为我仅根据数据表设置了延迟。 即使我故意拖延太多,问题仍然存在。
这是相关的代码片段、
/******************************************************************************
function: Set the channel to be read
parameter:
Channal : Set channel number
Info:
******************************************************************************/
void ADS1256_SetDiffChannal(UBYTE Channal)
{
if (Channal == 0){
ADS1256_WriteReg(REG_MUX, (0 << 4) | 1); //DiffChannal AIN0-AIN1
}
else if(Channal == 1){
ADS1256_WriteReg(REG_MUX, (2 << 4) | 3); //DiffChannal AIN2-AIN3
}
else if(Channal == 2){
ADS1256_WriteReg(REG_MUX, (4 << 4) | 5); //DiffChannal AIN4-AIN5
}
else if(Channal == 3){
ADS1256_WriteReg(REG_MUX, (6 << 4) | 7); //DiffChannal AIN6-AIN7
}
}
******************************************************************************/
static UDOUBLE ADS1256_Read_ADC_Data(void)
{
UDOUBLE read = 0;
UBYTE buf[3] = {0,0,0};
DEV_Digital_Write(DEV_CS_PIN, 0);
DEV_Delay_us(1);
ADS1256_WaitDRDY();
DEV_SPI_WriteByte(CMD_RDATA);
DEV_Delay_us(7);
buf[0] = DEV_SPI_ReadByte();
buf[1] = DEV_SPI_ReadByte();
buf[2] = DEV_SPI_ReadByte();
read = ((UDOUBLE)buf[0] << 16) & 0x00FF0000;
read |= ((UDOUBLE)buf[1] << 8); /* Pay attention to It is wrong read |= (buf[1] << 8) */
read |= buf[2] ;
DEV_Digital_Write(DEV_CS_PIN, 1);
return read;
}
/******************************************************************************
function: Read ADC specified channel data
parameter:
Channel: Channel number
Info:
******************************************************************************/
UDOUBLE ADS1256_GetChannalValue(UBYTE Channel)
{
UDOUBLE Value = 0;
ADS1256_WaitDRDY();
if(Channel>=4){
return 0;
}
if(channel ==1){
ADS1256_SetDiffChannal(Channel);
Value = ADS1256_Read_ADC_Data();
}
else{
ADS1256_SetDiffChannal(Channel);
DEV_Delay_us(4);
ADS1256_WriteCmd(CMD_SYNC);
DEV_Delay_us(4);
ADS1256_WriteCmd(CMD_WAKEUP);
DEV_Delay_us(1);
Value = ADS1256_Read_ADC_Data();
}
return Value;
}
/******************************************************************************
function: Read data from all channels
parameter:
ADC_Value : ADC Value
Info:
******************************************************************************/
void ADS1256_GetAll(UDOUBLE *ADC_Value)
{
UBYTE i;
for(i = 0; i<channel; i++){
ADS1256_WaitDRDY();
ADC_Value[i] = ADS1256_GetChannalValue(i);
}
}

以下是2个通道上的输出快照
我希望我能很好地描述这个问题。 如果有什么缺失、请指出、我会尽快添加。
谢谢大家!