AD7656与DSP的并行接口设计电路及程序分享

处理器/DSP

892人已加入

描述

  TMS320F2812概述

  TI(德州仪器)主推高性能TMS320C28x系列TMS320F281232位定点微控制单元(MCU),主频高达150MHz;具备I2C、SPI、CAN、PWM等总线接口,适用于各种控制类工业设备;体积小、性能强、便携性高,同时适用于多种手持设备;符合高低温、振动测试,满足工业环境应用。

  TMS320F2812硬件参数

  CPU:TI TMS320F2812浮点DSP,主频150MHz  ROM:片内256Kx16bit,外扩512Kx16bit NOR FLASH

  RAM:片内34Kx16bit,外扩256Kx16bit SRAM

  EEPROM:2Kbit,AT24C02C

  核心板连接器:2x 80pin排针,共160pin,间距1.27mm

  LED:2x电源LED(底板1个,核心板1个),6x 用户LED(底板4个,核心板2个)

  按键:3x 用户可编程按钮,1x 系统复位按钮

  JTAG:Debug,14pin TI Rev B JTAG座,间距2.54mm

  eCAN:2x eCAN,3pin接线端子,间距3.81mm

  DAC:1x DAC,0-5V,2pin接线端子,间距2.54mm

  ADC:1x 16Channel ADC,0-3V,10pin接线端子,间距2.54mm

  红外收发器:1x HX1838

  启动方式:1x 4bit启动拨码开关

  串口:1x UARTA,烧写串口,提供4针TTL电平测试端口;1x UARTB,USB转串口,提供4针TTL电平测试端口;1x UARTC,

  RS232,DB9接口,提供4针TTL电平测试端口;1x RS485,3pin接线端子,间距3.81mm,与UARTC接口复用;

  SD卡:1x MicroSD卡座

  蜂鸣器:1x无源蜂鸣器

  继电器:1x 5V继电器

  步进电机接口:1x 五线四相步进电机,5pin接线端子,间距2.54mm

  直流电机接口:1x 5V直流电机,2pin接线端子,间距2.54mm

  音频:1x LINE IN,3.5mm音频座;1x LINE OUT,3.5mm音频座;1x MIC IN,3.5mm音频座;

  RTC:1x RTC,CR1220纽扣电池座

  网口:1x 10M/100M以太网,RJ45连接器

  拓展接口J13:ePWM、GPIO等信号,2x10pin排针,间距2.54mm

  拓展接口J14:eQEP、SPI、I2C、GPIO等信号,2x10pin排针,间距2.54mm

  拓展接口J15:XINTF、UART、I2C、GPIO等信号,2.54mm,2x25pin简易牛角座

  LCD:1x 1602液晶屏接口,16pin排母,间距2.54mm;1x 12864液晶屏接口,20pin排母,间距2.54mm;1x 4.3寸TFT触摸屏接口,2x17pin排针,间距2.54mm

  电源接口:1x 5V 2A直流输入,DC-005电源接口

  TMS320F2812软件参数

  DSP端软件支持:裸机

  CCS版本号:CCS5.5

  TMS320F2812主要特点

  TI主推高性能 TMS320C28x系列TMS320F2812 32位定点微控制单元(MCU),主频高达150MHz;

  具备I2C、SPI、CAN、PWM等总线接口,适用于各种控制类工业设备;

  体积小、性能强、便携性高,同时适用于多种手持设备;

  符合高低温、振动测试,满足工业环境应用

  AD7656概述

  AD7656具有最大4 LSBS INL和每通道达250kSPS的采样率,并且在片内包含一个2.5V内部基准电压源和基准缓冲器。该器件仅有典型值160mW的功耗,比最接近的同类双极性输入ADC的功耗降低了60% 。

  AD7656包含一个低噪声、宽带采样保持放大器(T/H),以便处理输入频率高达8MHz的信号。该AD7656还具有高速并行和串行接口,可以与微处理器(mcu)或数字信号处理器(DSP)连接。AD7656在串行接口方式下,能提供一个菊花链连接方式,以便把多个ADC连接到一个串行接口上。

  AD7656采用具有ADI专利技术的iCMOS(工业CMOS)工艺。iCMOS 工艺是一种高压半导体工艺与亚微米CMOS(互补金属氧化物半导体)和互补双极型工艺相结合的制造上艺。它能开发出承受30V电源电压的多种高性能模拟IC,并且其小封装尺寸是任何其他同类高电压IC都未曾达到的。与使用传统CMOS工艺的模拟IC不同,iCMOS器件能承受高电源电压,同时提高性能、显著降低功耗和缩小封装尺寸。AD7656是使用该种工艺设计制造的产品,所以非常适合在继电保护、电机控制等工业领域使用。

  AD7656的特性

  下图示出AD7656的功能框图。AD7656的主要特性如下:

TMS320F2812

  图1 AD7656的功能框图

  ●6通道16-bit逐次逼近型ADC;

  ●最大吞吐率为250kS/s;

  ●AVCC范围为4.75V-5.25V;

  ●低功耗:在供电电压为5V、采样速率为250kS/s时的功耗为160mW;

  ●宽带宽输入:输入频率为50kHz时的信噪比(SNR)为85dB;

  ●片上有2.5V基准电压源和基准缓冲器;

  ●有并行和串行接口;

  ●与SPI/QSPI/μWire/DSP兼容的高速串行接口;

  ●可通过引脚或软件方式设定输入电压范围(±10V,±5V);

  ●采用iCMOS工艺技术;

  ●64引脚QFP。

  AD7656与TMS320F2812的接口设计

  1、AD7656的工作原理

  具有并行和串行两种工作模式,本文采用并行工作模式,图2所示是AD7656在并行方式下的工作时序图。首先,由CONVST管脚启动转换,并保持为高电平。然后由AD7656在启动转换信号后输出BUSY信号,当BUSY信号出现下降沿时,代表AD模数转换已经结束。此时,AD7656内部的寄存器已经保存了转换的数据,可通过控制片选CS和读信号RD来依次读出各个通道的AD转换值。读出转换值后,可改变CONVST为低电平,为下一次转换做好准备。但应注意,在设计时,一定要保证AD转换过程中保持CONVST为高电平。

