一种基于PCI总线和DSP技术的虚拟仪器设计
时间:03-16
来源:嵌入式公社 作者:北京理工大学 刘永阳 蒋健 罗弘谞
点击:
图4 输入信号处理电路原理图
图5 LTC1608 A/D芯片引脚连接电路图
具体的信号处理电路如图4和图5所示。
系统软件设计
正如图1所示,硬件设计完成后,要使整个系统工作还需要软件的支持,这些软件包括PCI设备驱动程序、数据处理算法程序和系统控制软件。
1 设备驱动程序设计
设备驱动程序不是单独存在的,而是相关操作系统内核的一部分,所以需要对操作系统有一定的了解。 Windows 2000操作系统是32位的多任务非实时操作系统。对整个系统底层的操作和用户与硬件打交道的权力被屏蔽,必须通过操作系统统一管理设备驱动程序和其他内核访问来实现应用软件对硬件的访问。在设计和使用PCI设备时,经常要在软件中对系统资源进行访问,因此只有编制设备驱动程序才能实现对PCI总线设备的完全访问。
应用程序对设备I/O进行Win32调用,这个调用由I/O系统服务接收。I/O管理器从这个请求构造一个合适的I/O请求包(IRP)。在最简单的情况下,I/O管理器只是把IRP传递给一个设备驱动程序,这个驱动程序与硬件打交道,并完成IRP的处理。I/O管理器把数据和结果返回给 Win32和用户应用程序。而一个IRP由一个分层的设备驱动程序栈处理是很常见的。每个驱动程序把该请求划分成更简单的请求。最高层的驱动程序(如文件系统驱动程序)知道文件如何在磁盘上表示,但不知道如何得到数据的细节;中间层次的驱动程序进一步处理请求;最低层的驱动程序与硬件实际打交道。
本设计选择的硬件驱动程序开发工具是Compuware公司提供的一个驱动程序集成开发包(DriverStudio)。利用其中的DriverWorks工具可以生成一个PCI总线驱动框架,然后在WDM中实现输入输出处理,可以用KIoRange类来实现。
在驱动程序框架生成的过程中,我们可以通过向导声明驱动程序中将要使用的资源;通过调用KIoRange类的Initialize()函数,可以对资源进行初始化(映射PCI局部空间);应用层通过DeviceIoControl函数向驱动程序发命令来调用KIoRange的成员函数实现应用层对I/O空间的处理。开发PCI母板的windows驱动程序,就是使PC能正常识别该板卡并分配所需的系统资源。
2 FFT算法的实现
系统需要针对DSP数据采集模块,开发并实现对模拟信号的采集以及对数据进行FFT(快速傅立叶变换)算法处理的程序。
作为一般的情况,设:x(n)和 X(k)都是复数,因为从实际计算过程看,实数和复数没有区别,唯一不同的是:实数的虚部为零,表达式简单些。而运算过程所有的计算都是对实数进行的,如果信号或频谱是复数,就把最后计算的结果再组合成为复数分量。FFT运算的基本单元是"蝶形单元",其蝶形运算的基本形式如下式所示:
所有蝶形单元的运算可统一表示为
(1)
式(1)中,A和B是蝶形单元的输入,C和D是输出。同时将表示为
(2)
式(1)可以表示为虚部和实部形式,带下标R的字符表示实部,带下标I的为虚部,即
(3)
根据算法原理和上面的说明,用C语言编制出一个按时间抽取的FFT算法程序,结构上分为几个部分:首先是码位的倒置,然后根据计算的点数确定蝶形运算的级数,接着是逐级进行蝶形运算,完成FFT运算。
3 应用控制软件的设计
图6 控制软件功能模块框图
整个应用控制软件的功能模块框图如图6所示。
基于以上的控制功能模块图,选择使用VC++来实现本系统应用软件的人机界面以及对系统的控制功能。VC++的开发环境集编辑、编译、连接、调试、向导等多项功能于一体,并且提供了目前成为业界标准的MFC(Microsoft Application Foundation Classes)类库。
我们开发的虚拟仪器系统PC端控制软件可实现数据波形显示、端口配置、内存读写以及对仪器的控制功能,其主界面如图7所示。
图7 程序主界面
结语
本设计实现了基于DSP技术与PCI总线的数据采集处理卡,开发了虚拟式实时多通道FFT频谱分析仪的应用程序以及主机监控界面。通过在数据采集卡上集成DSP,使得该卡不但能实时不掉点地采集外界信号,而且能在卡上实现数字滤波、FFT频谱分析。
整个系统经过综合调试和严格测试后,达到设计需求,业已投入实际使用。
图5 LTC1608 A/D芯片引脚连接电路图
具体的信号处理电路如图4和图5所示。
系统软件设计
正如图1所示,硬件设计完成后,要使整个系统工作还需要软件的支持,这些软件包括PCI设备驱动程序、数据处理算法程序和系统控制软件。
1 设备驱动程序设计
设备驱动程序不是单独存在的,而是相关操作系统内核的一部分,所以需要对操作系统有一定的了解。 Windows 2000操作系统是32位的多任务非实时操作系统。对整个系统底层的操作和用户与硬件打交道的权力被屏蔽,必须通过操作系统统一管理设备驱动程序和其他内核访问来实现应用软件对硬件的访问。在设计和使用PCI设备时,经常要在软件中对系统资源进行访问,因此只有编制设备驱动程序才能实现对PCI总线设备的完全访问。
应用程序对设备I/O进行Win32调用,这个调用由I/O系统服务接收。I/O管理器从这个请求构造一个合适的I/O请求包(IRP)。在最简单的情况下,I/O管理器只是把IRP传递给一个设备驱动程序,这个驱动程序与硬件打交道,并完成IRP的处理。I/O管理器把数据和结果返回给 Win32和用户应用程序。而一个IRP由一个分层的设备驱动程序栈处理是很常见的。每个驱动程序把该请求划分成更简单的请求。最高层的驱动程序(如文件系统驱动程序)知道文件如何在磁盘上表示,但不知道如何得到数据的细节;中间层次的驱动程序进一步处理请求;最低层的驱动程序与硬件实际打交道。
本设计选择的硬件驱动程序开发工具是Compuware公司提供的一个驱动程序集成开发包(DriverStudio)。利用其中的DriverWorks工具可以生成一个PCI总线驱动框架,然后在WDM中实现输入输出处理,可以用KIoRange类来实现。
在驱动程序框架生成的过程中,我们可以通过向导声明驱动程序中将要使用的资源;通过调用KIoRange类的Initialize()函数,可以对资源进行初始化(映射PCI局部空间);应用层通过DeviceIoControl函数向驱动程序发命令来调用KIoRange的成员函数实现应用层对I/O空间的处理。开发PCI母板的windows驱动程序,就是使PC能正常识别该板卡并分配所需的系统资源。
2 FFT算法的实现
系统需要针对DSP数据采集模块,开发并实现对模拟信号的采集以及对数据进行FFT(快速傅立叶变换)算法处理的程序。
作为一般的情况,设:x(n)和 X(k)都是复数,因为从实际计算过程看,实数和复数没有区别,唯一不同的是:实数的虚部为零,表达式简单些。而运算过程所有的计算都是对实数进行的,如果信号或频谱是复数,就把最后计算的结果再组合成为复数分量。FFT运算的基本单元是"蝶形单元",其蝶形运算的基本形式如下式所示:
所有蝶形单元的运算可统一表示为
(1)
式(1)中,A和B是蝶形单元的输入,C和D是输出。同时将表示为
(2)
式(1)可以表示为虚部和实部形式,带下标R的字符表示实部,带下标I的为虚部,即
(3)
根据算法原理和上面的说明,用C语言编制出一个按时间抽取的FFT算法程序,结构上分为几个部分:首先是码位的倒置,然后根据计算的点数确定蝶形运算的级数,接着是逐级进行蝶形运算,完成FFT运算。
3 应用控制软件的设计
图6 控制软件功能模块框图
整个应用控制软件的功能模块框图如图6所示。
基于以上的控制功能模块图,选择使用VC++来实现本系统应用软件的人机界面以及对系统的控制功能。VC++的开发环境集编辑、编译、连接、调试、向导等多项功能于一体,并且提供了目前成为业界标准的MFC(Microsoft Application Foundation Classes)类库。
我们开发的虚拟仪器系统PC端控制软件可实现数据波形显示、端口配置、内存读写以及对仪器的控制功能,其主界面如图7所示。
图7 程序主界面
结语
本设计实现了基于DSP技术与PCI总线的数据采集处理卡,开发了虚拟式实时多通道FFT频谱分析仪的应用程序以及主机监控界面。通过在数据采集卡上集成DSP,使得该卡不但能实时不掉点地采集外界信号,而且能在卡上实现数字滤波、FFT频谱分析。
整个系统经过综合调试和严格测试后,达到设计需求,业已投入实际使用。
- 用双端口RAM实现与PCI总线接口的数据通讯(05-06)
- 基于PCI总线和DSP芯片的图像处理平台的硬件设计(07-06)
- 基于DSP和PCI总线的通用数字信号处理系统(11-13)
- 基于Linux平台的天气雷达高速数据采集系统设计(03-13)
- 基于DSP与PC机的PCI总线高速数据传输 (07-08)
- 基于DSP的内嵌PCI总线的卫星信号仿真器设计方案(03-20)