数据采集系统采用AD7606,主控制器用的是德州仪器的F2812,CONVESTA和CONVESTB连在一起,设计的是一上电就硬件复位,没采用过采样,转换开始后,延迟10us,开始读取数据,代码是仿照官网上提供的示例代码,通过I/O口来模仿时序读取数据。模拟输入不接时,8个通道有时读到的数据是0xFFFF,有时读到的数据是0x0000,模拟输入的第一个通道接5V电压时,8个通道读到的数据都还是0xFFFF或0x0000,不知道什么原因。用示波器测BUSY信号,能观测到周期性方波信号,说明AD7606已经启动转换,就是读取的数据不对。这个数据采集系统是扩展板,通过扁平电缆和主板连接,扁平电缆有20cm长。
代码如下:
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
int16 i;
int16 k;
int16 TempA;
int16 AD7606Data1[8];
void main()
{
InitSysCtrl(); //初始化系统函数
DINT;
IER = 0x0000; //禁止CPU中断
IFR = 0x0000; //清除CPU中断标志
InitPieCtrl(); //初始化PIE控制寄存器
InitPieVectTable(); //初始化PIE中断向量表
EINT;
InitGpio(); //初始化GPIO口
while(1)
{
GpioDataRegs.GPFCLEAR.bit.GPIOF12 = 1;
DELAY_US(1);
GpioDataRegs.GPFSET.bit.GPIOF12 = 1;//启动转换
DELAY_US(10);
GpioDataRegs.GPFCLEAR.bit.GPIOF10 = 1;
GpioDataRegs.GPFCLEAR.bit.GPIOF11 = 1;//CS片选
DELAY_US(1);
for(i=0;i<8;i++)
{
TempA=0;
for(k=0;k<16;k++)
{
GpioDataRegs.GPFCLEAR.bit.GPIOF8 = 1;
TempA=(TempA<<1)+GpioDataRegs.GPFDAT.bit.GPIOF13 ;
GpioDataRegs.GPFSET.bit.GPIOF8 = 1;
}
AD7606Data1
=TempA;
}
GpioDataRegs.GPFSET.bit.GPIOF10 = 1;
GpioDataRegs.GPFSET.bit.GPIOF11 = 1;//CS取消片选
}
}
电路图如下:
复位电路
希望专业人士来解答,困扰好久了