TMS320F2812

  2、AD7656的接口电路设计

  要使TMS320F2812能够控制AD7656正常工作,通常需要TMS320F2812提供可满足AD7656工作时序的控制信号。TMS320F2812上的外部存储器接口提供有丰富的控制信号,如地址总线、数据总线、片选信号、读写控制信号、外部中断信号等。此外,TMS320F2812还提供了丰富的通用IO口,也可辅助产生扩展设备的时序控制信号。AD7656的外围电路及其与TMS320F2812的接口设计如图3所示。

TMS320F2812

  图3中的DVCC和AVCC分别是数字电压端和模拟电压端,它们在接入前要经过1个去耦电路,每个供电电压输入引脚都要连接1个去耦电路,该电路由1只10μF和1只100nF的电容器组成。VDD、VSS和VDRIVE同样要连接去耦电路。VDRIVE可以采用5V或3.3V供电,因要和TMS320F2812互联,而TMS320F2812的IO口电压为3.3V,所以,VDRIVE采用3.3V供电。需要注意的是,AD7656上电后必须对其进行复位,复位脉冲应在100ns以上,本文采用RC电路来对AD7656进行复位。

  在AD7656与TMS320F2812接口电路中,AD7656的数据输出D0~D15直接和TMS320F2812的数据线相连,可使用TMS320F2812的外部地址片选管脚XZCS67作为AD7656的外部片选信号,并采用GPIOB8来控制AD7656的启动转换,另外,采用GPIOB10来查询AD7656的启动转换是否结束。

  数据采集程序设计

  本设计的数据采集程序 编制主要包括TMS320F2812的IO口初始化、 AD7656控制时序的产生及状态查询 、 采 集 数 据 的 处 理 。 对 应 于AD7656并行接口模式工作时序图, 其详细的软件代码如下:

  #define ADC_ADD * ( int *)

  0x00100000 //片选

  #define ADC_BUSY GpioDataRegs.

  GPBDAT.bit.GPIOB10 //转换是否结束

  #define ADC_CONVST GpioDataRegs.

  GPBDAT.bit.GPIOB8 //启动转换

  float ADC_F1 [6] ; //ADC存储值

  void ADC (void)

  {

  unsigned int ADC_TMP;

  ADC_CONVST=0;

  ADC_CONVST=1; //启动模数转换

  while (ADC_BUSY==1) ; //查询转换是否

  结束

  ADC_TMP=ADC_ADD&0xFFFF; //读取

  通道1结果

  if ((ADC_TMP&0x8000)! =0x8000) //转换

  通道1结果

  ADC_F [0] = ((float) (ADC_TMP))

  /((float) (0x7FFF)) *10.0;

  else

  ADC_F [ 0] = ( ( float) ( 0xFFFF -

  ADC_TMP)) /((float) (0x7FFF)) * (-10.0) ;

  ADC_TMP=ADC_ADD&0xFFFF;

  //读取通道2结果

  if ((ADC_TMP&0x8000)! =0x8000)

  //转换通道2结果

  ADC_F [1] = ((float) (ADC_TMP))

  /((float) (0x7FFF)) *10.0;

  else

  ADC_F [ 1] = ( ( float) ( 0xFFFF -

  ADC_TMP)) /((float) (0x7FFF)) * (-10.0) ;

  ADC_TMP=ADC_ADD&0xFFFF;

  //读取通道3结果

  if ((ADC_TMP&0x8000)! =0x8000)

  //转换通道3结果

  ADC_F [2] = ((float) (ADC_TMP))

  /((float) (0x7FFF)) *10.0;

  else

  ADC_F [ 2] = ( ( float) ( 0xFFFF -

  ADC_TMP)) /((float) (0x7FFF)) * (-10.0) ;

  ADC_TMP=ADC_ADD&0xFFFF;

  //读取通道4结果

  if ((ADC_TMP&0x8000)! =0x8000)

  //转换通道4结果

  ADC_F [3] = ((float) (ADC_TMP))

  /((float) (0x7FFF)) *10.0;

  else

  ADC_F [ 3] = ( ( float) ( 0xFFFF -

  ADC_TMP)) /((float) (0x7FFF)) * (-10.0) ;

  ADC_TMP=ADC_ADD&0xFFFF;

  //读取通道5结果

  if ((ADC_TMP&0x8000)! =0x8000)

  //转换通道5结果

  ADC_F [4] = ((float) (ADC_TMP))

  /((float) (0x7FFF)) *10.0;

  else

  ADC_F [ 4] = ( ( float) ( 0xFFFF -

  ADC_TMP)) /((float) (0x7FFF)) * (-10.0) ;

  ADC_TMP=ADC_ADD&0xFFFF;

  //读取通道6结果

  if ((ADC_TMP&0x8000)! =0x8000)

  //转换通道6结果

  ADC_F [5] = ((float) (ADC_TMP))

  /((float) (0x7FFF)) *10.0;

  else

  ADC_F [ 5] = ( ( float) ( 0xFFFF -

  ADC_TMP)) /((float) (0x7FFF)) * (-10.0) ;

  ADC1_CONVST=0;

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分