虚拟数字示波器的设计和实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、绪论
1.1 虚拟示波器背景
示波器是电子测量行业最常用的测量仪器之一,主要用来测量并显示被测信号的参数和波形,在科学研究、科学实验以及现场监测等许多领域被广泛应用。随着科学研究的不断深入和各种高新技术的不断发展,传统示波器的诸如波形不稳定、测读不准确等许多缺陷逐渐显露出来,而且体积大,耗电多,越来越不能满足现代应用的需要。
“虚拟仪器”这一新概念测量仪器的诞生,使示波器突破了传统,在功能和作用等多方面发生了根本性变化。虚拟仪器将计算机和测量系统融合于一体,用计算机软件代替传统仪器的某些硬件的功能,用计算机的显示器代替传统仪器物理面板。
虚拟示波器是虚拟仪器的一种,它不仅可以实现传统示波器的功能,具有存储、再现、分析、处理波形等特点,而且体积小,耗电少。虚拟示波器使用功能强大的微型计算机来完成信号的处理和波形的显示,利用软件技术在屏幕上设计出方便、逼真的仪器面板,进行各种信号的处理、加工和分析,用各种不同的方式(如数据、图形、图表等)表示测量结果,完成各种规模的测量任务。鉴于虚拟示波器的种种优点及广泛用途,研究出性能优越、价格低廉的虚拟示波器是十分重要的。
1.2 性能指标
本示波器与常见的示波器比较,最大的特点是可以定量地给出信号的各种参量,比如最大、最小值和频率等,无需使用者再去数格子,然后还要计算。特别适合于学校教学实验的需求,在学校教学中可以直联投影机,使全体学生都可以远距离看到信号波形的演示。
本示波器采样USB接口,其频率比并口示波器略高,同样支持直流测量,可以定量测量信号,主要技术指标如下:
采样频率:共八挡可调:323.53kHz、100kHz、50kHz、20kHz、10kHz、5kHz、2kHz、1kHz。本机测量的信号频率应在70kHz以下。
最高输入电压:共两挡可选:±2.5V,±12.5V,如果接入10:1示波器探棒,最大输入电压可达±125V。
输入阻抗:1MΩ。
供电电压:无需外部供电,直接从PC机的USB口取电。
接口:USB接口。
二、硬件设计
具体电路原理图见附录一,从图中可以看出电路的输入信号调理部分和信号转换部分与常见的并口示波器相同,R10、R11、R12、R13、R14、C19、C20和C21构成输入交直流切换和衰减网络,提供交直流输入切换和1:1、1:5的输入信号切换功能;TL074中的一个运放U 1 A和其周边元件构成一个跟随放大器,提供了输入保护和阻抗转换功能;TL074中的另一个运放U1B
构成一个正相放大器,提供-2.5V~+2.5V向0~2.5V的转换功能,同时依据实际操作的经验,取消了不实用的外触发部分,简化了电路。
电路的主体部分以PIC18F2550为核心,PIC18F2550与周边电路共同构成了模数转换采样图1 19.2kHz方波波形图2 50Hz市电波形和USB接口部分,其中TL43 1和接在其阴极的200Q电阻构成了一个2.5V电压基准,供单片机作为模数转换和运放电平转换的电压基准。由于USB仅能提供5V电源,不能满足前两级运放的工作条件,为此采用一片34063构成了-5V~5V的转换电路供运放使用。
实物图见附录三。
三、软件设计
4.1 单片机程序设计
单片机的软件采用PICC编写,使用了MICR0CHIP的USB库,主要完成BNC过来数据的采集、A/D转换、为数字电路提供CP脉冲以及完成USB的通信等工作。图2为单片机部分的程序流程图。
图2 单片机软件设计流程图
微芯公司提供了一系列的USB寄存器,使用这些寄存器可以完成USB通信。大多数的USB 通信都是通过中断来完成的,在USB中断服务程序内,要实现输入/输出接口,允许大多数的USB程序在后台完成。从应用的观点来看,枚举过程和数据通信的发生并没有联系。
对于单片机控制程序,目前没有任何厂商提供自动生成固件(firmware)的工具,因此所有程序都要由自己手工编制。由于USB协议的复杂性,并且考虑到广大客户的需求,因此,Microchip 公司在推出PIC18F4550系列芯片时,提供了面向不同客户群的DEMO程序。本系统的设计就是在Microchip公司提供的DEMO程序的基础上,进行必要的修改来完成的。本设计的具体固件主要由以下8个文件组成。
① main.c:系统的主程序,包括InitializeSystem()和USBTasks(void)两个子程序,主要完成系统的初始化以及其他各种子程序的调用。
② usb9.c:实现的是USB协议功能,包括枚举总线的接口和核心功能,以及USB的中断服务程序。它处理由USB用户所产生的所有的中断。在这个程序中,主要实现对描述符的枚举以及休眠、复位功能,主要包括USBCheckStdRequest(void)、USBStdGetDscHandler(void)和USBStdFeatureReqHandler(void)等5个子程序。
③ usbctrltrf.c:主要实现USB控制传输所需的各种功能,主要由USBCtrlTrfSetupHandler(void)、USBCtr-lEPServiceComplete(void)和USBPrepareForNextSetup-Trf(void)等8个子程序组成。
④ usbdrv.c:主要实现与USB驱动相关的功能,包括检查总线状态、USB模块使能、USB
模块挂起、远程唤醒等功能;主要由USBSuspend(void)、USBModuleEnable(void)、USBSoftDetach(void)和USBDriverService(void)等12个子程序组成。
⑤ usbdsc.c:主要是对该系统的描述,包括厂商、产品号等的描述。
⑥ usbgen.c:对USB设备类的配置(在这里把它配置为通用USB类),主要包括USB通用类的初始化端点和读写,由USBGenInitEP(void)、USBGenRead(byte*buffer,byte len)和USBGenWrite(byte*buffer,bytelen)三个子程序组成。
⑦ usbmmap.c:主要用于检查USB在通信过程中,端点号与BDT(缓冲器描述符表)之间的匹配。
⑧ user.c:直接面向用户的应用程序,可以帮助用户完成自己的初始化配置、处理数据的读/写、I/O口的处理,设备的请求等。本设计中下位机的大部分功能都是由这个程序来实现的,比如A/D转换及其数据的读取、1MHz的PWM波形产生等。它主要包括UserInit(void)、BlinkUSBStatus(void)、ServiceRequests(void)、ProcessIO(void)、ResetTempLog(void)和ReadPOT(void)六个子程序。
4.2 PC机软件编程
要编写PC机上的软件,可以利用Microchip公司提供的开发工具包。该工具包是一个安装程序,安装后可以在安装目录下找到USB通用的驱动程序、用Borland C编写的应用程序、一些固件代码,以及编写应用程序所需的API函数等。对于一般的应用,驱动程序可以直接使用,无需重编。在编程中主要用到以下7个API函数:MPUSBGetDLL Version(),返回DLL的版本号;MPUSB-GetDeviceCount(),返回连接没备的数目;MPUSBOpen(),返回指定pVID_PID和pEP的USB设备端点的句柄,返回的是一个端点句柄;MPUSBRead(),从IN端点读取数据并填入缓冲区;MPUSBWrite(),对一个OUT端点写入数据并使用pData缓冲区;MPUSBReadInt(),从Inter-rupt IN端点读取数据并填人缓冲区;MPUSBClose(),关闭一个端点的句柄。因为Microchip公司提供的MPUS-BAPI.DLL源程序是用Borland C编写的,这一程序无法在VC环境下编译,所以也不能产生隐式调用所需的.LIB文件,因此本设计在使用DLL时用的是显式链接。
PC机的软件部分主要用于实现上位机同下位机之间的USB通信,输入信号的细分和显示等功能。实现这一功能的方法有很多种,比如采用简单的VB、数据处理能力很强的Delphi,或国内外广泛采用的Borland C和VC等。为了下一步的软件开发以及与厂家的其他软件接口,本系统上位机的软件部分采用VC++6.0来实现。图3是PC机软件部分的流程图。
图3 PC机软件设计流程图