ads1248转换结果不正确
请教大侠们。我使用microchip单片机控制ads1248进行ad转换。分别使用单片机spi接口和io模拟spi接口均能够正确读写ad寄存器数据。使用外部参考2.5v和外部激励19.5mA。读取ad转换结果值基本稳定,但是跟实际输入电压值不符,相差较远。根据手册描述,采用单次采样,start给个脉冲,然后监控DRDY低电平后,给出RDATA指令,然后在连续读取三个字节转换结果。通过示波器观察波形,跟手册中的时序图基本一致。但是转化结果跟实际输入相差很大,更换电阻采样结果也会随着阻值改变而改变,仍然不正确。附件是电路图截图。主要ad控制时序代码见下:
ADC_START = 1;
ADC_CS = 0;
spi_write(0x40|SYS0);
spi_write(0x00);
spi_write(0x15); //PGA = 2;DOR = 160
ads_ReadReg(SYS0,1,&data);
ADC_CS = 1;
ADC_START = 0;
/*ads convert test */
//第一步:通道切换
CTRL_CH_SEL = 0;
//第二步:引脚切换,DUT
pos = 1;
neg = 2;
BridgeSwitch(pos,neg,ON);
//第三步:加载激励电流
CTRL_CUR_SW = ON;
//第四步:采集电压
for(int i = 0; i<100;i++)
{
ADC_START = 1;
ADC_CS = 0;
regdata = (AN0 << 3) + AN1;
ads_WriteReg(MUX0,1,®data);
ads_ReadReg(MUX0,1,&data);
ADC_CS = 1;
delay(10);
ADC_START = 0;
//4.3等待DRDY变电平
while(ADC_DRDY == 1);
ADC_CS = 0;
delay(10);
spi_write(RDATA);
MSB = spi_read();
MID = spi_read();
LSB = spi_read();
ADC_CS = 1;
buf[0] = (MSB << 16) +(MID << 8) + LSB;
ADC_START = 1;
ADC_CS = 0;
regdata = (AN2 << 3) + AN3;
ads_WriteReg(MUX0,1,®data);
ads_ReadReg(MUX0,1,&data);
ADC_CS = 1;
ADC_START = 0;
//4.3等待DRDY变电平
while(ADC_DRDY == 1);
ADC_CS = 0;
spi_write(RDATA);
MSB = spi_read();
MID = spi_read();
LSB = spi_read();
ADC_CS = 1;
buf[1] = (MSB << 16) +(MID << 8) + LSB;
请各位大侠不吝赐教,感激之至!
你的输入通道AIN1 与AIN0是什么?参考电压用的是REFP0与REFP1之间电压吗?AIN7与AIN4不能接地和悬空,要保证有一个合适的共模电压。可以尝试减小一下滤波的5.1k电阻,试一下。
你好,
不知道你是否主要到SPI模式问题,
你是上升沿采样还是下降沿采样,是不是因为采样的问题导致读出的数据是有问题的呢?