Other Parts Discussed in Thread: MSP430F149, ISO6742
用ADS1263测接地点电压测出来是0.0029左右为什么?我是连续测量200次取电压平均值,会发生数据移位很多次测出电压值为0.63,也有别的甚至负的电压值,我是采用双电源供电,内部参考电源,read command读取ADC1数据,spi通信频率为750kHz,sps2400,最后用检验checksum字节解决了这个问题,正常应该怎么解决?
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部分,实际电路中我通过外界导线将AINCOM接地
通过以下程序判断checksum
int32_t ADS126xReadData(uint8_t NumBytes, uint8_t DataByteStartNum)
{
assert((4 == NumBytes) || (5 == NumBytes) || (6 == NumBytes)); // Aborts program if FALSE
assert((0 == DataByteStartNum) || (1 == DataByteStartNum)); // Aborts program if FALSE
uint8_t ADC_Bytes[6];
int32_t ADC_Data_Only;
uint8_t Checksum = 0x9B;
uint8_t Sum = 0;
while (1)
{
ADS126xXferByte(RDATA1);
for (int i = 0; i < NumBytes; ++i)
ADC_Bytes[i] = ADS126xXferByte(0);
if (ADC_Bytes[0] >= 0x40 && ADC_Bytes[0] <= 0x41)
{
for (int i = 1; i < NumBytes-1; ++i)
{
Sum += ADC_Bytes[i];
}
Sum += Checksum;
if ((Sum & 0xFF )!= ADC_Bytes[NumBytes - 1])
{
Sum = 0;
continue;
}
else
{
ADC_Data_Only = ((int32_t)ADC_Bytes[DataByteStartNum + 0] << 24) | //Data MSB
((int32_t)ADC_Bytes[DataByteStartNum + 1] << 16) |
((int32_t)ADC_Bytes[DataByteStartNum + 2] << 8) |
((int32_t)ADC_Bytes[DataByteStartNum + 3] << 0); //Data LSB
//set_adc_CS(1);
break;
}
}
}
return ADC_Data_Only;
}
您的意思是短接输入端,测出来电压是0.0028V,有时候测出来是0.63V,测量结果相差很大?如果是这样的话,建议您用示波器测量下供电电压、参考电压看下电压是否稳定、纹波大不大?也测量下输入时钟是否无干扰?
您可以对这些问题做出反馈吗?
关于原理图:

ADC-RESET-2是不是用同样的方法隔离了?隔离前后SPI信号质量一样吗?
您用 checksum 时是有错吗?
我这里表达的可能不明确,我想再确认下这个问题,也就是:您是通过判断checksum 然后将校验结果不对的数据舍弃了是吗? 也就是说接收到的数据有校验不对的?
供电电压稳定
ADC-RESET-2是不是用同样的方法隔离了?隔离前后SPI信号质量一样吗?
是的,信号一样
我这里表达的可能不明确,我想再确认下这个问题,也就是:您是通过判断checksum 然后将校验结果不对的数据舍弃了是吗? 也就是说接收到的数据有校验不对的?
对,有校验不对的,通过程序将他舍弃了