我现在在设计一个数据采集卡,使用AD7689芯片,外部电压输入信号经AD202隔离、LM158运放跟随及增益调节后将输入数据送给AD7689,AD7689通过SPI口与C8051F040单片机进行通讯,通过单片机P0_6口控制AD7689的CNV信号,AD7689采用外部基准,单片机采用内部晶振24.5兆,单片机SPI配置频率为1225K,AD7689采用转换后数据读写模式,不采用通道序列器,目前遇到的问题是单片机读到AD7689转换的数据不是很稳定,数据老是跳动,误差最大50-70mv,想请问一下是什么原因。软件滤波基本上没什么作用,数据依然抖动
部分代码如下
AD转换程序
int AD7689_Covert(short int data)
{
short int temp=0;
short int outdata=0;
p0_6=1;
delay(20);//delay为单层for循环,此处最少要9个for循环,否则AD7689采集不到数据,这个好像和AD7689手册上写的tconv最大2.2us感觉有点不符合啊
p0_6=0;
SPIF=0;
SPI0DAT=data;
while(!SPIF);
temp=(unsigned char)SIP0DAT>>8;
outdata=temp;
SPIF=0;
SPI0DAT=data;
while(!SPIF);
temp=SIP0DAT;
outdata=((short int)outdata<<8)|temp;
p0_6=1;
return data;
}
main函数
main()
{
unsigned char MSB=0;
unsigned char LSB=0;
delay(20);//delay为单层for循环。
AD7689_Covert();
AD7689_Covert();
AD7689_Covert();
while(1)
{
MSB=AD7689_Covert()>>8;
LSB=AD7689_Covert();
}
} |