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

网友投稿 281 2022-11-02

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

TMS320F2812概述

TMS320F2812硬件参数

EEPROM:2Kbit,AT24C02C

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

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

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

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

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

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

DSP端软件支持:裸机

CCS版本号:CCS5.5

TMS320F2812主要特点

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

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

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

AD7656概述

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

AD7656的特性

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

图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的工作原理

在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结果

通道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;

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Linux操作系统安装及服务控制
下一篇:用while循环语句猜价格
相关文章

 发表评论

暂时没有评论,来抢沙发吧~