高精度数据采集用到的ADC器件AD7767介绍(二)
0赞高精度数据采集用到的ADC器件AD7767介绍(二)
在前面的博客中,我曾向大家主要介绍AD7767的芯片基本资料,多数为硬件设计所需的,今天我们主要从软件设计及数据采集系统搭建角度介绍AD7767的应用。
由于我们在前面主要将TMS320F28335与AD7892结合用来数据采集处理系统,在这里我想用AD7767代替AD7892,进行高精度数据采集系统的设计,在我们的系统中,涉及到的模拟信号特性多为0~10V、0~100mV及0~5V,所以说我们的调理电路涉及的比较复杂,在此我就不做过多的列举,在这里主要介绍AD7767和DSP处理器TMS320F28335的数据处理及交换过程。
差点忘记,我们的信号调理完都为单端信号,正如我们前面博客中说的,必须涉及到单端信号到差分信号的转换,这里我们还是采用AD7767芯片资料推荐的ADA4941电路实现单端模拟信号转换成差分信号的功能,差分模拟信号通过AD7767送给DSP转换为24位高精度数字信号。
由于我们在前面已主要介绍过AD7767的引脚功能,在这里我主要介绍AD7767和TMS320F28335的配合使用,TMS320F28335是TI公司推出的业界首款浮点数字信号控制器,它具有150MHZ高速处理能力,具备32位浮点处理单元,单指令周期32位累加运算,能够满足应用对于更快代码开发与集成高级控制器的浮点处理器性能的要求。其片上集成有SCI、SPI、McBSP及ADC等丰富的外设,这里我们使用SPI,并且将DSP的SPI接口与AD7767连接,AD7767采样转换后的数据是串行输出,与此同时DSP的SPI接口接收串行数据。AD7767的CS、SCLK、SDI、SDO、DRDY和SYNC/PD引脚与DSP芯片TMS320F28335的SPI接口相连接,同时将CS、DRDY和SYNC/PD引脚与DSP的GPIO引脚连接,实时可以控制AD7767的工作时序。具体连接如下图所示:

根据AD7767提供的时序图,我们发现在CS信号的下降沿,同时DRDY信号有效时,SDO的串行数据传入DSP中,并且是先出高位的。在AD7767与TMS320F28335进行高速串行通信时,首先对DSP的I/O接口进行配置,使其为第二功能SPI接口,具体如下:
static void InitSPIGpio()
{
EALLOW;
//enable pullup resistor
GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;
//asyn
GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3;
GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3;
GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3;
GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3;
//used as function pin
GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1;
EDIS;
}
然后配置SPI接口的波特率、字节长度以及自检使能等信号,基本完成SPI接口的配置工作,具体如下:
static void SpiStdInit(
Uint16 wordlen, // 1~16
Uint16 baudrate, // divsor factor = baudrate
Uint16 selftest_ena
)
{
SpiaRegs.SPICCR.all = 0; //SW Reset SPI and clear the configration
SpiaRegs.SPIBRR = baudrate - 1;//BAUDRATE = freq_lopclk(60MHZ) / (baudrate)
SpiaRegs.SPICTL.all = 0x0006; //word as a master and enable the transmit
//word lenth config 0~15,
SpiaRegs.SPICCR.bit.SPICHAR = wordlen - 1;
//Data is output on the falling edge of the SPICLK signal whit out delay;
//input data is latched on the rising edge of the SPICLK signal.
SpiaRegs.SPICCR.bit.CLKPOLARITY = 1;
SpiaRegs.SPICCR.bit.SPILBK = selftest_ena; //loopback mode enable ( 0:disable,1:enable;)
SpiaRegs.SPIPRI.bit.FREE = 1;
SpiaRegs.SPICCR.bit.SPISWRESET = 1; //out of reset;
}
完成基本配置后,剩下就是控制ADC芯片AD7767等转换开始、结束及接收数据的过程,在此就不再罗嗦,还望各位仔细琢磨。
以上主要介绍了简单的数据采集系统组成及软件设计,希望能给大家的电路及软件设计带来帮助。
