微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > USB接口的高速数据采集卡的设计与实现

USB接口的高速数据采集卡的设计与实现

时间:01-07 来源:互联网 点击:

时钟信号很重要。在本系统中选用DALLAS公司的DS1073时钟芯片。DS1073是无需外部元件的频率振荡器。通过DALLAS独有的1-wire技术,可以设定内部的分频器数值,实现输出频率从27.3kHz~100MHz可调,从而方便地改变采样时钟,简化电路设计。MAX1449数据输出时下降沿有效,而FIFO写入时上升沿锁存数据。系统中采用DS90LC028A实现对时钟信号的取反。

2.5 PCB板制作

由于是高速A/D采集,在制作PCB板时有一些需要注意的地方。电路板最好使用多层板,元件尽量选用表面封装器件。这样可以减小元器件之间的距离,减小寄生电感、寄生电容,同时减小电路板的尺寸。所有的旁路电容都要尽量靠近芯片的电源管脚。模拟公共地和数字公共地要分开,选一点通过低值表贴电阻(1~5Ω)、磁珠或直接连接,以免数字地电流干扰模拟地。电源最好用线性稳压电源,A/D和前端处理电路要用同一电源地输出,减小电源波动对采集的影响。

3 USB高速数据采集卡的软件

开发一个USB设备,软件设计是必不可少的。USB应用系统软件设计分为三部分:USB外设端的固件(Firmware)、主机操作系统上的客户驱动程序以及主机应用软件。主机应用软件通过客户驱动程序与系统USBI(USB Device Interface)进行通信,由系统产生USB数据的传送动作;固件则响应各种来自系统的USB标准请求,完成各种数据的交换工作和事件处理。

3.1 USB接口编程

固件程序主要是实现USB通信。TUSB3210采用SIE来管理USB通信。当主机与芯片进行USB通信时,会产生外部中断0,通过中断矢量寄存器判断。Setup_packed_Int、Input_endpoint0_Int、Output_endpoint0_Int这三个中断主要用于与主机建立连接、进行控制传输或中断传输;Input_endpoint1_Int、Output_endpoint1_Int这两个中断主要在批量传输时使用。在固件中分别执行不同的中断程序来实现USB的数据传输。

Void EX0_int(void) interrupt 0 //外部中断0

{

EA=DISABLE; //关中断

switch (bBECINT)(//确定中断ID

case VECINT_OUTPUT_ENDPOINT0:

bVECFINT=0x00;

Ep0QutputInterruptHandler();

break;

case VECINT_INPUT_ENDPOINT0:

bBECINT=0x00;

Ep0InputInterruptHandler();

break;

case VECINT_OUTPUT_ENDPOINT1:

bVECINT=0x00;

Ep 1 OutputInterruptHandler();

Break;

case VECINT_INPUT_ENDPOINT1:

bVECINT=0x00;

Ep1InputInterruptHandler();

break;

case VECINT_SETUP_PACKET_RECEIVED:

SetupPacketInterruptHandler();

bUSBSTA=USBSTA_SETUP;

bVECINT=0x00;

break;

default:break; //不知道中断ID

EA=ENABLE; //开中断

}

3.2 主机软件设计

笔者首先开发TUSB3210在主机中的驱动程序。用WinDK3.0开发了Win2000下的驱动程序,实现了控制传输、中断传输和批传输的标准接口函数。

在应用程序开发中,可用VC++编制应用程序。可以把USB设备当成文件来操作,利用CreateFile得到USB句柄,用DeviceIoControl来进行控制传输,用ReadFile、WriteFile进行批量传输。程序实例如下:

HANDLE m_hUsbSample; //USB句柄

m_hUsbSample=CreateFile(\\.\USBSampl0,GENERIC_READ|

GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULI,OPEN_EXISTING,0,NULL); //打开USB句柄

DeviceIoControl(m_hUsbSample,IOCTL_USBSAMPL_REBOOT, NULL,0,NULL,0,length,NULL); //控制传输

WriteFile(m_hUsbSample,pBuffer,writelength,writelength,NULL); //批量输出传输

ReadFile(m_hUsbSample,pBuffer,64,lgngth,NULL); //批量输入传输

CloseHandle(m_hUsbSample); //关闭USB句柄

使用上述函数编制USB高速数据采集卡的主机软件。

通过以上设计实现了基于USB数据采集卡的基本功能。但还有一些如信号的触发、事件的捕获功能还需完善;需开发基于USB2.0的系统,进一步提高数据传输的速率。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top