(生物医学工程专业论文)新型膜片钳数据采集器的控制逻辑和软件设计.pdf_第1页
(生物医学工程专业论文)新型膜片钳数据采集器的控制逻辑和软件设计.pdf_第2页
(生物医学工程专业论文)新型膜片钳数据采集器的控制逻辑和软件设计.pdf_第3页
(生物医学工程专业论文)新型膜片钳数据采集器的控制逻辑和软件设计.pdf_第4页
(生物医学工程专业论文)新型膜片钳数据采集器的控制逻辑和软件设计.pdf_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 ii abstract* the data acquisition and control interface, by connecting the patch-clamp system, perfusion system, or the ca2+ detecting system with the computer system, realizes the communication of the data and the control commands. its an important part of the patch-clamp system. to fulfill the requirement of the cell electrophysiology research and to make the patch-clamp system easily to use, a multi-channel data acquisition and control interface based on the usb2.0 (universal serial bus 2.0) and fpga technology are discussed in this thesis. it can substitute the traditional isa card and pci card with a lot of advantages, such as fixing easily and has a strong anti-jamming ability. the transmission speed of this data acquisition and control interface can achieve 17.8mbyte/s. furthermore, by using the fpga technology, this data acquisition system has accomplished the synchronization of data acquisition and signal output, and it comprises 8 analog input channels and 4 analog output channels, which can run simultaneously and independently. the sampling frequency is changeable in the range of 1khz to 350khz. in addition, two fifo memory witch has double clock domains are integrated by using the block ram resource of the fpga, improving the stability and integration of this system. it is an advanced data acquisition and control interface for the new generation automatic patch clamp system. here the architecture and the key technology of this data acquisition and control interface are presented, with the focus on the design of logic, firmware, testing application and the operation class in the succeeding chapter. keywords: automatic patch-clamp; usb; fpga; firmware; control logic; operation class. *this work was supported by national natural science foundation of china grant no. 30327001 独创性声明独创性声明 本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成 果。尽我所知,除文中已经标明引用的内容外,本论文不包含任何其他个人或集体已经发 表或撰写过的研究成果。对本文的研究做出贡献的个人和集体,均已在文中以明确方式标 明。本人完全意识到本声明的法律结果由本人承担。 学位论文作者签名: 日期: 年 月 日 学位论文版权使用授权书学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,即:学校有权保 留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本 人授权华中科技大学可以将本学位论文的全部或部分内容编入有关数据库进行检索, 可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 保密 ,在_年解密后适用本授权书。 本论文属于 不保密。 (请在以上方框内打“” ) 学位论文作者签名: 指导教师签名: 日期: 年 月 日 日期: 年 月 日 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 1 1 绪绪 论论 1.1 引言引言 细胞通过其膜上的离子通道进行它与外界的通信和实现其内部的信息交换。 离子 和离子通道是细胞兴奋的基础,也是产生生物电现象的基础。细胞电生理学(cell electrophysiology)就是利用电子学的方法测量生物电信号的一门学科。膜片钳技 术就是现代细胞电生理研究的常规方法,它是一种典型的低噪声测量技术,以微 弱的电流信号为测量对象,利用玻璃微电极与细胞膜封接,测量流过细胞膜的离子通 道电流。经过近二十年的发展,它已广泛应用于需要获知细胞膜离子通道电流和细胞 分泌机制的研究领域,如:神经科学、病理学、生理学和脑科学等,已经成为细胞生 物学与分子生物学研究的重要工具16。 电生理实验中得到的数据,往往是幅度随时间而变化的电压波形,为了便于信息 的存储、传输和分析,需要将模拟信号经过 adc 转换成数字信号。另外电生理的实 验也常常要求将一命令电压或者若干特殊的刺激波形作用于微电极, 则需要将上位机 发送的数字信号经过 dac 转换成模拟信号后输出。所以课题中我们设计一款有特定 功能的数据采集和控制器, 以满足上述的实验要求和实现电生理实验中的各个部件与 上位机的接口。 1.2 课题目的与意义课题目的与意义 为了实现膜片钳放大器操作的智能化, 全自动膜片钳系统的设计采用乘法数模转 换器(multiplying digital to analog converters, mdacs)代替可调电阻,用软件实现对 仪器内部参数的自动调节7。这不但使得阻容补偿更加快捷,而且摆脱了操作人员对 膜片钳放大器补偿调节经验的限制,降低了膜片钳系统对操作人员的技术要求,使膜 片钳系统更易于使用。 膜片钳系统的自动化控制对数据采集相应地提出了新的要求。 原来由华中科技大 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 2 学生物物理与生物化学研究所开发的 uda1 型膜片钳实验控制与数据采集器已无法 满足全自动膜片钳系统的需求,市面上众多的 pci 数据采集卡亦难以满足需求,且价 格昂贵。usb2.0(universal serial bus 2.0)作为近几年刚刚兴起的接口技术,具有即插 即用、传输速度快、低成本等特点8,完全可以保证外围仪器部件与主控计算机之间 数据传输的实时性;与 isa、pci 等内部总线技术相比,usb 的安装使用更加方便, 而且可以避免机箱内主板和扩展卡之间的电磁干扰;另外,它的开发周期短。这些都 会提高全自动膜片钳系统的市场竞争力。 也为全自动膜片钳系统的数据采集提供了新 的解决方案。 为了适应全自动膜片钳系统的需求,本课题将 usb2.0 接口技术、fpga 逻辑开 发技术等应用于细胞光电联合检测系统中,实现上位 pc 机与全自动膜片钳放大器、 加药系统、钙离子浓度检测系统等电生理实验的各个部件之间的数据实时交换,完成 检测系统中主机对外围设备的控制和数据采集。 1.3 国内外概况和预测国内外概况和预测 在国内,华中科技大学生物物理与生物化学研究所于 1989 年研制成 pc1 型膜片 钳放大器,并随后推出它的升级产品 pc2a、pc2b 和 pc2c 型膜片钳放大器。实验者 能在同一个软件环境下实现设备的实时同步控制和参数设置, 从而提高实验数据的质 量。产品经中科院上海神经科学研究所、中国科技大学、中国农业大学、北京大学、 华中科技大学同济医学院等几十家研究机构使用,效果良好,技术性能基本上达到了 国外仪器的水平9,10。pc2c 型膜片钳放大器外观图如图 1.1 所示。 图 1.1 pc2c 型膜片钳放大器外观图2 图 1.2 uda-i 数据采集器外观 为满足国内市场对膜片钳实验系统的需要, 华中科技大学生物物理与生物化学研 究所于 2004 年开发了基于 usb1.1 的 uda1 型数据采集器,其外观如图 1.2 所示,它 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 3 的性能参数如下12: (1) 具有 12 位的模拟输入输出分辨率。 (2) 板上集成了两个 4k byte 的 fifo 分别作为 adc 和 dac 数据的缓冲区。 (3) 最高采样率为 100khz。 (4) 八个模拟输入通道和两个模拟输出通道。 (5) 提供输入输出的点与点时间上对齐的同步工作模式。 目前国际上只有少数几家公司能够生产膜片钳放大器。 其中应用比较广泛的有美 国 axon 公司生产的 axoclamp-2b, axopatch 200b,geneclamp 500b,multiclamp 700a 等以及德国 heka 公司的 epc7/9/10 系列。heka 公司生产的具有代表性的产 品是 epc-7 和 epc-9。epc-7 是一种手动调节的膜片钳放大器,它具有良好的性能和 完备的功能,也能跟其他工具配合使用,因此得到广泛应用13。他们最新推出的 epc-10 是新一代全自动膜片钳系统,与它的前代产品 epc-9 相比有了较大的改进。 在放大器的数据采集与控制器方面,heka 公司的放大器采用美国 instrutech 公司 生产的基于 pci 接口技术的 itc-1600 数据采集器,axon 公司的放大器采用他们自 主开发的基于 usb2.0 接口的 digidata 1440a 数据采集器。 美国的instrutech公司生产的itc-1600是一款可扩展的16位数据采集系统,它包 括一块pci-1600计算机的接口卡和一到两个i-1600外置的数据采集单元, 系统的输入输 出电压均在-10.24 v到 +10.239 v之 间。 它利用了最新的光纤技术和数字 信号处理(digital signal processing, dsp)技术,实现了对数据采集器的 可扩展性和多功能性。 利用光纤数据 线将外置的数据采集模块与主机的 pci接口卡连接, 实现了电气的隔离, 消除了地线环路的干扰, 而且避免了 通用缆线的电磁辐射干扰,满足当前和未来的需求14,其效果图如图1.3所示。 图 1.3 itc-1600外观图14 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 4 i-1600 提供了 8 路模拟输入、4 路模拟输出、20 根数字输入信号线和 36 根数据 输出信号线,所有信道都是同步采样的14。另外,还提供了 4 个异步的 adc 通道用 以监视一些慢速变化的参数。8 个模拟输入通道分为两组,每组占用一个四通道,单 通道采样率为 200khz,并且两个 adc 转换器可 以同时采样。 美国axon公司生产的digidata 1440a是一 款基于 usb2.0 接口的数据采集系统,其外观图 如图 1.4 所示,它提供了十六个模拟输入通道和 四个模拟输出通道,其输入/输出范围均在10v 之间,拥有 16 位分辨率;系统的采样率在 1hz250khz 范围内可调;另外,还提供 16bit 的数字输入信道和软件支持的 8/16bit 的数字输出信道。 本课题的主要工作是利用 usb2.0 接口,研制适用于目前正在开发的全自动膜片 钳系统的数据采集系统, 以实现光电联合检测系统的数据中转、 实时采集和实时控制。 1.4 预计达到的技术指标预计达到的技术指标 本课题的目的是要设计出能够应用于细胞电生理实验的多通道高速数据采集系 统,要求实现主控计算机与全自动膜片钳放大器、荧光检测钙离子浓度系统、加药系 统以及其他设备的数据实时交换,达到主控计算机对设备实时控制和数据采集的目 的。预计达到的技术指标如下: (1) 实现 adc 的数据采集和dac 模拟信号输出的完全同步。 (2) 八路模拟数据输入通道和四路模拟数据输出通道。 (3) 模拟输入输出通道的单通道最高输入输出速率至少达到200khz, 转换精度12 位。 (4) 模拟信号的输入输出范围为: 10v。 (5) 一路串行总线接口,控制放大器内部 mdac 的置数。 (6) 实现主机端与外围设备的光电耦合,达到电气性能上的隔离。 图 1.4 digidata 1440 外观图 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 5 1.5 本文主要内容本文主要内容 本文的绪论部分主要介绍了课题背景、国内外概况、课题主要工作及预计指标, 下面的章节将详细讲述课题的细节,主要内容包括: 第 2 章论述了数据采集系统的总体结构,介绍了设计中所涉及的各项技术关键; 第3章主要介绍数据采集系统中usb2.0接口芯片fx2内部mcu固件程序设计; 第 4 章主要介绍了对数据采集系统控制逻辑的一些设计改进; 第 5 章主要讲述了数据采集系统的测试程序结构以及其操作类的实现过程; 第 6 章对全文做出总结,并对 usb2.0 接口技术在细胞光电联合检测系统中的应 用前景进行展望。 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 6 2 总体结构和技术关键总体结构和技术关键 2.1 引言引言 课题设计的数据采集系统是基于 usb2.0 接口和 fpga 控制的,系统除了硬件之 外,还必须包括上位机(pc 机)控制操作的应用程序、usb2.0 主控芯片的固件、fpga 的可综合 hdl 代码等软件。它们运行在不同层次的硬件环境,发挥各自的功能。本 章将主要从系统的角度对各项关键技术进行概括说明。 2.2 数据采集系统的总体结构数据采集系统的总体结构 全自动膜片钳数据采集系统的整体结构框图如图 2.1 所示,主要包括上位机的应 用程序、usb2.0 传输接口电路及其主控芯片的固件、数据缓冲与控制逻辑电路 (fpga)、数字隔离、adc 和 dac 数据转换和信号调理电路六个部分。 主机 (膜片钳 系统上层 应用程序) usb总线 cy7c68013cy7c68013 (固件程序) fpga (逻辑控制) 数 字 隔 离 器 件 da (4路) ad (8路) 膜片钳 放大器 usb2.0的数据采集系统 信 号 调 理 图 2.1 全自动膜片钳数据采集系统的整体结构框图 上位机的应用程序是用户操作控制采集系统的人机交互界面,运行在 window2000/xp 操作系统环境下, 用户可以通过友好的用户界面发送或观测实验波形 以及存储与分析实验数据,还能通过鼠标键盘完成各种实验操作。其中上位机程序与 硬件的接口, 即usb2.0 接口芯片的驱动程序采用芯片制造商提供的通用驱动 (general purpose driver, gpd) ,不需要用户开发。程序的编写语言采用 c+,编译调试环境是 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 7 visual c+ 6.0。 系统的usb2.0接口的控制芯片选用cypress公司的ez-usb fx2 (以下简称fx2, 即 cy7c68013) 。其固件程序是在 cypress 公司提供的固件的框架的基础上完成的, 主要是利用 usb 的控制传输来响应上位机发送的诸如设置采样率、配置采集系统的 工作模式、选通采集卡的数据输出或者数据采集通道、启动或停止设备等各个操作指 令以及完成对 fx2 的 slave fifo 工作模式的配置。简言之,fx2 主要的功能就是实 现主机与 fpga 之间通信和对自身工作模式的配置。slave fifo 模式下的数据传输是 由 usb 协议中的批量传输来完成。固件程序的编写语言是 c51,编译环境是 keil c, 编译的十六进制文件可以通过 usb 接口在线下载或者直接固化在 fx2 的外围 e2prom 存储器中。 fpga 芯片选用美国 altera 公司的 cyclone 系列的 ep1c6t144c6。它提供与 fx2 接口的控制逻辑、控制系统中选通的 adc、dac 工作、分发处理各个通道的数 据,是确保系统能够稳定高效工作的重要一环。另外利用该公司提供的宏模块和芯片 内部的m4k的资源, 将用来缓存adc、 dac数据的两块容量2k words大小的fifo 存储器集成在 fpga 内部,大大简化了系统的硬件设计。其中硬件描述语言选用 verilog hdl,仿真环境是 modelsim6.0,综合下载工具为 quartus。 数字隔离部分对数字电路和模拟电路进行电气上的隔离, 避免数字脉冲对数据转 换电路的干扰, 该电路采用安捷伦公司的数字磁隔离器件 hcpl-900j 实现, hcpl-900 单片集成了四通道的隔离,输入和输出都是采用逻辑电平驱动,不需要提供大电流, 降低了总功耗。此外,它的每个通道最大的隔离延时只有 15ns,最大传输速度达到 100mbit/s16,在我们的应用中几乎不需要考虑隔离器件延时对系统带来的影响。 adc 和 dac 数据转换电路是本系统与外界模拟电路的接口, 它决定了系统数据 采集和波形刺激的精度。系统选用德州仪器公司的 ads7861eb 模数转换芯片和 tlv5618a 数模转换芯片。其中 ads7861eb 是一个单片集成两个逐次逼近转换器的 adc 芯片17,adc 信号调理电路是将幅值范围为-10v+10v 的输入信号调整为符 合 ads7861eb 输入规范的信号,同时对信号的零点进行校准;tlv5618a 是双通道 输出的 dac 芯片,它内部集成的缓存区可以保证两通道同步输出,dac 转换的控制 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 8 信号和数据串行输入。tlv5618a 建立时间最快可以达到 3s18,dac 信号调理电路 是将 tlv5618a 输出信号调整为幅值范围为-10v+10v 的刺激信号。 综上所述,本课题设计的数据采集系统 uda2 是一款基于 usb2.0 总线传输技术 和 fpga 控制的高速数据采集卡,其主要有以下特性: (1) 采用 usb2.0 传输芯片传输数据,支持即插即用、热拔插。 (2) 12 位 adc 模拟输入。 (3) 12 位 dac 模拟输出。 (4) 板载两块 2k *16bits 的 fifo,分别用来存储 adc 和 dac 的数据。 (5) 最大 350 khz 采样率,最低 1khz。 (6) dac 输出模拟电压范围为-10 v +10v。 (7) adc 输入电压范围为-10 v +10v。 (8) 支持输入输出同步、纯模拟数据输出和纯采集三种工作模式。 (9) 4 个 dac 输出通道,8 个 adc 输入通道。 下面的部分将针对上面的提到的 fx2 的固件、fpga、以及上位机应用程序几个 环节所涉及的各项技术关键分别进行讨论,其他部分由同课题组的张利芬完成。 2.3 各项关键技术的分析讨论各项关键技术的分析讨论 2.3.1 usb2.0 接口技术接口技术 usb 规范是 ibm、compaq、intel、microsoft、nec 等公司在 1995 年为简化外设 扩充方案而推广的一种新型的通信标准44。usb 的菊花链式端口扩展方式和即插即 用技术,使得该总线接口具有安装方便、高带宽、纠错能力强、易于扩展、总线供电、 低成本等优点19,成为现今主流数据传输方式之一。 usb2.0 同时又是一种主从式的计算机接口技术,它分为主机端、传输电缆和外 设端三个部分。主机端的硬件部分是指主板上的 usb 主控制器,这部分由 ic 和主板 生产商来完成。 它的软件部分包括与硬件匹配的驱动程序和供应用程序调用的硬件访 问函数,其中驱动程序由操作系统生产商和外围芯片生产商提供,硬件访问函数由开 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 9 发者来完成。硬件访问函数为上层膜片钳软件系统提供底层访问,主要通过调用操作 系统的相关 api 函数来实现,这部分是主机端的主要工作,在本文所讨论的采集系统 中,上位机的应用程序主要完成的就是这一部分工作。传输电缆是连接主机端和外设 端的数据通道。根据 usb2.0 协议和 usb 开发者论坛()的描述,usb1.1 的全速传输电缆与 usb2.0 完全兼容,这部分也不需要设计者开发。外设端就是目标 系统所选择的 usb2.0 接口芯片,围绕着接口芯片设计外围电路,编写接口芯片的固 件程序是采集系统能否高效稳定工作的关键。这一部分内容将在第三章着重讨论。 作为一种现今主流数据传输总线技术, usb 总线提供四种传输方式, 即控制传输 方式 (control mode)、中断传输方式(interrupt mode)、批量传输方式 (bulk mode) 和 等时传输方式 (isochronous mode)。 其中控制传输是主机用来配置和控制 usb 设备的 数据传输方式,其传输优先级别最高,任何时候主机都会预留 10%的总线带宽给控制 传输39;批量传输具有错误纠正机制,常用来传输要求正确无误的大批量的数据。中 断传输类似于批量传输,可实时响应设备请求;等时传输传送数据量大但无传输错误 纠正机制,适用于对数据正确性要求不高而需连续传输大块数据的外部设备;鉴于上 述各传输方式的特点和膜片钳实验系统的要求, 本设计采用控制传输方式响应上位机 程序的指令、批量方式传输膜片钳生理实验中的实验数据。 2.3.2 fpga 技术技术 现场可编程门阵列(field programmable gate array, fpga)是一种可编程的专用 集成电路(application specific integrated circuit,asic)器件,它是由规则的逻辑阵 列所组成的一种使其自身能够适合复杂设计方案的体系结构。 绝大部分的 fpga 都是 由触发器(ff)和查找表(lut)组成的可配置的逻辑单元(le)、可配置的 io 模块(iob)、 以及用于在逻辑单元和 io 模块之间传递信号的可编程互连所组成。同样,还有一个 时钟电路用于驱动时钟信号到每一个逻辑单元中的每一个触发器。 有的 fpga 器件可 能还会有额外的逻辑资源,像 alu,存储器和译码器等。当前,几乎所有的 fpga 内部的可编程单元类型是静态的 ram(sram)或反熔丝20。 基于 sram 编程的 fpga 就是把 sram 的比特位作为编程单元,可以把某个 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 10 sram 存储器中的比特位组合起来,利用它们作为一个 lut 以实现任意类型的组合 逻辑。另外,还可以利用独立的 sram 比特位去控制多路选择器,这些多路选择器 在 le 中可以选择或者不选择某个具体的逻辑电路(组合逻辑和时序逻辑) 。基于 sram 的 fpga 具有可被重复编程的优点,就使得它“在线升级”变得非常容易。但是 在器件被要求工作在具有强烈辐射和电源短时脉冲干扰的环境变化下时, sram 类型 器件的逻辑功能可能会变得不稳定和不可预测, 此时就需要另外一种抗干扰能力强的 基于反熔丝类型的 fpga。 基于反熔丝的 fpga 的原理是: 在由一个绝缘体分开的两个导体之间跨接一个小 小的链接环,当在链接环的两端施加一个大的电压时,链接环就会熔化,导体材料随 之顺着链接环移动, 从而在两个导体之间产生一个导电通路。 这个过程用于连接fpga 内部的经纬连线。反熔丝的 fpga 具有低功耗、抗干扰能力强、以及较快的速度等优 点。但是它只能被编程一次20。 一种呈现出希望的更新技术就是基于 flash eprom 的 fpga。 这种器件实际上是 与基于 sram 的器件是一样的, 只不过它们是利用 flash eprom 比特单元编程。 flash eprom 比特单元向着小而快的方向发展。它们是非易失性的,就像反熔丝一样;但 是它们又是可重复编程的,就像 sram 一样20。 fpga 和复杂可编程逻辑器件(complex programmable logic device,cpld)是 现在常用的编程逻辑器件。两者有很多共同特点,但由于结构上的差异,又具有各自 的特点: (1) fpga 是“寄存器丰富”型,即芯片内部的寄存器与逻辑门的数目之比很高;而 cpld 正好相反,它是“逻辑丰富”型。因此,这就决定了 cpld 更适合完成各种算法 和组合逻辑,而 fpga 则更适合于完成时序逻辑控制。 (2) fpga 是细粒结构, cpld 则是粗粒结构。 这就决定了在编程上 fpga 比 cpld 具有更大的灵活性,同时 cpld 的速度比 fpga 要快,具有较高的时间可预测性。 (3) fpga 的集成度比 cpld 高,具有更复杂的布线结构和逻辑资源。现在市面 上常用的 cpld 产品, 如 altera 公司的 max 系列, 它的最大芯片容量只有一万门。 而 fpga 的容量可以达到上百万门以上,能够满足更复杂的逻辑实现。同时,fpga 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 11 还集成了更多的可编程资源,如可编程的锁相环(pll) 、可编程的 ram 存储器等, 这些都给使用者更多的设计空间。 课题中设计的数据采集系统选择的 fpga 芯片 ep1c6t144c6 是基于 sram 的中 等规模的 fpga, 内部有大约 6000 个逻辑单元 (le) , 11.25kb 的 block ram 资源37。 可以满足整个系统的要求。 2.3.3 上位机的应用程序上位机的应用程序 ez 系列系列 usb 的通用驱动的通用驱动 在主控计算机方面,usb2.0 接口通讯需要驱动程序的支持和应用软件的调用。 主机的应用程序(即膜片钳的上层应用程序)通过 io 管理器产生 i/o 请求包 (简称 irp) 发送到驱动程序进行处理21, 以实现对硬件的操作。windows 系统提供了支持该种机 制的 api 函数来简化用户的编写上层应用程序的工作。 同时 cypress 公司也提供了 ez 系列 usb 的 gpd 及相关源代码,它们运行在操作系统的内核模式下,支持所有基于 ez-usb 接口的设备,为开发者提供数据传输和 usb 设备请求的操作接口。因此, usb 设备开发者在驱动程序开发上不需要再做额外的工作,减轻了开发者的工作量。 所有的 usb 设备都有一个特定的 vid (vendor id)和一个 pid (product id),它们 包含在 usb 设备的设备描述符中,主机的操作系统通过取得设备描述符来确定其目 标设备的 pid 和 vid,并通过一个文件(.inf 文件 )的引导为该设备找到合适的驱动 程序(.inf 文件就是关联 pid/vid 到特定驱动的引导文件) 。当操作系统为 ez-usb 设备找到合适的驱动之后,上位机应用程序就可以通过 i/o 控制码来调用 ez-usb 的 gpd, 应用程序先调用 windows 的 api 函数 createfile()22得到目标设备的设备句柄, 然后再调用 windows api 函数 deviceiocontrol()22,利用 createfile()返回的设备句柄 将 i/o 控制码和相应的输入输出缓冲区递交给设备驱动, 以完成用户特定的应用功能。 1. 设备连接: 由于一台主机上可能会连接多个 ez-usb 设备, 所以 ez-usb gpd 也支持与多个设备通信。 每当主机上面连接一个 ez-usb 设备, gpd 就为这个设备链 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 12 接一个标识 ezusb-i,i 是从 0 开始的整数。createfile()函数在打开一个设备的时候就 会用到这个标识名,下面的例子就是打开表示名为 ezusb-0 的设备。 /declare a handle of the device handle devicehandle; devicehandle = createfile(.ezusb-0, /symbolic link name of the device generic_write, /specifies how to access to the device file_share_write, /specifies how the object can be shared null, open_existing, /specifies which action to take on device that exist, /and which action to take when device do not exist. 0, null); 2. 发送设备请求:应用程序调用 deviceiocontrol()函数向 gpd 发送标准的或者 用户自定义的请求,以完成特定的功能。下面就取得设备描述符的标准请求示例来说 明 deviceiocontrol()函数的用法。此函数返回一个布尔型的值,操作成功则返回“真”, 否则就返回“假”,所得的设备描述符就存放在 pvbuffer 所指向的缓冲区中。 pvoid pvbuffer = null; dword nbytes = 0; bool bresult; /开辟一块用于存储设备描述符的缓冲区。 pvbuffer = malloc(sizeof (usb_device_descriptor); bresult = deviceiocontrol (devicehandle, /取得设备描述符的控制码,由 gpd 提供。 ioctl_ezusb_get_device_descriptor, null, /无输入缓冲区 0, / 输入缓冲区大小为 0 pvbuffer, /输出缓冲区,由于保存得到的设备描述符 sizeof (usb_device_descriptor), / 输出缓冲区的大小 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 13 实际上,在取得设备描述符的整个过程中,真正完成与设备通信的是上层函数调 用的 ioctl_ezusb_get_device_descriptor38控制码。gdp 为设备的开发者 提供了很多这样的控制码以完成不同的功能。 本系统的设计涉及一些标准设备请求和 很多用户自定义的请求以及利用 usb 的批量传输完成数据的收发。这里对开发的过 程中用到的几个控制码作简要的说明。 1. 取得设备描述符 ioctl_ezusb_get_device_descriptor 它是用来响应主机取得描述符的标准请求的控制码, 由于 ez-usb 支持多个设备 的连接,整个膜片钳系统也可能需要在主机上连接多个 usb 设备,所以对于上层应 用软件的开发者而言,必须要知道主机上连接的设备信息(pid/vid) 。所以,应用程 序应该首先得到设备的描述符,然后取得设备的 pid 和 vid 并判断设备的标识,再 确定该设备要完成的工作。 2. 用户自定义请求 ioctl_ezusb_vendor_or_class_request 主机对目标数据采集系统的控制操作主要有:设置采样率、设置工作模式、选择 通道开关以及选通通道的工作速度、启动和停止设备、配置设备等。这些操作都是通 过 usb 的控制传输来完成的用户自定义请求。这个控制码就是要完成这个功能,它 在主机应用程序和 fx2 的固件之间搭建了一个信息传递的桥梁。在将这个控制码作 为 deviceiocontrol()函数的第一个参数的同时,gpd 还要求提供一个特定的结构体指 针作为 deviceiocontrol()函数的输入缓冲区参数(第二个参数) 。结构体在 gpd 中的 定义如下: typedef struct _vendor_or_class_request_control / 传输方向 (0=host to device, 1=device to host) uchar direction; /请求类型 (1=class, 2=vendor) uchar requesttype; /请求的接收者 (0=device,1=interface,2=endpoint,3=other) uchar recepient; 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 14 / 请求的保留位,用户自定义 uchar requesttypereservedbits; /实际的请求 uchar request; /用户自定义的参数 ushort value; ushort index; vendor_or_class_request_control, *pvendor_or_class_request_control; 3. 批量读数据 ioctl_ezusb_bulk_read 它是批量读数据的控制码,可以将 adc 转换后的数据打包并发送给主机,数据 的传输方式采用批量传输,单次传输的数据包不得大于 64kb,另外,gpd 也要求提 供一个结构体指针作为 deviceiocontrol()函数的输入缓冲区参数,这个结构体的定义 如下: typedef struct _bulk_transfer_control /选择数据传输的端点序号,从 0 起的整数。 ulong pipenum; bulk_transfer_control, *pbulk_transfer_control; 4. 批量写数据 ioctl_ezusb_bulk_write 它是批量发送数据的控制码,可以将主机准备的输出数据打包后发送给 dac 芯 片进行转换,数据的传输方式采用批量传输,一次传输的数据包不得大于 64kb。它 也需要一个结构体指针的配合使用以达到所要完成的功能,结构体的定义同批量读数据。 mfc 程序设计程序设计 采集系统的上位机应用程序是基于 windows 操作系统编写的 mfc 程序, 靠事件 驱动来推进程序的运行。然而,这种推进不是由事件的顺序来控制,而是由事件的发 生来控制,而这种事件的发生是随机的、不确定的,并没有预定的顺序。所以,对于 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 15 需要用户交互的应用程序来说,事件驱动有着过程驱动所无法替代的优点。它是一种 “被动”式程序设计方法,程序开始运行时,处于等待用户输入事件状态,事件被触发 后会相应地做出反应,处理完毕程序又返回并处于等待事件状态。事件驱动是靠消息 循环机制来实现的。程序不断等待任何可能的输入,然后做判断,然后再做适当的处 理。上述的“输入”事件是由操作系统捕捉到之后,以消息(一种数据结构)形式进入 程序之中。接受并处理消息的主角是窗口。每一个窗口都应该有一个函数负责处理消 息,程序员必须负责设计这个所谓的“窗口函数”。如果窗口获得一个消息,则这个窗 口函数必须判断消息的类别,然后决定处理的方式23,24 ,windows 应用程序的消息 有四种: (1) 输入消息 包括键盘和鼠标的输入。 (2) 控制消息 用来与windows的控制对象,如列表框、按钮、编辑框等进行双向通信。 (3) 系统消息 对程序化的事件或系统时钟中断做出反应。 (4) 用户消息 由程序员自己定义并在应用程序中主动发出, 一般由应用程序的某 一部分内部处理。 mfc(microsoft foundation classes)是微软为 windows 程序开发者提供的一组凝 聚性强、组织性强的基础类库。mfc 帮我们把浩繁的 windows api 函数利用面向对 象的原理,逻辑的组织在一起。使它们具备抽象化、继承性、多态性和模块化的性质。 同时,mfc 还为用户提供了应用程序框架(application framework),提高了 windows 应用程序的开发效率和开发质量。 在利用 mfc 开发应用程序的时候,必须同时引用数个必要的类,互相搭配。一 个典型的 mfc 应用程序应包含 4 个主要部分:应用类 cwinapp,窗口框架类 cframewnd,文档类 cdocument 和视图类 cview。文档类管理应用程序的数据,视 图类用来显示文档并管理与用户的交互,框架窗口类包含并管理视图。定义和操纵数 据的代码在文档类中实现,而显示数据并解释用户输入的代码则在视图类中实现。用 户需要从以上各类派生出自身的应用类、窗口框架类、文档类和视图类。 cwinapp 类派生自 cwinthread 代表应用程序的主线程, 它负责应用程序的初始 化、运行和结束,成员函数 initinstance()负责构造主框架类对象,创建并显示主框架 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 16 窗口,并采用文档模板类 cdoctemplate 动态创建文档、视图和子框架。 一个程序初始化完成后,其 winmain 函数就会调用 run 函数来处理消息循环, 调用 onidle()函数来做空闲时的处理工作。这部分已经在 mfc 中实现了封装,用户 只需在各个类中定义相应的消息处理函数就可以了24,25。 综上所述,基于应用程序框架设计思想的 mfc 是一个完整的程序模型,完成了 windows 程序设计过程中几乎所有的基本工作,包括初始化、窗口创建、消息循环等 等,此外,mfc 采用了文档视图结构,把数据管理和数据显示区分开来。 关于多线程关于多线程 在实验进行的过程中,程序一方面要控制硬件工作并发送或者采集实验数据,另 一方面要用生动的图形用户界面向实验人员实时显示实验过程。 此外实验进行过程中 还应能响应用户操作,如菜单、工具栏命令等。如果程序只采用一个线程,以上所有 操作只能以串行的方式执行,必然会造成实验的非实时性、无法及时响应用户消息等 种种问题, 甚至会得到错误的实验结果。 在 windows/nt 等抢占式多任务操作系统中, 在程序中利用多线程技术,把数据采集与数据显示放到不同的线程中实现,通过线程 间的协调同步,及时响应用户对实验进程的控制26。我们的程序,由于要处理的数据 量非常大、同时处理的任务多,只有利用多线程机制才能满足要求,才能保证数据不 丢失和结果的正确性。 从 windows 操作系统的角度上来讲,线程就是线程,并没有什么分类,但是从 mfc 的角度来看, 则把线程划分为与使用者界面无关的工作者线程 (worker threads) 以及和使用者界面相关的用户界面线程(user interface threads)27。所谓的工作者线 程,就是只负责执行后台的任务,不接收用户的直接输入,不需要窗口和消息循环。与 工作者线程不同的是,用户界面线程可以创建窗口并处理发送给这些窗口的消息。用 户界面线程最常见的用法是创建多个由各自的执行线程服务的窗口, 而工作者线程则 非常的适合执行那些可以从应用程序的其他部分中分离的独立任务以及在后台中执 行的任务。对比这两种线程,工作者线程设计简单,明了。实际的应用中,比较好的 做法是把所有的用户界面操作都集中在主线程中,其他的“纯粹的运算工作”才考虑交 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大 学 硕 士 学 位 论 文 17 给工作者线程去完成24。 2.4 小结小结 本章从数据采集与控制器的总体结构出发,详细的介绍了设计中各个部分所涉及 到的技术关键。其中首先介绍了 usb2.0 的传输协议,并对 usb 的各种传输方式做了 简单的分析比较;然后阐述了 fpga 的内部结构和编程方法;最后详细的解释了上位 机应用程序所用到的 ez 系列 usb 设备的通用驱动以及 mfc 的程序的消息传递机制 和多线程的设计方法。并举例说明如何利用特定的 window api 函数调用通用驱动的 io 控制码。 华 中 科 技 大 学 硕 士 学 位 论 文华 中 科 技 大

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论