董学亮基于USB总线和89C51单片机的数据采集系统设计.docx
- 文档编号:29732941
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:48
- 大小:142.35KB
董学亮基于USB总线和89C51单片机的数据采集系统设计.docx
《董学亮基于USB总线和89C51单片机的数据采集系统设计.docx》由会员分享,可在线阅读,更多相关《董学亮基于USB总线和89C51单片机的数据采集系统设计.docx(48页珍藏版)》请在冰豆网上搜索。
董学亮基于USB总线和89C51单片机的数据采集系统设计
河南科技学院
2009届本科毕业论文(设计)
论文题目:
基于USB总线和89C51单片机
的数据采集系统设计
学生姓名:
董学亮
所在院系:
机电学院
所学专业:
应用电子技术教育
导师姓名:
孔晓红张素君
完成时间:
2009年5月20日
摘要
本文介绍了基于USB总线的数据采集设备的开发法,包括数据采集硬件设计、USB总线的硬件设计,同时也简单的介绍了设备固件设计、基于USB的远程数据采集。
89C51通过对多路采集模块进行控制,选出一路通道的数据寄存在单片机,再通过USB芯片将89C51采集到的数据上传给上位机。
关键词:
数据采集,89C51,通用串行总线
BasedontheUSBbusand89C51single-chipdataacquisitionsystemdesign
Abstract
ThispaperintroducestheacquisitionbasedonUSBbus-baseddataacquisition,includingthedataacquisitionhardwaredesignandUSBbusofthehardwaredesign.AlsointroducesUSB-basedremotedataacquisitionsystemandfirmwaredesign.89C51selectsthewaydatastoragechannelinthesingle-chipbycontrollingmulti-channelmodule,andthenthedatacollectedby89C51uploadtothehostcomputer.throughtheUSBchips
Keyword:
DataAcquisition,89C51Single-chip,UniversalSerialBus
1引言
在工业生产和科学技术研究过程中,常常需要对各种数据进行采集,现在常用的数据采集方式是在PC机或工控机内部安装数据采集卡,如A/D卡、RS-422卡及RS-485卡。
采集卡不仅安装麻烦,易受机箱内其他电路的干扰,而且由于受计算机插槽数量和地址、中断资源的限制,不可能挂接很多设备。
本设计利用通用串行总线(UniversalSerialBus,简称USB)设计了基于USB总线的数据采集设备很好地解决以上这些冲突。
2总体方案设计
2.1设计思路
本设计主要包括三部分:
数据采集设计部分,单片机控制部分和USB设计部分。
数据采集由多路模拟开关、滤波采样保持、隔离放大、A/D转换、光电隔离器组成。
单片机采用AT89C51。
USB电路主要采用CH375芯片。
单片机再从地址寄存器中发出地址控制信号经光耦控制多路模拟开关。
多路模拟模拟开关根据地址控制信号选择一路信号进行滤波、放大、A/D转换后送至单片机的移位寄存器。
移位寄存器将采集到得数据转换为8位并行是传送到USB芯片的数据缓冲区中;一旦数据缓冲区存满,USB芯片自动将数据打包即时请求读入数据,然后89C51系统将数据从数据缓冲区中读出,由收发器通过数据线(D+、D-)送至主机。
2.2设计方框图
图1设计方框图
3数据采集设计
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。
图2ADG658/ADG65引脚图
表1ADG658功能表
A2
A1
A0
EN/
输出D
X
X
X
1
与输入断开
0
0
0
0
S1
0
0
1
0
S2
0
1
0
0
S3
0
1
1
0
S4
1
0
0
0
S5
1
0
1
0
S6
1
1
0
0
S7
1
1
1
0
S8
ADG658有一个使能端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]。
表2ADG659功能表
A1
A0
EN/
输出DA
输出DB
X
X
1
与输入断开
与输入断开
0
0
0
S1A
S1B
0
1
0
S2A
S2B
1
0
0
S3A
S3B
1
1
0
S4A
S4B
ADG659有一个使能端EN/和两个选择分配控制端A1、A0,S1A-S4A和DA、S1B-S4B和DB分别构成4:
1MUX,它同时受EN、A1、A0控制。
3.3A/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.4A/D转换的方法
A/D转换的实现方法有多种,随着大规模集成电子技术的飞速发展,新型设计思想的A/D转换器就不断涌现。
不同方法实现的A/D转换器也就使用于不同的场合。
比如说并行式ADC它的特点就是转换速度最快但是分辨率不高,适合高频采样的场合;逐次比较式ADC它的转换速度高,转换分辨率比较高,速度和分辨率能满足大部分要求,但常态干扰的抑制能力较差。
适用于温度、压力、流量、语音、电量等信号的采集。
3.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路输入。
图332路数据采样电路
采样电路控制信号通过光电隔离与单片机相连,输入信号由P1.5-P1.0控制,P1.6和P1.7用于控制A/D转换,A/D转换结果由T1引入。
4单片机介绍
4.1单片机的基本组成
89C51单片机包括一个:
一个8位的80C51微处理器。
片内256字节数据存储器RAM/SFR,可以存放可以读/写的数据,如运算的中间结果以及预显示的数据等。
片内4KB程序存储器FlashROM,用以存放可以程序、一些原始数据和表格。
4个8位并行I/O端口P0~P3,每个端口既可以用作输入,也可以用于输出。
两个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位的定时器/计数器,都具有定时和事件计数功能,可用于定时控制、延时、对外部事件计数和检查等场合。
P1:
P1口是一带有内部上拉电阻的8位双向I/O口。
P1口的输出缓冲能接受或输出4个TTL逻辑门电路。
当对P1口写1时,它们被内部的上拉电阻拉升为高电平,此时可以作为输入端使用。
当作为输入端使用时,P1口因为内部存在上拉电阻,所以当外部被拉低时会输出一个低电流(IIL)。
P2:
P2是一带有内部上拉电阻的8位双向的I/O端口。
P2口的输出缓冲能驱动4个TTL逻辑门电路。
当向P2口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。
作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL)。
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时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。
作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL)。
P3口同时具有的多种特殊功能,具体如下表所示:
表3P3口的第二功能
端口引脚
第二功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
(外部中断0)
P3.3
(外部中断1)
P3.4
T0(定时器0)
P3.5
T1(定时器1)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器读选通)
5USB接口电路设计
USB接口芯片采用南京沁恒公司的一种专用芯片HC375。
全速设备接口,兼容USBV1.1即插即用,外围元器件只需要晶体和电容。
提供一对主端点和一对辅助端点,支持控制传输、批量传输、中断传输。
具有省事的内置固件模式和灵活的外部固件模式。
内置固件模式下屏蔽了相的关USB协议,自动完成标准的USB枚举配置过程,完全不需要本地端控制器作任何处理,简化了单片机的固件编程。
支持5V电源电压和3.3V电源电压,CH375芯片还支持低功耗模式。
CH375芯片是CH372芯片的升级版,CH375在CH372基础上增加了USB主机方式和串口通讯方式等功能,所以硬件功能更多,但是其它功能完全兼容CH372,可以直接使用CH375的WDM驱动程序和DLL动态链接库。
采用SSOP-20封装其功管脚能见附录二。
5.1USB芯片内部结构
该芯片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命令之后执行WR_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端点2
WR_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命令之后执行
5.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.2USB芯片与单片机的接口电路
CH375通过被动并行接口电路可以方便地挂接到89C51单片机的系统总线
图4CH375的接口电路
上,并且可以与多个外围器件共存。
并口信号线包括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.3USB设备驱动程序设计
USB系统驱动程序的设计是基于WDM(Windowsdrivermodel驱动程序模型)。
WDM采用分层驱动程序模型,分为较高级的USB设备驱动程序和较低级的USB函数层。
其中USB函数层由两部分组成:
较高级的通用串行总线模块(USBD)和较低级的主控制器驱动程序模块(HCD)[11]。
在上述USB分层模块中,USB函数层由Windows98提供,负责管理USB设备驱动程序和USB控制器之
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 董学亮 基于 USB 总线 89 C51 单片机 数据 采集 系统 设计