基于USB总线和89C51单片机的数据采集系统设计_第1页
基于USB总线和89C51单片机的数据采集系统设计_第2页
基于USB总线和89C51单片机的数据采集系统设计_第3页
基于USB总线和89C51单片机的数据采集系统设计_第4页
基于USB总线和89C51单片机的数据采集系统设计_第5页
已阅读5页,还剩32页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

摘 要本文介绍了基于 USB 总线的数据采集设备的开发法,包括数据采集硬件设计、USB 总线 的硬件设计,同 时也简单的介绍了设备 固件设计、基于 USB 的远程数据采集。89C51 通过对多路采集模 块进行控制,选 出一路通道的数据寄存在单片机,再通过 USB 芯片将 89C51 采集到的数据上传给 上位机。关键词:数据采集,89C51,通用串行 总线Based on the USB bus and 89C51 single-chip data acquisition system designAbstract This paper introduces the acquisition based on USB bus-based data acquisition, including the data acquisition hardware design and USB bus of the hardware design. Also introduces USB-based remote data acquisition system and firmware design. 89C51 selects the way data storage channel in the single-chip by controlling multi-channel module, and then the data collected by 89C51 upload to the host computer. through the USB chipsKey word: Data Acquisition, 89C51 Single-chip, Universal Serial Bus目 录1 引言 .12 总体方案设计 .12.1 设计思路 .12.2 设计方框图 .13 数据采集设计 .23.1 模拟信号的多路选择 .23.2 多路开关原理 .23.3 A/D 转换介绍 .33.3.1 分辨率 .33.3.2 误差和精度 .43.3.3 转换速率 .43.3.4 A/D 转换的方法 .43.4 数据采样电路 .44 单片机介绍 .64.1 单片机的基本组成 .64.2 单片机引脚及功能 .65 USB 接口电路设计 .75.1 USB 芯片内部结构 .85.1.1 端点 0.85.1.2 端点 1.95.1.3 端点 2.95.1.4 外部固件参考流程 .95.2 USB 芯片与单片机的接口电路 .105.3 USB 设备驱动程序设计 .116 应用程序设计 .127 设备固件设计 .138 远程数据采集系统设计 .149 结束语 .15致谢 .15参考文献 .15附录一 整体电路图 .17附录二 CH375 芯片管脚 .18附录三 程序清单 .1911 引言在工业生产和科学技术研究过程中,常常需要对各种数据进行采集,现在常用的数据采集方式是在 PC 机或工控机内部安装数据采集卡,如 A/D 卡、 RS-422卡及 RS-485 卡。采集卡不仅安装麻烦,易受机箱内其他电路的干扰,而且由于受计算机插槽数量和地址、中断资源的限制,不可能挂接很多设备。本 设计利用通用串行总线(Universal Serial Bus,简称 USB) 设计 了基于 USB 总线的数据采集设备很好地解决以上这些冲突。2 总体方案设计2.1 设计思路 本设计主要包括三部分:数据采集设计部分,单片机控制部分和 USB 设计部分。数据采集由多路模拟开关、滤波采样保持、隔离放大、A/D 转换、光电隔离器组成。单 片机采用 AT89C51。USB 电路主要采用 CH375 芯片。单片机再从地址寄存器中发出地址控制信号经光耦控制多路模拟开关。多路模拟模拟开关根据地址控制信号选择一路信号进行滤波、放大、A/D 转换后送至单片机的移位寄存器。移位寄存器将采集到得数据转换为 8 位并行是传送到USB 芯片的数据缓冲区中;一旦数据缓冲区存满,USB 芯片自动将数据打包即时请求读入数据,然后 89C51 系统将数据从数据缓冲区中读出,由收发器通过数据线(D+、 D-)送至主机。2.2 设计方框图图 1 设计方框图光 电 隔 离 器多 路 模 拟 开 关单 片 机USB电 路上 位 机滤 波 采 样隔 离 放 大A/D转 换23 数据采集设计3.1 模拟信号的多路选择32 路模拟电压信号(如 1-5V)送往多路模拟开关组成的模拟数据选择器, 选择控制信号决定其中 1 路模拟信号经滤波、隔离放大、 A/D 转换,变为 M 位十进制数据,存到单片机的移位寄存器中移位寄存器, 单 片机再将采集到得数据转换为 8 位并行数据由 USB 接口 电路送到上位机。当地址线为 8 位是,最多可达 2的 8 次方 256 路。如不采用数据选择方案, 则所需的隔离放大器、A/D 转换器也将多达 256 个 4。3.2 多路开关原理多路开关是切换数字信号和模拟信号的器件,也称多路转换器或多路复用器,记为 MUX,能切换数字信号的多路开关也称数据选择和数据分配器; 能切换模拟信号的多路开关也称多路模拟开关,模拟开关同时也能切换数字信号。早期的多路开关曾采用继电器,但它有速度慢、体积大、噪声大、使用寿命短等缺点。现在的数据采用电路中多采用集成的多路开关,典型的多路开关有 4 双通道多路开关、单 8 通道多路开关、双 8 通道多路开关、 单 16 通道多路开关等。其中单8 通道多路开关典型的产品型号为 CD4051,但由于它们是早期标准 CMOS 产品,性能已经不能满足控制系统的许多要求。AD 公司的 ADG658/659 是CD4051/CD4052 的改进型。现已 ADG658/ADG659 为例介绍其机构和功能,ADG658/ADG659 引脚图如图 2 所示,其功能见表 1。 图 2 ADG658/ADG65 引脚图表 1 ADG658 功能表S57D6EN/VG9A0B3A2 A1 A0 EN/ 输出 DX X X 1 与输入断开0 0 0 0 S10 0 1 0 S20 1 0 0 S30 1 1 0 S41 0 0 0 S51 0 1 0 S61 1 0 0 S71 1 1 0 S8ADG658 有一个使能端 EN/和三个选择/分配控制端 A2、A1、A0,S1-S8 和D 分别为多路开关引出端, S1-S8 既可作输出,也可做输入。S1-S8 做输入时, D做输出。当把 ADG658 视为 8 选 1 数据选择器时, A2、A1、A0 为选择控制端,S1-S8 做输出,D 为输入:当把 ADG658 视为 1 至 8 数据分配器时, A2、A1、A0为分配控制端,使能端 EN/=1 是,S1-S8 与 D 之间 断开。 EN/和 A2、A1、A0 为逻辑信号输入端,S1-S8 与 D 之间可传逻辑信号 4。表 2 ADG659 功能表A1 A0 EN/ 输出 DA 输出 DBX X 1 与输入断开 与输入断开0 0 0 S1A S1B0 1 0 S2A S2B1 0 0 S3A S3B1 1 0 S4A S4BADG659 有一个使能端 EN/和两个选择分配控制端 A1、A0,S1A-S4A 和DA、S1B-S4B 和 DB 分别构成 4:1MUX,它同时受 EN、A1、A0 控制。43.3 A/D 转换介绍 3.3.1 分辨率分辨率是用来表示 ADC 对于输入模拟信号的分辨能力,也即 ADC 输出的数字编码能反映多么微小的模拟信号变化。ADC 转换器的分辨率定义为满量程电压于在最小有效值之比值。例如,具有 12 位分辨率的 ADC 能够分辨出满量程的 1/4096,对于 10V 的满 量程能够分辨输入模拟量电压变化的最小值约为1.5mV.对 3 位半 A/D 转换器,满量程数据位 1999,其分辨率为 1/1999。显然ADC 数字 编码的位数越多,其分辨率越高 8。3.3.2 误差和精度误差包括量化误差、偏离误差、 线性度登。量化 误差是由于 ADC 的有限分辨率所引起的误差。偏离误差 时指输入信号为 0 是输出信号不为 0 的值,所以有时也称零值误差。线性度有时 也称非线性度,它是指 ADC 实际的输入/输出特性曲线与理想直线的最大偏差。精度通常也称转换精度,有绝对精度和相对精度之分。绝对精度是指为例产生某的数字码,所对应得模 拟信号值与实际值之差的最大值,它包括所有的误差。相对精度是绝对精度与满量程输入信号的百分比。它通常不包括能够被用户消除的误差。 对于线性编码的 ADC,相 对精度就是非 线性度,其 值为加减 1/2LSB.精度通常与分辨率密切相关,高精度的前提必须有高分辨率,当然单有高分辨率还不一定就可达到高精度。3.3.3 转换速率ADC 的转换速率就是能够重复进行数据转换的速度,即每秒转换的次数。有时也用完成的一次 A/D 转换所需要的时间来表示,称为转换时间。转换时间也就是转换速度的倒数。不同 转换方式的 ADC 其转换速率有很大不同。低的只有1 次/ 秒,高的可达百万次 /秒。3.3.4 A/D 转换的方法A/D 转换的实现方法有多种,随着大 规模集成电子技术的飞速发展,新型设计思想的 A/D 转换器就不断涌现。不同方法 实现的 A/D 转换器也就使用于不同的场合。比如说并行式 ADC 它的特点就是转换速度最快但是分辨率不高,适合高频采样的场合;逐次比较式 ADC 它的转换速度高,转换分辨率比较高,速度和分辨率能满足大部分要求,但常态干扰的抑制能力较差。适用于温度、 压力、流量、语音、电量等信号的采集。53.4 数据采样电路图 3 给出的是 1 个利用 4 片 ADG658 和 1 片 ADC0831 组成的 32 路数据采样电路。32 路模拟量输入的为毫伏级电压,经多路开关选取其中 1 路信号,送至 RC滤波电路,再经高精度运放 OP-07 放大然后送至 ADC0831 进行 A/D 转换,转换后的数据以串行输出。放大器的增益电压约为 100,ADC0831 的 Ref 基准电压为2.5V,由 MAX6034_25 提供,因而可测量输入信号的 电压范围为2.5V/100=25mV.假定输入信号来自 K 分度号热电偶,在输出电势为 0-25mV 时,对应的测量温度为 0C-600C。该数据采用电路如应用于热电偶的检测,还有三点需要考虑,一是零点补偿,二非线性校正,三是量程校正。零点补偿电路可加在放大器之前,也可通过其他传感器测量冷端温度,然后通过软件补偿。非线性校正一般可采用软件方法,在精度要求不高的情况下, 对K 分度热偶也可省略非线性校正。量程校正即 对放大器增益的校正,通过电路中的电位器微调增益。如希望 K 分度热电偶 600C 时的电势 24.902mV 与输出 2.5V对应,则电压增益应校正为 2.5/0.24902=100.39 另外可以通 过对 ADC8031 的 Ref经电阻衰减作为校正信号,从 输入通道中引入,通 过软 件自动校准,但此 时会减少 1 路输入。 P.0/T2EX678RS9xDINWALVCU()BYHQGOF+-inefuM6图 3 32 路数据采样电路采样电路控制信号通过光电隔离与单片机相连,输入信号由 P1.5-P1.0 控制,P1.6 和 P1.7 用于控制 A/D 转换,A/D 转换结果由 T1 引入。4 单片机介绍4.1 单片机的基本组成89C51 单片机包括一个:一个 8 位的 80C51 微处理器。片内 256 字节数据存储器 RAM/SFR,可以存放可以读/写的数据,如运算的中间结果以及预显示的数据等。片内 4KB 程序存储 器 Flash ROM,用以存放可以程序、一些原始数据和表格。4 个 8 位并行 I/O 端口 P0P3,每个端口既可以用作输入,也可以用于 输出。两个 16 位的定时器/计数器,每个定 时器/计数器都可以设置成计数方式,用以对外部进行计数,也可以设置成定时方式,并可以根据计数或定时的结果实现计算机控制。具有 5 个中断源、两个中断优先级的中断控制系统。一个全双工UART(通用异步接受发送器)的串行 I/O 口,用于 实现单 片机之间或单片机与PC 机之 间的串行通信。片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接,最高允许振荡频率 为 24MHz。89C51 单片机与 8051 相比,具有节电工作方式,即休闲方式及掉电 方式 9。以上各个部分是用静态逻辑来设计的,其工作频率可下降到 0Hz,并提供两种可用软件来选择省电方式空闲方式和掉电方式。在空闲方式中 CPU 停止工作,而 RAM、定时器/计数器、串行口和中断系统都继续工作。此时的电流可降到大约为正常工作方式的 15%。在掉电方式中,片内振荡器停止工作,由于 时钟被“冻结”,使一切功能都暂停,故只保存片内 RAM 中的内容,直到下一次硬件复位为止。4.2 单片机引脚及功能 各个引脚及其功能:VCC(40 脚):电源端,为+5V。Vss(20 脚): 接地端。XTAL2(18 脚) :接外部晶体和微 调电容的一端。在 89C51 片内它是振荡电路反向放大器的输出端,振荡电路的 频率就是晶体的固有频率。若须采用外部时钟电路,则该引脚悬空。要检查 89C51 的振荡电路是否正常工作,可用示波器 查看XTAL2 端是否有脉冲信号输出。XTAL1(19 脚):接外部晶体和微调电容的另一端。在片内,它是振荡电路反向放大器的输入端。在采用外部时钟时,该引脚输入外部时钟脉冲。RST(9 脚 ):RST 是复位信号输入端,高电平有效。定时器T0(3.4)和定时器 T1(3.5)是两个 16 位的定时器/计数器,都具有定时和事件计数功能,可用于定时控制、延时、对外部事件计数和检查 等场合。7P1:P1 口是一带有内部上拉 电阻的 8 位双向 I/O 口。P1 口的输出缓冲能接受或输出 4 个 TTL 逻辑门电 路。当对 P1 口写 1 时,它们被内部的上拉电阻拉升为高电平,此时可以作为输 入端使用。当作 为输入端使用时, P1 口因为内部存在上拉电阻,所以当外部被拉低 时会输出一个低电流(I IL)。P2:P2 是一带有内部上拉 电阻的 8 位双向的 I/O 端口。P2 口的输出缓冲能驱动 4 个 TTL 逻辑门电路。当向 P2 口写 1 时,通 过 内部上拉电阻把端口拉到高电平,此 时可以用作输入口。作为输入口,因 为内部存在上拉 电阻,某个引脚被外部信号拉低时会输出电流(I IL)。P2 口在访问外部程序存储器或 16 位地址的外部数据存储器(例如 MOVX DPTR)时,P2 口送出高 8 位地址数据。在这种情况下,P2 口使用 强大的内部上拉电阻功能当输出 1 时。当利用 8 位地址线访问外部数据存储器时(例 MOVX R1),P2 口输 出特殊功能寄存器的内容。当EPROM 编程或校验时,P2 口同时接收高 8 位地址和一些控制信号。P3 口:P3 是一带有内部上拉 电阻的 8 位双向的 I/O 端口。P3 口的输出缓冲能驱动 4 个 TTL 逻辑门电 路。当向 P3 口写 1 时,通过内部上拉电阻把端口拉到高电平,此 时可以用作输入口。作为输入口,因 为内部存在上拉 电阻,某个引脚被外部信号拉低时会输出电流(I IL)。P3 口同时具有的多种特殊功能,具体如下表所示:表 3 P3 口的第二功能端口引脚 第二功能P3.0 RXD (串行输入口)P3.1 TXD(串行输出口)P3.2 (外部中断 0) 0INTP3.3 (外部中断 1)P3.4 T0(定时器 0)P3.5 T1(定时器 1)P3.6 (外部数据存储器写选通)WRP3.7 (外部数据存储器读选通)D5 USB 接口电路设计USB 接口芯片采用南京沁恒公司的一种专用芯片 HC375。全速设备接口,兼容 USB V1.1 即插即用,外 围元器件只需要晶体和 电容。提供一对主端点和一对辅助端点,支持控制传输 、批量 传输、中断传输。具有省事的内置固件模式和灵活的外部固件模式。内置固件模式下屏蔽了相的关 USB 协议,自动完成标准8的 USB 枚举配置过程,完全不需要本地端控制器作任何 处理,简化了单片机的固件编程。支持 5V 电源电压 和 3.3V 电源电压, CH375 芯片还支持低功耗模式。CH375 芯片是 CH372 芯片的升级版, CH375 在 CH372 基础上增加了 USB 主机方式和串口通讯方式等功能,所以硬件功能更多,但是其它功能完全兼容CH372,可以直接使用 CH375 的 WDM 驱动程序和 DLL 动态链接库。采用SSOP-20 封装其功管脚能 见附录二。5.1 USB 芯片内部结构该芯片 CH375 芯片内部集成了 PLL 倍频器、 USB 接口 SIE、数据 缓冲区、被动并行接口、命令解释器、通用的固件程序等主要部件。PLL 倍频器用于将外部输入的 12MHz 时钟倍 频到 48MHz,作 为 USB 接口 SIE 时钟。 USB 接口 SIE 用于完成物理的 USB 数据接收和发送,自动处理位跟踪和同步、NRZI 编码和解码、位填充、并行数据与串行数据之间的转换、CRC 数据校验、事 务握手、出错重试、 USB 总线状态检测 等。数据缓冲区用于缓冲 USB 接口 SIE 收发的数据。被动 并行接口用于与外部 单片机交换数据。命令解释器用于分析并执行外部单片机提交的各种命令。通用的固件程序用于自动处理 USB 默认端点 0 的各种标准事务等。CH375 芯片内部物理端点:5.1.1 端点 0端点 0 的接收缓冲区和发送缓冲区各是 8 个字节。SETUP 事务和 OUT 事务使用同一个接收缓冲区,但是使用不同的事务应答方式。当 CH375 成功完成端点 0 的 SETUP 事务后, CH375 将自动设置端点 0 的接收器和发送器的同步触发标志为 1,然后才以中断方式通知外部单片机读取 SETUP 数据并处理。当CH375 成功完成端点 0 的 OUT 事务后,CH375 将自 动触发端点 0 的接收器的同步触发标志,由 0 触发为 1,由 1 触发为 0。当 CH375 成功完成端点 0 的 IN 事务后,CH375 将自动触发 端点 0 的发送器的同步触 发标志,由 0 触发为 1,由 1 触发为 0。对于控制读操作,由于 CH375 完成 SETUP 事务后自动设置同步触发标志为 1,所以默认情况下 CH375 发送的第一组数据是 DATA1,接着是DATA0,然后是 DATA1,以此类推。一般情况下,外部 单片机只需要准备好数据并发送,不必考虑同步触发标 志。由于 CH375 在完成端点 0 的 OUT 事务时不分析同步触发标志,不管数据是否同步都会以中断方式通知外部单片机,所以对于控制写操作,单片机可以通 过 GET_TOGGLE 命令确定当前 OUT 事务是否同步再作处理。SET_ENDP2 命令对 SETUP 的事务响 应方式没有影响。如果没有 释放 USB 缓冲区,则端点 0 的接收器对 SETUP 事务返回 NAK,如果已经释放USB 缓冲区,那么返回 ACK。如果在 SET_ENDP3 命令之后执行9WR_USB_DATA3 命令,那么端点 0 的发送器自动将事务响应方式设置为对 IN 事务返回 DATA,数据 长度根据 WR_USB_DATA3 命令确定。如果在WR_USB_DATA3 命令之后执行 SET_ENDP3 命令,那么端点 0 的发送器将保持数据不变,但是按 SET_ENDP3 命令设定的事务响应方式处理事务,如果设定的事务响应方式为对 IN 返回 DATA,那么发送长度将由 SET_ENDP3 命令重新确定。5.1.2 端点 1端点 1 的接收缓冲区和发送缓冲区各是 8 个字节。当 CH375 成功完成端点1 的 OUT 事务 后, CH375 将自动触发端点 1 的接收器的同步触发标志,由 0 触发为 1,由 1 触发为 0。当 CH375 成功完成端点 1 的 IN 事务后, CH375 将自动触发端点 1 的发送器的同步触发标志,由 0 触发为 1,由 1 触发为 0。CH375 在完成端点 1 的 OUT 事务时自动分析同步触发标志,如果数据不同步则不会以中断方式通知外部单片机,外部 单片机只会接收到数据同步的 OUT 事务中断。如果在 SET_ENDP5 命令之后 执行 WR_USB_DATA5 命令,那么端点 1 的发送器自动将事务响应方式设置为对 IN 事 务返回 DATA,数据长度根据WR_USB_DATA5 命令确定。如果在 WR_USB_DATA5 命令之后执行SET_ENDP5 命令,那么端点 1 的发送器将保持数据不变,但是按 SET_ENDP5命令设定的事务响应方式处理事务,如果设定的事务响应方式为对 IN 返回DATA,那么发送长度将由 SET_ENDP5 命令重新确定。 5.1.3 端点 2WR_USB_DATA 命令,那么端点 2 的发送器自动将事务响应方式设置为对 IN 事务返回 DATA,数据长度根据 WR_USB_DATA 命令确定。如果在WR_USB_DATA 命令之后执行 SET_ENDP 命令,那么端点 2 的发送器将保持数据和长度不变,但是按 SET_ENDP 命令设定的事务响应方式处理事务。端点 2 的接收缓冲区和发送缓冲区各是 64 个字节。当 CH375 成功完成端点 2 的 OUT事务后, CH375 将自动触 发端点 2 的接收器的同步触发标志,由 0 触发为 1,由1 触发为 0。当 CH375 成功完成端点 2 的 IN 事务后,CH375 将自动触发端点 2 的发送器的同步触发标志,由 0 触发为 1,由 1 触发为 0。CH375 在完成端点 2的 OUT 事务时 自动分析同步触发标志,如果数据不同步则不会以中断方式通知外部单片机,外部单片机只会接收到数据同步的 OUT 事务中断。如果在SET_ENDP7 命令之后执行105.1.4 外部固件参考流程在 CH375 中提供了外部固件模式下的单片机源程序,下述流程供外部 单片机处理 USB标准设备请求时参考。 单片机启动后,首先初始化 CH375 为使用外部固件的 USB 设备方式,然后设置中断。 当单 片机收到中断后,使用 GET_STATUS 命令 获取中断状态,分析处理如下:(1)如果是端点 2 或 1 的 OUT 成功,则使用 RD_USB_DATA 命令读取数据再通知主程序处理。(2) 如果是端点 2 或 1 的 IN 成功, 则使用 UNLOCK_USB 命令释放缓冲区再通知主程序继续。(3)如果是端点 0 的 SETUP 成功,则使用 RD_USB_DATA 命令读取数据,分析处理如下: 如果是 USB 请求 CLEAR_FEATURE,那么根据请求中的 FEATURE 以及端点号等分析处理,对于 ENDPOINT_HALT,可以使用 SET_ENDP 命令。 如果是 USB 请求 GET_DESCRIPTOR,那么使用 WR_USB_DATA3 命令返回描述符5.2 USB 芯片与单片机的接口电路CH375 通过被动并行接口电路可以方便地挂接到 89C51 单片机的系统总线图 4 CH375 的接口电路VC.uF7PUSB5p6YMHZTLmA+IOGNDREX8W/9x-#*11上,并且可以与多个外围器件共存。并口信号线包括 8 位双向数据总线 D7-DO、读选通输入 RD、写选通输入 WR、片 选输入 CS、中断输出 INT 及地址输入线AO。CH375 的 RD 和 WR 可以分别连接到单片机的读选通输出引脚和写选通输出引脚。INT 可以连接到单片机的中断输入引脚,中断请求是低电平有效。当CS、RD 及 AO 都为低电平时,CH375 中的数据通过 D7-DO 输出;当 CS 和 WR以及 AO 都为低电平时,D7-DO 上的数据被写入 CH375;当 CS、WR 都为低电平而 A1 为高电平时,D7-DO 上的数据被作为命令码写入 CH375。USB 电路图 4 在 USB 电源供给线中串接保险电阻或者自恢复保险丝 F1,一般 500mA 以下,最大 1A。串 联电感 L1 限制峰值电 流,感抗在 47uH 到 200uH之间,直流 电阻应该不超过 3 欧姆,尽量小些。在 USB 插座的电源上并联独立的储能电容 C16 缓解电压瞬时下降。在 USB 信号线 D+和 D-上串接共扼电感T1,减少信号干扰,在一些计算机的主板中可以见到。U13 为 P 监控电路,为单片机和 CH37X 提供可靠的上电复位。U12 为 ESD 保护器件/瞬变电压抑制器件,内部一般为高速二极管阵列,在频繁带电插拔 USB 设备的应用中和静电较强的环境下,建议使用此类器件保 护 CH37X 的 USB 信号引脚,型号为 CH412Z 或者 CH412A 或者 NUP4301MR6T1(引脚不同)等,注意不能选用内有电阻的器件。CH412 能够 承受 15KV 的 HBM 人体模型 ESD 冲击,具体设计可参考 CH412 芯片手册。如果不外加任何专用 ESD 保护器件,CH37X 也能够承受 4KV 左右的 HBM 冲击,CH374 能够承受 8KV 左右的 HBM 冲击。电容 C14 用于CH37X 电源退耦,实际电 路还应该在 U13 附近连 接 0.1uF 退耦电容。该图适用于 5V 电源电压,如果 VCC 为 3.3V,那么应该将 CH375 的 9 脚与 28 脚短路。图中 X1 是频率为 12MHz 的石英晶体,需要两个振 荡电容 C11 和 C12,也可以用 12MHz 有源晶振。5.3 USB 设备驱动程序设计USB 系统驱动程序的设计是基于 WDM(Windows driver model 驱动程序模型)。WDM 采用分层驱动程序模型,分 为较高级的 USB 设备驱动程序和较低级的 USB 函数层。其中 USB 函数层由两部分组成:较 高级的通用串行总线模块(USBD)和较低级的主控制器驱动程序模块(HCD) 11。在上述 USB 分层模块中,USB 函数层由 Windows98 提供,负责管理 USB设备驱动程序和 USB 控制器之间的通信,加 载及卸 载 USB 驱动程序,与 USB设备通用端点(endpoint)建立通信来执行设备配置、数据与 USB 协议框架和打包格式的双向转换任务。 目前 Windows98 提供了多种 USB 设备驱动程序,但并不针对数据采集设备,因此需用 DDK 开发工具 设计专用的 USB 设备驱动程序。在本设计中由四个12模块实现:初始化模块、即插即用管理模块、 电源管理模块以及 I/O 功能实现模块 12。 初始化模块提供一个入口函数 DriverEntry(),所有对各种 IRP(I/O Request Packet,IRP 请 求包) 的处理例程都在此入口函数中做出定义。即插即用管理模块实现 USB 设备的热拔插及动态配置。当硬件检测到 USB设备接入时,Windows98 查找响应的驱动程序,并调用它的 DriverEntry 例程,PnP(即插即用) 管理器调用驱动程序的 AddDevice 例程,告诉它添加了一个设备;在此处理过程中,驱动程序收到一个设备启动请求(IRP_MN_START_DEVICE)的 IRP。同理,当要拔除时, PnP 管理器会发出一个 设备删除请求(IRP_MN_REMOVE_DEVICE)的 IRP,由驱动程序 进行处理。通过对这些 PnP 请求的处理,可支持设备的热 插拔和即插即用功能。电源管理模块负责设备的挂起与唤醒。I/O 功能 实现模块完成 I/O 请求的大部分工作。若应用程序想对设备进行I/O 操作,它便使用 Windows API 函数,对 WIN32 子系统进行 WIN32 调用。此调用由 I/O 系统 服务接收并通知 I/O 管理器,I/O 管理器将此请求构造成一个合适的 I/O 请求包 (IRP)并把它传递给 USB 设备驱动程序, USB 设备驱动程序接收到这个 IRP 以后,根据 IRP 中包含的具体操作代码,构造相应的 USB 请求块并把此 URB(USB 请求块)放到一个新的 IRP 中,然后把此 IRP 传递到 USB 总线驱动程序,USB 总线驱动程序根据 IRP 中所含的 URB 执行相应的操作(如从 USB 设备读取数据等) ,并把操作 结果通过 IRP 返还给 USB 设备驱动程序。USB 设备驱动程序接收到此 IRP 后,将操作结果通过 IRP 返还给 I/O 管理器,最后 I/O 管理器将此 IRP 中操作 结果返 还给应用程序,至此应用程序对 USB 设备的一次 I/O操作完成。6 应用程序设计用户态的应用程序是数据采集系统的中心,其主要功能为:开启或关闭 USB设备、检测 USB 设备、 设置 USB 数据传输管道、设置 A/D 状态和数据采集端口、实时从 USB 接口采集数据、并分析数据 11。应用程序主流程图如图 5 所示。由于 HC375 提供的 FIFO 不超过 64 字节,当它存满后,HC375 自动将数据打包即时请求读入数据 ,由 SIE 自动发送数据包。另外,当系统启动 A/D 模块后,便会创建两个线程:采样线 程和存盘线程。采 样线程负责将采集据写到应用程序提交的内存;而存盘线程 负责给应用程序发送存盘消息。当应 用程序接收到此消息后,便从它提交的内存中读取数据并存盘。此处需要注意的是采样线程和存盘线程在读写应用程序提交的内存时要保持同步。首先是要启动 USB 设备,启动 USB 设备成后功检测 USB 设备。检测 USB13成功后设置设备参数,设置 USB 参数成功后启动 A/D 模块。启动 A/D 模块后等待数据请求上传数据。上传成功请求后看是否获得了有效的数据,如果没有获得有效数据就看下组数据有没有准备就绪。如果下组数据已经准备就绪,就回到请求上传数据。如果获得了有效的数据,就把获得的有效数据存储。存 储后就等待下组数据准备就绪。如果下组数据已经准备就绪再回到请求上传数据如此循环上传数据。图 5 应用程序主流程7 设备固件设计此处固件是指固化到 89C51E2PROM 中的程序,其主要功能是 : (1)控制 A/D转换器的采样。(2)控制芯片 CH375 接受并处理 USB 驱动程序的请求及应用程序的控制指令。现主要介绍 89C51USBCH375 接受并处理 USB 驱动程序的请求及应用程序的控制指令。现 主要介绍 89C51 系统如何控制 USB 控制器(USBCH375)与主机的通信 12。89C51 系统对 USB 控制器的操作是 严格按照 USB 协议 1.1 进行的,按照USB 协议 1.1 的规定,USB 传输方式分为 4 种:控制 传输,块传输,同步传输和中断传输。在 实际开发中使用了控制传输和块传输。控制传输主要用来完成主机对设备的各种控制操作,也就是用来实现位于主机上的 USB 总线驱动程序(USBD.SYS)以及编写的功能 驱动程序对设备的各种控制操作。 块传输主要用来完成主机和设备间的大批量数据传输以及对传输数据进行错误检测(若发生错误,启 动 USB 设备设置设备参数启动 A/D 模块请求上传数据包存储延迟至下数据包就绪Y 检测 USB 设备获得有效数据?报告数据丢失N N Y下组数据准 备就绪 ?14它支持“重传 ”功能)。89C51 系统控制 USB 控制器的工作 过程可以简单 地概括为:当 USB 控制器从 USB 总线检测到主机启 动的某一传输请求后,通过中断方式将此请求通知89C51 系统,89C51 系统通 过访问 USB 控制器的状 态寄存器和数据寄存器获得与此次传输有关的各种参数,并根据具体的传输参数,对 USB 控制器的控制寄存器和数据寄存器进行相应的操作,以完成主机的传输请求。8 远程数据采集系统设计传输距离是限制 USB 在工业现场应用的一个障碍,即使增加了中继或Hub,USB 传输 距离通常也不超过几十米,这对工业现场而言显然太短了。现在工业现场有大量采用 RS-485 传输数据的采集设备 ,其优点主要为传输距离可达到 1200 米以上,并且可以挂接多个设备,但 传输速度慢,且需要板卡支持,安装麻烦。但将 RS-485 与 USB 结合起来就可以优势互补,产生一种快速、可靠、低成本的远程数据采集系统。设计这样一个系统的关键设备是 RS-485USB 转换器。可以采用CH375+89C51+ MAX485 实现这一功能,整个系统的基本思想是:将传感器采集到的模拟量数字化以后,利用 RS-485 协议将数据上传,上述 RS-485USB 转换器在主机端接收 485 的数据并通过 USB 接口传输至主机进行处理,而主机向USB 发 送数据时,数据通过 RS-485USB 转换口转换为 485 协议向远端输送,从而能够实现远程数据的双向传输。由于 RS-485 通信是一种半双工通信,发送和接收共用同一物理信道。在任意时刻只允许一台单机处于发送状态。因此要求应答的单机必须在监听到总线上呼叫信号已经发送完毕,并且没有其它单机发出应答信号的情况下才能应答。半双工通信对主机和从机的发送和接收时序有严格的要求。如果在时序上配合不好,就会发生总线冲突,使整个系统的通信瘫痪,无法正常工作。要做到总线上的设备在时序上的严格配合,必须要遵从以下几项原则。(1)复位时,主从机都应该处于接收状态RE 和 DE 端相连为低电平时从机处于接收状态 ,在上 电复位时,由于硬件电路稳定需要一定的时间并且单片机各端口复位后处于高电平状态,这样就会使总线上各个分机处于发送状态,同时上电时各电路的不稳定,可能向总线发送信息。因此,如果用一根口线作发送和接收控制信号,应该将口线反向后接入 MAX485 的控制端,使上 电时 MAX485 处于接收状 态。(2) 制端 RE,E 的信号要求在 RS-232、S-422 等全双工通讯过程中,发送和接收信号分别在不同的物理链路上传输,发送端始终为发 送端,接收端始 终为接收端,不存在发送、接收控15制信号切换问题。在 RS-485 半双工通信中,由于 MAX485 的发送和接收都由同一器件完成,并且发送和接收使用同一物理链路,必须对控制信号进行切换。控制信号何时为高电平,何时为低电平一般以单片机的 TI,RI 信号作参考。发送时,检测 TI 是否建立起来,当 TI 为高电平后关闭发送功能转为接收功能;接收时,检测 RI 是否建立起来,当 RI 为高电平接收完毕转为发送功能。(3)发送控制信号在 时序上的要求总线上所连接的各单机的发送控制信号在时序上完全隔开。了保证发送和接收信号的完整和正确,免总线上信号的碰撞, 总线 的使用权必须进行分配才能避免竞争,接到总线上的单 机, 发送控制信号在时间 上要完全隔离。 总之,送和接收控制信号应该足够宽,保 证完整地接收一帧数据,意两个单机的发送控制信号在时间上完全分开,免总线 争端。9 结束语基于 USB 外设的应用目前在国内外处于高速发展阶段,利用 USB 进行数据采集在工业控制已得到成功应用,特别是随着 USB 协议 2.0 的推出,数据 传输速率高达 480Mbps,如此高的 传输速率必将使 USB 在数据采集中的优势更加体现出来,同时会使其在更广阔 的领域得到更深层次的应用。致谢在本次毕业设计过程当中,指导老师以及同学们都给予了很大的帮助支持,指导老师严谨的治学态度和务实的求知精神给我留下了很深的印象,他们鼓励我孜孜不倦,锐意进取,特别是在困难的时候,她有意识地培养我独立思考和解决问题的能力。俗话说“严

温馨提示

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

最新文档

评论

0/150

提交评论