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 然后将校验结果不对的数据舍弃了是吗? 也就是说接收到的数据有校验不对的?
对,有校验不对的,通过程序将他舍弃了