Part Number:ADS1263Other Parts Discussed in Thread: MSP430F149, ISO6742
用ADS1263测接地点电压测出来是0.0029左右为什么?我是连续测量200次取电压平均值,会发生数据移位很多次测出电压值为0.63,也有别的甚至负的电压值,我是采用双电源供电,内部参考电源,read command读取ADC1数据,spi通信频率为750kHz,sps2400,最后用检验checksum字节解决了这个问题,正常应该怎么解决?
? ?:
用的是内部晶振,CS和start引脚都接地
,
Amy Luo:
您好,
您用 checksum 时是有错吗?如果是这样的话,那就是SPI通信时SPI信号波形存在干扰,造成了SPI主控端识别高低电平错误造成的。您可以用示波器测量SPI波形以验证是SPI信号质量的问题吗?
SPI信号质量与SPI走线长度、通信速率、PCB layout都有关系。
,
? ?:
用checksum没错,但是我参考ti官方程序发现readdata函数没有用到checksum功能,正常是不是不应该出现数据移位错误,用的单片机是msp430f149
,
Amy Luo:
SPI通信质量不好,造成通信错误可以用checksum来检查。
您描述的“数据移位错误”具体指什么?或者您可以附上测量波形图以说明吗?是读取转换结果时存在时序问题吗
,
? ?:
测一点得到的数据大多ad输出的信号是0000 0000 00101000 10010110 00011001 检验字节
测错的输出的是 00100000 10000000 00010100 01000111检验字节
sclk信号
DIN
好像是DOUT
我用了一个数字隔离ISO6742会有影响吗?
,
Amy Luo:
? ? 说:
测一点得到的数据大多ad输出的信号是0000 0000 00101000 10010110 00011001 检验字节
测错的输出的是 00100000 10000000 00010100 01000111检验字节
我没明白您这里要表达的意思,您可以再详细说明吗?
不知道您怎样捕获的信号波形,高低电平看不清,不过看上去没有干扰。
您可以附上 ADS1263+ISO6742 的电路图吗?
,
? ?:
电路图
就是测地点电压正常测出来是0.0028V有时候会测出来0.63v看了下ads1263测出来的数据分别是
0000 0000 00101000 10010110 00011001 检验字节
00100000 10000000 00010100 01000111检验字节
,
Amy Luo:
您的意思是短接输入端,测出来电压是0.0028V,有时候测出来是0.63V,测量结果相差很大?如果是这样的话,建议您用示波器测量下供电电压、参考电压看下电压是否稳定、纹波大不大?也测量下输入时钟是否无干扰?
有原理图吗?PCB 看不清楚信号定义、感觉不直观。
? ? 说:最后用检验checksum字节解决了这个问题,
我想知道您是怎样用checksum 解决的,您可以对此进行说明吗?
,
? ?:
完整原理图比较大,这里是
ads1263部分,实际电路中我通过外界导线将AINCOM接地
通过以下程序判断checksum文本(2023-12-07 135414).txt
int32_t ADS126xReadData(uint8_t NumBytes, uint8_t DataByteStartNum){assert((4 == NumBytes) || (5 == NumBytes) || (6 == NumBytes));// Aborts program if FALSEassert((0 == DataByteStartNum) || (1 == DataByteStartNum));// Aborts program if FALSEuint8_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;}
,
Amy Luo:
Amy Luo 说:您的意思是短接输入端,测出来电压是0.0028V,有时候测出来是0.63V,测量结果相差很大?如果是这样的话,建议您用示波器测量下供电电压、参考电压看下电压是否稳定、纹波大不大?也测量下输入时钟是否无干扰?
您可以对这些问题做出反馈吗?
关于原理图:
ADC-RESET-2是不是用同样的方法隔离了?隔离前后SPI信号质量一样吗?
Amy Luo 说:您用 checksum 时是有错吗?
我这里表达的可能不明确,我想再确认下这个问题,也就是:您是通过判断checksum 然后将校验结果不对的数据舍弃了是吗? 也就是说接收到的数据有校验不对的?
,
? ?:
供电电压稳定
Amy Luo 说:ADC-RESET-2是不是用同样的方法隔离了?隔离前后SPI信号质量一样吗?
是的,信号一样
Amy Luo 说:我这里表达的可能不明确,我想再确认下这个问题,也就是:您是通过判断checksum 然后将校验结果不对的数据舍弃了是吗? 也就是说接收到的数据有校验不对的?
对,有校验不对的,通过程序将他舍弃了
,
? ?:
没有用到的输入引脚是不是也可以接到REFOUT?如果没有用到ADS1263内部参考电压也可以接到REFOUT吗?
,
Amy Luo:
? ? 说:对,有校验不对的,通过程序将他舍弃了
那应该是通信质量问题了,所以还是建议您再抓一下通信波形,建议将SPI信号捕获的清楚一些,不要高低电平混合在一起,也希望SPI信号显示在同一屏幕下,这样也可以看下时序。
? ? 说:没有用到的输入引脚是不是也可以接到REFOUT?如果没有用到ADS1263内部参考电压也可以接到REFOUT吗?
您使用的±2.5V供电,不使用的模拟输入接地就可以了。
,
? ?:
用同样的通道测1V电压时,数据出现错误频率很低,只有测接地点时数据出现错误频率很高,是 SPI信号的原因吗
,
Amy Luo:
既然您描述说“有校验不对的,通过程序将他舍弃了”,然后解决了这个问题,那就说明是通信有问题。
? ? 说:只有测接地点时数据出现错误频率很高,
您的意思是校验不对的有很多?您具体是怎样连接的输入端测量的接地点?看您使用的±2.5V供电,信号输入范围应该满足规格要求。
我看了datasheet 如下截图部分,这个校验和就是检测信号传输是否发生错误的: