微机 接口
引言
在微机测控系统中,经常会遇到需要输入各种模拟信号的情况,这时必然要进行A/D转换。有时在某些实际项目中,为了采集某些模拟量而选用一些专用的数据采集卡,不仅使得系统更加复杂,不容易实现功能扩展,还增加了系统设计成本。另一方面,USB接口操作简单越来越得到广泛的应用,因此设备的USB接口化也是一个发展趋势。
XFT-1型开放式傅立叶变换光谱仪采用了经典的麦克尔逊干涉仪,干涉后的光强随着动镜的移动而发生变化,光电接收器将接收到的缓慢变化的光强信号转化为了相应的电压信号。为了去除由于动镜移动速度不均匀所造成的误差,模块中采用了双通道,同时测量参考光(He-Ne 激光)和被测光源后,利用参考光的信息校正被测光测量位置误差。在XFT-1型开放式傅立叶变换光谱仪中,采用了本文提出的这种简易的USB数据采集系统。考虑到经济、实用因素,系统中采用了单片机和通用USB接口芯片,将两者结合实现USB接口的数据采集系统设计。上位PC则采用了C#语言编程,将采集到的数据实时显示、处理分析、数据保存和打印。
硬件电路设计
本系统以ADI公司的ADuC841为核心实现数据采集和控制。此单片机具有单指令周期20MIPS 8052内核和8通道高速420Ksps、12bit模/数转换器,支持在线下载。控制器和ADC集成缩短了开发时间,提高了系统的稳定性。
本文以南京沁恒的USB接口芯片CH375为核心实现USB数据传输。如下特点:兼容USB2.0;内置固件模式下屏蔽了相关的USB 协议,自动完成标准的USB 枚举配置过程,完全不需要本地端控制器作任何处理,简化了单片机的固件编程;通用Windows 驱动程序提供设备级接口,通过DLL 提供API 应用层接口。
ADuC841和CH375的接口电路图如图1所示。ADuC841和CH375有串行和并行两种数据线连接方法。模块中为了提高速度采用了并行的方法,将ADuC841的P0口与CH375的并行总线相连。除了读写信号连接外,采用A14作为地址位。A14=0,表示数据总线上是数据;A14=1,表示数据总线上是命令。USB传输过程中,ADuC841与CH375通过外部中断触发,采用ADuC841的INT0外部中断引脚直接和CH372的INT#引脚相连。CH375在正常工作时ACT#引脚输出为低电平,因此在电源和此引脚间加一个发光二极管能够指示USB接口芯片是否正常工作。发光二极管的亮灭为下位机程序的调试提供了重要的信息。
系统软件设计
系统软件是由下位机程序(固件程序)、USB系统驱动程序和应用程序三部分构成。利用USB协议传输数据的模型如图2所示。本系统的软件程序主要包括单片机C语言编写的数据采集和数据传输子程序,以及用C#编写的上位PC机采集到的数据实时显示、处理分析、数据保存和打印子程序。
下位机程序
设备的固件程序是数据采集系统的核心,下位机程序主要利用KeilC51编写。为了降低复杂程度和增加程序的可维护性,下位机程序设计采用先查询PC机通过USB接口传过来的命令再执行的方式。在上位机和下位机通讯过程中设定协议,在协议中设定相应的命令字和校验字段。主要的命令字有系统检测是否正常、设定采样频率、设定采样点数、采样启动信号等。下位机主程序为不断扫描命令字变量,看其是否有效。被监视命令字初始设为无效,上位机发出新的命令字后,下位机进入中断子程序接收命令字,命令字设为有效。下位机扫描到新命令字的内容后,执行相应的操作,然后将待监视命令字设为无效,继续等待新的命令字。这种设计细化了任务的功能,有利于开发、调试和维护。
数据采集子程序在主程序接收到启动数据采集过程命令字后运行。当单片机接收到上位机通过USB发送过来的命令字后,启动数据采集过程。它利用片内的定时器设定采集时间间隔,利用片内的ADC进行数据采集。在定时中断子程序中,单片机将采集两个通道的数据,将它们按一定的顺序存放到缓冲区中,然后检查缓冲区是否满,如果缓冲区不满,定时中断子程序结束,否则将缓冲区中的数据通过CH375发送给上位机,清空缓冲区,定时中断子程序结束。
USB驱动程序
本系统的一大优点就是开发容易。南京沁恒公司已经为用户提供了通用的USB驱动程序。只需要安装现有的USB驱动安装程序,它为应用程序的开发提供了很多接口函数。由于主要采用批量上传和批量下载方式,所以主要用到CH375ReadData,CH375WriteData等函数。这一部分不需编写程序。
上位机程序
上位机程序可以采有多种软件开发工具,本系统在Visual Studio2005开发环境下,用C#语言编写了应用程序。主要完成读取、显示、保存、打开和打印数据等工作。
数据读取过程是上位机程序的关键部分。为了在从下位机读取数据时不影响数据采集界面响应的流畅,在程序设计中利用多线程实现数据读取。数据采集工作在单独的子线程中完成,而主线程则负责完成鼠标、键盘等对用户的响应。在数据采集子线程中,通过DLL 提供API 应用层接口直接访问USB驱动程序中的缓冲区。成功打开设备后,利用CH375WriteData接口函数向缓冲区中写命令字,向单片机发送命令;利用CH375ReadData接口函数读取缓冲区中的数据,获得采集到的数据。
在Visual Studio2005开发环境下,编写上位机程序开发难度相对较低。数据实时显示增加了数据采集过程的直观性。将采集到的数据通过GDI+在PictureBox控件上绘图,设置一个软件定时器,每隔一定的时间将图形重绘一次,由于时间间隔小于0.1s,视觉上是连续变化的曲线。数据的保存和打开功能主要是利用C#中的StreamWriter类和StreamReader类完成。打印数据和图形主要使用PrintDocument类,调用Print方法后,在PrintDocument_PrintPage事件中将需要打印的文字和图形输出或重绘即可打印。
结语
利用单片机和USB接口芯片的简单连接即可扩展出一个USB接口的数据采集模块,而且无需外扩数据存储器,同时,该采集系统还可充分利用ADuC841丰富的片上外设和I/O资源进行功能上的扩展。在XFT-1型开放式傅立叶变换光谱仪系统中,利用了ADuC841通过同步电机控制麦克尔逊干涉仪动镜位置。经过测试,该系统采样数据精度较高,传输速率较快,性能稳定,通过与PC机相连后,不仅使得数据存储量大,而且更易于进行数据处理,经济简单,在XFT-1型开放式傅立叶变换光谱仪系统中性能稳定。
来源:DVBCN数字电视中文网
更多回帖