基于ADS8364与DSP芯片TMS320F2812的接口设计方案
摘要:介绍了模数转换器ADS8364的性能和工作原理,给出了ADS8364与DSP芯片TMS320F2812的接口设计方案,包括硬件电路设计和软件编程代码。
关键词:ADS8364;TMS320F2812;DSP。
0 引言
ADS8364是美国德州仪器公司(TI)的一款六通道、16位并行输出、同步采样的模数转换器。该芯片提供了一个灵活的高速并行接口,可以直接与数字信号处理器TMS320F2812相连。本文主要介绍了这个接口的软、硬件设计,着重论述了这两款芯片是如何配置启动和工作的。本设计广泛应用于电机控制、多轴定位系统、三相功率转换、多通道数据采集等场合。
1 芯片简介
ADS8364是一款六路模拟输入、16位并行输出的模数转换器。六路模拟输入分为三组(A,B 和C) ,每个输入端都有一个保持信号来实现所有通道的同时采样与转换功能,非常适合于多路(多种)采集系统的需要。ADS8364提供了一个灵活的高速并行接口,可以运行在直接寻址、循环采样、FIFO等三种模式,每个通道的输出数据都可直接作为一个16bit的字。
TMS320F2812是TI公司生产的一款DSP芯片,TMS320F28X系列是当今世界上最先进的32位定点DSP芯片。它不但运行速度高,处理功能强大,并且具有丰富的片内外围设备,便于接口和模块化设计。它既具有数字信号处理能力,又具有强大的事件管理能力和嵌入式控制功能,特别适用于有大批量数据处理的测控场合,如工业自动化控制、智能化仪器仪表及电机伺服控制系统等。
2 ADS8364的工作原理
ADS8364的最大工作频率可达5MHz,采样/转换可在20个转换时钟周期内完成。ADS8364的六个通道可以同时进行采样/转换。吞吐率最大可达250ksps。ADS8364采用+5V工作电压,并带有80DB共模抑制的全差分输入通道以及六个4μs连续近似的模数转换器、六个差分采样放大器。另外,在REFIN和REFOUT引脚内部还带有+2.5V参考电压。ADS8364的差分输入可在-VREF到+VREF之间变化。三个保持信号(HOLDA、HOLDB、HOLDC)可以启动指定通道的转换。当三个保持信号同时被选通时,其转换结果将保存在六个寄存器中。对于每一个读操作,ADS8364均输出十六位数据,地址/模式信号(A0,A1,A2)可以选择如何从ADS8364读取数据,也可以选择单通道、单周期或FIFO模式。在ADS8364的HOLDX保持至少20ns的低电平时,转换开始。这个低电平可使各个通道的采样保持放大器同时处于保持状态从而使每个通道同时开始转换。当转换结果被存入输出寄存器后,引脚EOC的输出将保持半个时钟周期的低电平。另外,通过置RD和CS为低电平可使数据读出到并行输出总线。
3 ADS8364与TMS320F2812的接口电路
电路部分主要分为DSP芯片的最小系统设计和ADS8364的接口设计。分别给予介绍。
3.1 TMS320F2812的最小系统设计:
(1)电源和复位部分:本设计采用外部5V直流电压供电。通过DC/DC器件产生3.3V的内核电压VDD和1.8V的I/O电压VDDIO电压。电源芯片TPS767D318为双电源输出,一路为3.3V、一路为1.8V。每路电源的最大输出电流为1A。芯片还提供两个宽度为200ms的低电平复位脉冲。本设计的复位信号分两种:上电复位、手动复位。上电复位由芯片TPS767D318产生,手动复位由电阻电容组成的电路产生。
(2)时钟部分:为DSP芯片提供时钟一般有两种方法。一种是采用晶体,一种是采用外部有源时钟芯片。本设计采用前者。它利用了DSP芯片内部所提供的晶振电路,在DSP芯片的X1和X2之间连接一晶体可启动内部振荡器。
(3)仿真部分:这一部分将作为程序的调试和烧录所用。2812芯片提供了5个标准的JTAG信号(TRST、TCK、TMS、TDI、TDO)和两个仿真引脚(EMU0、EMU1)。
3.2 ADS8364的接口设计
ADS8364采用+5V模拟电源(AVDD)和数字电源(DVDD),而其内部的缓冲器采用与TMS320F2812相同的+3.3V电压。缓冲器电压(BVDD)允许直接连接到3V或5V电压系统。TMS320F2812的I/O电压为+3.3V,因此,若使用该元件,ADS8364的BVDD必须设置成3.3V。
在这个设计中,ADS8364采用的是4MHz时钟。每个通道的吞吐率最大可达200ksps。将ADS的地址线A[2:0]接到TMS320F2812的地址线。当A0接到数字地,A2和A1接到VCC上可迫使ADS8364进入周期模式。在这个模式中,转换器可自动对六个通道进行采样,并可将数据按从A0到C1的顺序传送到输出端。
将ADS8364的BYTE引脚接到VCC上,可以使能字节模式。在这个模式中,要从ADC中正确地读取数据,需要对每个通道进行两次连续的读操作。第一次读取的是转换数据的高位字节,第二次读取的是低位字节。假如通道信息要作为数据输出的一部分,那么,应将ADS8364的ADD引脚也接到VCC。读取数据时,需要对ADS8364的每个通道进行三次读操作。第一次读取通道和数据信息,后两次分别读取高位和低位数据。
3.3 ADC的初始化操作
触发ADS8364的复位引脚RST可以确保读指针指向第一个数据位置。作为TMS320F2812初始化的一部分,由TMS320F2812的通用输入输出口GPIOF0提供给ADS8364的引脚RST。当系统时钟稳定后,被触发为低电平,从而确保了从ADC输出的数据对应于通道A0、A1、B0、B1、C0、C1的排列。
对于每一个转换通道,EOC均是低电平信号。 ADS8364可为TMS320F2812提供三个脉冲。每个脉冲信号表明一个转换的结束。当ADC的这三个引脚同时置低时,三个通道被认为有效并同时进行转换。另外,EOC引脚也可被连接到TMS320F2812的一个中断引脚,以触发一个读周期。
ADS8364的片选CS是一个有源低电平输入信号。当CS为高时,并行输出引脚处于高阻态。当CS为低时,并行数据线反映了输出缓冲器的当前状态。为了正确地从ADS8364的并行数据总线上读取数据,ADS8364必须被片选CS选中后才能进行读操作。
ADS8364的读(RD)信号端也是有源低电平信号。当CS为低时,在读信号(RD)的下降沿,ADS8364 中寄存器的内容将被更新。这意味着在每个读序列之前,RD信号必须被触发,这样才能更新输出缓冲器。通过TMS320F2812的中断子程序将ADS8364的RD引脚置低可以保存输入的数据,之后可再将RD引脚置高。
4 初始化编程
(1) 头文件(.H)的编写:主要用来定义片内寄存器以便函数中引用
例如:系统控制与状态寄存器的定义:
struct SCSR_BITS
{ // 位描述
Uint16 WDOVERRIDE:1; // 0 允许看门狗无效位
……};
union SCSR_REG
{
Uint16 all;
struct SCSR_BITS bit;
};
此外头文件中还声明一些全局函数和常量。
例如:extern void InitAdc(void); //初始化ADC函数
(2)命令文件(.CMD)的编写:该文件中用到了两个伪指令MEMORY和SECTIONS。
MEMORY伪指令用来标示实际存在的目标系统中可被使用的存储器范围。
SECTIONS伪指令用来定位一些代码和数据块。
部分代码:
MEMORY
{
PAGE 0 : //声明了片内的存储单元,包括起始地址和长度
PRAMH0 : origin = 0x3F8000, length = 0x001000
PAGE 1 :
RAMM0 : origin = 0x000000, length = 0x000400
……
}
SECTIONS
{ codestart : PRAMH0, PAGE = 0 /*定位代码数据段*/
PieCtrlRegsFile : > PIE_CTRL, PAGE = 1 /* 定位各外设的积存器结构体 */
……
}
(3)主程序及中断程序:
void main(void)
{ ……
InitSysCtrl(); //调用初始化系统控制函数
//该函数用于初始化系统控制寄存器、PLL、看门狗、时钟
InitGpio(); //调用初始化GPIO函数,用于选择适当的GPIO
ResetADS8364(); //复位ADS8364
……
DINT; // 禁止和清楚所有CPU中断
IER = 0x0000; IFR = 0x0000;
InitPieCtrl(); // 初始化Pie控制寄存器为默认值
InitPieVectTable(); // 初始化中断向量表
……
EINT; // 使能全局中断 INTM
PWM(); //开启转换时钟
while(1) // 循环,根据条件读数并产生中断
{……}
}
void read_ADD() //该函数读取采集的数据
{ //根据通道读取数据
if (ADD_Mode){ADC_address[0] = (*ptrCHA0);}
……
if (ADD_Mode){ADC_address[5] = (*ptrCHC1);}
CHC1_Data[idx] = *ptrCHC1;
}
5 结束语
本文以ADS8364模数转换芯片为基础,详细讨论了ADS8364和TMS320F2812的接口设计和工作原理,重点介绍了TMS320F2812控制芯片的最小系统设计、ADS8364和TMS320F2812的连接、初始化程序等三部分内容。该设计方案在电机控制、多轴定位系统、多通道数据采集等场合有着广泛的应用。
|