|
基于DSP的高速数据采集系统的研制
摘 要:本文介绍了基于数据采集系统的虚拟仪器设计。通过软、硬件技术结合,实现了对多路模拟信号的采集处理,输出多种波形,充分发挥了虚拟仪器的优势。
关键词:虚拟仪器;DSP; USB
引言
随着计算机技术的普及,运用高速数据处理的场合越来越多。例如,高速数字信号处理系统、高速图象信息转换、语音实时处理系统等。本文设计并实现了基于TMS320C32和USB芯片的一套高速、高精度数据采集分析系统。该系统的DSP负责数据的采集,数据通过USB口送到计算机显示、计算。计算机应用程序便于实现丰富的图形界面,具有良好的人机接口,是一套很实用的虚拟仪器系统。
系统的总体结构
虚拟仪器的硬件部分主要分为数据采集和波形发生器两大部分。
数据采集系统由TMS320C32 微处理器芯片、USB芯片FX2、ADC芯片ADS8364、DAC芯片DAC7624/25、CPLD、FIFO存储器及其外围电路组成。原始信号通过处理变成A/D可以采样的信号后送入DSP采集系统,DSP系统通过高速、高精度A/D转换器ADS8364对输入电压信号进行单通道或多通道的采样,将16位采样结果存储在双FIFO存储器中。当其中一个FIFO存满,USB系统将数据从该FIFO存储器中读出,由收发器通过数据线(D+、D-)送至主机,同时另一个FIFO开始进行存储。本系统适用于多通道的高速采样,采样频率可以预置,以适应不同频率的输入信号。
波形发生器:信号种类包含正弦波、方波、锯齿波、三角波。输出幅值为-2.5V~+2.5V。当输出选定波形时,先利用USB口将数据从主机中送到双FIFO进行缓存,DSP进行读写控制,将数据写入D/A12位数据总线,通过D/A转换输出电压, 经电压放大器进行放大后,达到要求的幅值。输出波形是通过改变每个周期输出点的个数来改变波形的频率的。通过改变D/A的输出通道实现对不同设备进行输入。
USB与上位机接口:负责与上位机进行通信。上位机通过USB接口将A/D采样频率及通道选择的预置数据传送到CPLD,利用CPLD实现对A/D采样频率和通道的改变。系统采集和处理后的数据通过USB接口送入上位机进行显示和分析。
使用CPLD和4046来实现A/D采样频率的改变,适用于不同频率的信号。通过预置分频器的数值,可方便地改变采样频率,适合于从几十Hz到250kHz范围的信号。采样频率可以灵活改变,同时也避免了高频信号对整个系统的干扰。图1是多通道高速数据采集系统的结构框图。
系统的主要组成部分
ADC模块
该模块采用的是高速、低功耗、六通道同步采样的16位ADC ADS8364,适用于噪声比较大的环境。每个输入端都有一个ADC保持信号,用来保证几个通道能同时进行采样和转换,可以对单极性或双极性输入电压进行A/D转换。本文采用双极性输入方式,输入电压可以是±2.5V、±5V或±10V。当ADS8364采用5MHz的外部时钟来控制转换时,它的取样率是250kHz,采样和转换可以在20个时钟周期内完成。地址/模式信号(A0、A1、A2)决定如何从ADS8364中读取数据,可以选择单通道、周期或FIFO模式。ADC与DSP的接口电路如图2所示。
DAC模块
波形发生器采用DAC7624/25芯片,它有12位数据并行输入,4路模拟输出。其建立时间为10ms,功耗为20mW,可以采用单电源或双电源的接法。在该系统中采用双电源接法,输出电压幅值为-2.5V~+2.5V。通过面板设置生成相应的数据组,再利用数据采集系统的D/A功能模块输出模拟信号。
DSP处理器
DSP芯片主要负责系统的时序控制。选择DSP处理器时,主要考虑其运算速度、总线宽度等。本系统采用32位DSP芯片。系统要进行实时信号分析,要求有较高运算速度,所以选用32位浮点TMS320C32。
为了增强系统的抗干扰能力,系统采用MAX706组成看门狗电路,在系统上电和掉电时产生一个稳定的复位脉冲,保证DSP 的可靠复位。同时,在PCB布线时,模拟地与数字地隔离,最后通过一点接地,对电源加滤波电路和稳压器,以减小电源噪声对DSP的干扰,并且对PCB铺铜处理。
系统软件设计
该系统的软件主要包括DSP的数据采集和处理程序,USB固件和应用程序。系统流程如图3所示。
设备固件设计
固件负责辅助硬件实现设备双向交换数据,以完成USB通信,其主要功能是:接收并处理USB驱动程序的请求及应用程序的控制指令。本文采用的FX2有2种接口方式,该系统采用Slave FIFOs。 Slave FIFOs方式是从机方式,外部控制器可像普通FIFO一样对FX2的多层缓冲FIFO进行读写。
固件的部分初始化程序如下所示:
void TD_Init( void )
{ // Called once at startup
CPUCS = 0x10;
// CLKSPD[1:0]=10, for 48MHz operation
IFCONFIG = 0xCB;
…………
}
void TD_Poll( void )
{ // Called repeatedly while the device is idle
// ...nothing to do... slave fifo‘s are in AUTO mode...
}
在接收过程,信号线上的数据流均以包的形式进行传输(如令牌包、数据包、握手包等),利用SIE可对这些包的PID进行解码,并可对接收的数据进行CRC检查,然后把数据送到处理器中,最后返回一个握手包。如果发现数据有错,它会自动停止响应而不发出握手包,同时“告诉”主机稍后再重新发送该数据。在发送过程,当向主机发送数据时,SIE可接收来自内部RAM的数据和其他信号,然后将它按照USB要求的格式重新包装后送到D+、D-线上。
在开发中使用了控制传输和块传输。控制传输主要用来完成主机对设备的各种控制操作,也就是用来实现位于主机上的USB总线驱动程序(USBD.SYS),以及编写的功能驱动程序对设备的各种控制操作。块传输主要用来完成主机和设备间的大批量数据传输以及对传输数据进行错误检测(若发生错误,它支持“重传”功能)。
USB设备应用程序设计
应用程序是数据采集系统的核心,其主要功能为:设置A/D采样频率和采集通道,启动或关闭USB设备,检测USB设备,设置USB数据传输管道,对USB接口进行数据读写、显示并分析数据。
Windows API包含有3个与设备交换的函数:ReadFile、WriteFile、DeviceIoControl。ReadFile、WriteFile是一般用途的函数,用来读取与写入数据。读取与写入的数据是存储在函数所指定的缓冲区内的。调用ReadFile函数所得到的数据不一定是从设备读出来的,可能是一个要求存储在缓冲区内的数据。DeviceIoControl是一个双向传输函数,也是另一个缓冲区数据的函数,它用一个码来识别一个特定的要求。
在程序开发中,可用VC++编制应用程序。可以把USB设备当成文件来操作,利用CreateFile得到USB句柄,用DeviceIoControl进行控制传输,用ReadFile、WriteFile进行块传输。部分应用程序如下所示:
…………
HANDLE m_hUsbSample;//USB句柄
…………
DeviceIoControl(m_hUsbSample,IO CTL_USBSAMPL_REBOOT,NULL ,0,NULL,0,&length,NULL);
[img]http://www.avrw.com/article/file://控/]file://控制传输
WriteFile(m_hUsbSample,pB uffer,writelength,&writelength,NULL);
[img]http://www.avrw.com/article/file://批/]file://批量输出传输
ReadFile(m_hUsbSample,pB uffer,64,&lgngth,NULL);
[img]http://www.avrw.com/article/file://批/]file://批量输入传输
CloseHandle(m_hUsbSample);
[img]http://www.avrw.com/article/file://关/]file://关闭USB句柄
…………
结语
该虚拟仪器的数据采集系统可以完成单通道或多通道双极性输入模拟量的采集,输出多种信号波形,实现以DSP为核心的高速多通道数据采集系统,可适合于高速、实时性信号的数据采集和处理。本文介绍的数据采集系统,只要配置测量所需的传感器,设计相应的信号调理电路,就可以对各种模拟量进行采集,所采集到的数据可以在计算机上实现存储、计算、控制。
参考文献
1. 王念旭.DSP基础与应用系统设计.北京航空航天大学出版社,2001.
2. 萧世文.USB2.0硬件设计.清华大学出版社,2002.
3. Cypress Semiconductor.EZ-USB FX2 Manual Technical Reference.
4. 张雄伟,曹铁勇.DSP 芯片的原理与开发应用.电子工业出版社,2000.
5. CY7C68013 EZ-USB FX2 USB Microcontroller High-speed USB Peripheral Controller. Cypress Semiconductor Corporation.December 19, 2002. |
|