- 下面的这个问题弄了好久都没做到问题,特来求助大家,望版主开恩!
我使用ADS131E08这颗24bit ADC,但是8各通道采样数据经常出现完全错误的数据。
电路板上焊接了两颗ADC,采用共同的外部基准、外部晶振,电源(这两颗ADC芯片都是两个月前从ti申请的)。
两个ADC共16个通道都配置成采样ADC内部的测试信号。
问题描述:两颗ADC在采样过程中经常(大概每20次采样出现一次)会出现一些完全错误的数据,两颗ADC(编号分别为1、3)从那个错误的通道开始该ADC剩下的通道的数据都将是完全错误的,比如ADC1的第三个通道出问题了,那么4~8通道的数据都会是完全错误的。
错误数据如下:(3C1指的是编号为3的ADC的第一个通道,1C1是编号为1的ADC的第一个通道,以此内推)
第一组: 错误数据从第三行的3C5(-159)开始,3C6、3C7、3C8都是完全错误的,但是第一行和最后一行的数据又都是正常的。
3c1= -1301,3c2= -1237,3c3= -1168,3c4= -1185,3c5= -1405,3c6= -1480,3c7= -1120,3c8= -1162
1c1= -1018,1c2= -1248,1c3= -1159,1c4= -1311,1c5= -1393,1c6= -1429,1c7= -1325,1c8= -1166
3c1= -1296,3c2= -1246,3c3= -1169,3c4= -1185,3c5= -159,3c6= 522367,3c7= -166400,3c8= -1587209
1c1= -1071,1c2= -1257,1c3= -1147,1c4= -1305,1c5= -1408,1c6= -1423,1c7= -1338,1c8= -1195
3c1= -1307,3c2= -1241,3c3= -1165,3c4= -1190,3c5= -1405,3c6= -1480,3c7= -1121,3c8= -1164
第二组数据:第三行1C6(-353)开始出现完全错误的数据,之后的1C7、1C8也都是错误的。
1c1= -1040,1c2= -1233,1c3= -1131,1c4= -1255,1c5= -1408,1c6= -1410,1c7= -1311,1c8= -1196
3c1= -1306,3c2= -1237,3c3= -1160,3c4= -1186,3c5= -1391,3c6= -1479,3c7= -1121,3c8= -1163
1c1= -1035,1c2= -1293,1c3= -1142,1c4= -1312,1c5= -1406,1c6= -353,1c7= 4193978,1c8= -300
3c1= -1297,3c2= -1241,3c3= -1162,3c4= -1183,3c5= -1403,3c6= -1484,3c7= -1120,3c8= -1161
1c1= -1015,1c2= -1267,1c3= -1155,1c4= -1273,1c5= -1399,1c6= -1419,1c7= -1290,1c8= -1191
电路图在最下面
ADC部分程序如下:
void ADS131E08_Init(void)
{
u8 i=0,j=0;
GPIO_InitTypeDef GPIO_InitStruct;
u8 ADS131E08_Test_Init[][2] =
{
{0x96, CONFIG1}, // 24BIT 1KPS
{0xF3, CONFIG2}, //内部产生测试信号
{0x15, CH1SET}, //配置到采样内部测试信号的通道上
{0x15, CH2SET},
{0x15, CH3SET},
{0x15, CH4SET},
{0x15, CH5SET},
{0x15, CH6SET},
{0x15, CH7SET},
{0x15, CH8SET},
};
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
SPI_mode_change_1(SPI_BaudRatePrescaler_32); //SPI_CPOL = SPI_CPOL_Low; SPI_CPHA = SPI_CPHA_2Edge; 84/32 MHz的SPI时钟
/* ADC_START */
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
ADC_STOP;
/*ADC_DRDY Configure PA0 pin as input floating */
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStruct);
ADC1_CS_LOW;
ADC3_CS_LOW;
SPI_SendByte(SPI1, RESET); ]
delayms(750);
SPI_SendByte(SPI1, SDATAC);
ADC1_CS_HIGH;
ADC3_CS_HIGH;
for(i=0; i=0x800000)
adc1buf-=0xffffff;
}
ADC3_CS_LOW; //连续读取ADC3的27个字节数据
for(i=0;i<27;i++){
ReadBuf=SPI_ReadByte(SPI1);
delayus(1);
}
ADC3_CS_HIGH;
for(i=0;i<9;i++)
adc3buf=ReadBuf[3*i]<<16 |ReadBuf[1+3*i]<<8 |ReadBuf[2+3*i]; //将27字节数据转化成9个24位的数据
for(i=1;i<9;i++){ //将补码转化成原码
if(adc3buf>=0x800000)
adc3buf-=0xffffff;
}
printf("1c1=%8d,1c2=%8d,1c3=%8d,1c4=%8d,1c5=%8d,1c6=%8d,1c7=%8d,1c8=%8dn",adc1buf[1],adc1buf[2],adc1buf[3],adc1buf[4],adc1buf[5],adc1buf[6],adc1buf[7],adc1buf[8]);
printf("3c1=%8d,3c2=%8d,3c3=%8d,3c4=%8d,3c5=%8d,3c6=%8d,3c7=%8d,3c8=%8dn",adc3buf[1],adc3buf[2],adc3buf[3],adc3buf[4],adc3buf[5],adc3buf[6],adc3buf[7],adc3buf[8]);
}
}
0
|
2个回答
|
|
|