基于USB总线通信数据采集器的设计与实现
时间:11-29
来源:互联网
点击:
1 引言
在变电站和工业现场的微机监控系统中,要通过通信方式采集许多远程现场数据。目前电力系统的通信、监控和数据采集系统的一体化采用的是一种分布式的通信结构,伴随着新设备、新技术的应用,传统的对终端单元的通信和数据采集方式的缺陷日益突出,如安装麻烦,工作效率较低,适应性和可扩展性较差。电力系统所需要的主站数据采集前端子系统,应该可以智能地、高效可靠地完成与终端单元的数据采集、通信和协议解析任务,并具有良好的经济性。
2 通信数据采集器的硬件结构
通用串行总线(Universal Serial Bus,简称USB)是1995年康柏、微软、IBM、NEC等公司为了解决传统总线的不足而推广的一种新型串行通信标准。该总线接口具有安装使用方便、高带宽、易扩展等优点,已经逐渐成为现代数据传输的发展趋势。本文提出的基于USB总线的智能通信数据采集器就是将RS232、RS485与传输距离短但高速、可靠易扩展的USB有机地结合起来,构成了多点、快速、可靠、低成本的远程数据采集系统,有效地解决了传统数据采集系统的缺陷。
3 通信数据采集器硬件电路的实现
通信数据采集器的硬件电路如图1所示。图1中微控制器(MCU)采用AT89C52,该控制器具有运算速度快、兼容MCS51指令集的特点,内部集成8K flash,性价比高。为了防止外界干扰的影响,MCU与下位机通讯的接口采用光耦隔离,控制接口的隔离采用TLP521-4,串行输入输出口RXD、TXD采用6N137隔离。
考虑到现在工业领域常用的总线有RS232、RS485等,采用MAXIM公司的接收发送器MAX232、MAX485实现电平转换。与外界的接口采用光电开关,通过上位机初始化设置总线类型来选择与外界设备通信的接口方式,从而有效地避免了设置值与实际操作中接法的不一致。
USB接口采用PHILIPS的USB控制芯片PDIUSBD12,该控制芯片能够实现微控制器的并行总线到USB总线的接口功能,而且编程方便,适用于多种微控制器,内部集成实现USB功能的PLL、SIE、FIFO模块,与普通的微控制器配合就可以实现功能完备的USB外设。
与USB的连接是通过1.5kΩ上拉电阻将D+(用于高速USB器件)置为高来实现的。1.5kΩ上拉电阻集成在PDIUSBD12内部,默认状态下不与Vcc相连。连接的建立通过外部/系统微控制器发出命令来实现。这就允许系统微控制器在决定与USB建立连接之前完成初始化时序。USB总线连接可以重新初始化而不需要拔出电缆。PDIUSBD12在连接可建立之前会通过EOT-N管脚检测USB VBUS是否可用。
在以12Mb/s的速率传输数据并且与MCU的并口相连接时,存储器管理单元(MMU)和集成RAM作为和USB之间速度差异的缓冲区,这就允许MCU以它自己的速率对USB信息包进行读写。对一个微控制器而言,PDIUSBD12看起来就象一个带8位数据总线和一个地址位(占用两个位置)的存储器件,PDIUSBD12支持多路复用和非复用的地址和数据总线。本设计中采取的是多路复用的地址和数据总线,PDIUSBD12的地址锁存ALE接AT89C52的ALE,在每一下降沿关闭地址信息锁存。
直接存储器寻址(DMA)允许在PDIUSBD12的主端点和本地RAM之间实现数据块的有效自主传输而不需要本地MCU的干预。要处理任何DMA传输,本地MCU从主机接受必要的SET-UP信息并对DMA控制器的传输模式、字节计数寄存器和地址计数器进行相应的编程。在PDIUSBDl2发出请求时开始传输,在字节计数器减少为零时终止。
4 通信数据采集器的软件设计
4.1 MCU的程序设计
通信数据采集器的软件包括微控制器AT89C52的通信采集控制软件和上位机的管理软件。AT89C52主要实现终端协议的识别,对终端设备的数据采集,协议的解析以及数据向上位机的转存。由于数据采集的全过程及协议解析不
占用上位机系统的CPU时间,数据通过USB接口向上位机传输的速度也非常快,这样就把上位机从通信瓶颈中解脱出来,从而可以充分利用其资源来处理其它事务。
AT89C52的控制程序分为初始化、主循环和中断服务3部分。初始化部分完成单片机和所有外围电路(包括PDIUSBD12)的初始化;主循环部分等待来自上位机的命令或来自终端设备的数据;中断服务程序完成相应的中断处理功能。下面列出了中断服务程序的处理过程:
usb_isr( )interrupt( )
{DISABLE
fn_usb_isr( );
ENABLE
}
void fn_usb_isr( )
{unsigned int i_st
bEPPflags.bits.in_isr=1;
i_st=D12_ReadInterruptRegister( );//读中断寄存器
if(i_st !=0)
{ if(i_stD12_INT_BUSRESET)
{ bus_reset( );//总线复位处理
bEPPflags.bits.bus_reset=1;
}
if(i_stD12_INT_EOT)
dma_eot( );//DMA结束处理
if(i_st Dl2_INT_SUSPENDCHANGE)
bEPPflags.bits.suspend=1;
if(i_st Dl2_INT_ENDPOIN)
ep0-txdone( );//控制端点0输入
if(i_stD12_INT_ENDPOOUT)
ep0-rxdone( );//控制端点0输出
if(i_stD12_INT_ENDPlIN)
epl_txdone( );//端点1输入
if(i_stD12_INT_ENDPlOUT)
epl_rxdone( );//端点1输出
if(i_stDl2_INT_ENDP2IN)
main_txdone( );//主端点2输入
if(i_stD12_INT_ENDP20UT)
main-rxdone( );//主端点2输出
}
bEPPflags.bits.in_isr=0;
}
设备安装完后准备运行前,操作人员可利用上位机管理软件提供的用户界面初始化一些系统参数,如总线类型、终端类型等。在执行对终端单元的智能识别时,MCU首先接收一个上位机客户服务软件下传的指令帧,经过确认是协议识别指令后,上传一个表示就绪的状态帧。然后,接收识别用的数据帧,经过检验,如果数据帧有错就返回相应的状态帧并等待上位机重新发出数据,如果数据正确则先返回状态帧,然后开始对终端单元的识别与数据采集。
对一个固定的终端而言,MCU发出握手信号,远方终端返回相应的信息,数据经RS232/RS485接收,经过MCU的协议解析后得到所需的纯数据,将其暂存入RAM62256中的指定地址;当上位机发出读取数据的命令后MCU将数据经PDIUSBD12传给上位机。
4.2 上位机的程序设计
从上位机来看,通信数据采集器为它的一个USB外设,因此上位机必须提供USB外设的驱动程序。上位机的管理软件包括客户服务程序和USB驱动程序。USB驱动程序(USBD)是驻留在上位机的为客户提供通用服务的软件实体,它管理主控制器上的一个或多个功能。它通过调用适当的主控制器驱动程序(HCD)将用户I/O请求包(IRP)中的数据转化为设备端点的数据,或通过回调适当的HCD将设备端点的数据转化为客户IRP中的数据。
客户服务程序是用VC++6.0编写的,主要完成数据的分析显示功能。MCU上传的数据信息经过相应的校验,如有误,则通知终端重传;如无误,则将校验后的信息转存人计算机指定的内存,并备份到相应的文档,供其他的客户服务程序使用。
USB驱动程序的编写往往是USB设备开发过程中最困难的,通常采用Windows DDK来实现。目前有许多软件厂商提供各种各样的驱动程序生成工具,如Computer ware的Driver Studio,Blue Waters的Driver Wizard等。本设计是采用Driver Studio软件生成的程序框架,添加了适当的用户代码,完成了适合于通信数据采集器的驱动程序的编写。
5 通信数据采集器与传统数据采集方式通信效率的比较
以采集欧姆龙公司的可编程逻辑控制器(PLC)为例,一次采集30个通道,每个通道16个开关量(即4个十六进制数),则有120个十六进制数需要采集和传输,加上通信协议中的其它位,一帧共有131个字符,每一个字符又按串行通信中的一帧11位来发送,则共有1441位ASCII码有待传输。若波特率设为9600b/s,则每采集一次需要用时150ms,在此期间每一帧的接收、效验工作都需CPU的介入。若以传统的方式进行数据的采集和通信,那么主机CPU在这段时间就被串行通信的事务占用而不能处理其它工作,这很耽误时间。而采用通信数据采集器代替主机来完成这一费时的工作后,数据的采集、传输以及协议的解析都不需占用主机的时间,解析后的纯数据经过PDIUS-BDl2上传也仅需很短时间即可完成(大约为0.12ms,PDIUSBD12在同步模式下的数据传输率为1Mb/s),通信效率比传统方式提高了很多倍,这样就把主机从通信瓶颈中解放出来,为主机节省了大量的时间去完成其它工作。
6 结论
本文提出的基于USB总线的智能通信数据采集器具有数据采集和通信的效率高,结构简单,运行可靠,使用方便等优点,在实际应用中取得了良好的效果。它适用于实时监控、数据采集等场合,也可以增强协议识别和协议解析功能,因而在有标准通信协议和规范化的数据格式而缺少详细技术资料的终端设备的通信中具有广泛的使用价值。
在变电站和工业现场的微机监控系统中,要通过通信方式采集许多远程现场数据。目前电力系统的通信、监控和数据采集系统的一体化采用的是一种分布式的通信结构,伴随着新设备、新技术的应用,传统的对终端单元的通信和数据采集方式的缺陷日益突出,如安装麻烦,工作效率较低,适应性和可扩展性较差。电力系统所需要的主站数据采集前端子系统,应该可以智能地、高效可靠地完成与终端单元的数据采集、通信和协议解析任务,并具有良好的经济性。
2 通信数据采集器的硬件结构
通用串行总线(Universal Serial Bus,简称USB)是1995年康柏、微软、IBM、NEC等公司为了解决传统总线的不足而推广的一种新型串行通信标准。该总线接口具有安装使用方便、高带宽、易扩展等优点,已经逐渐成为现代数据传输的发展趋势。本文提出的基于USB总线的智能通信数据采集器就是将RS232、RS485与传输距离短但高速、可靠易扩展的USB有机地结合起来,构成了多点、快速、可靠、低成本的远程数据采集系统,有效地解决了传统数据采集系统的缺陷。
3 通信数据采集器硬件电路的实现
通信数据采集器的硬件电路如图1所示。图1中微控制器(MCU)采用AT89C52,该控制器具有运算速度快、兼容MCS51指令集的特点,内部集成8K flash,性价比高。为了防止外界干扰的影响,MCU与下位机通讯的接口采用光耦隔离,控制接口的隔离采用TLP521-4,串行输入输出口RXD、TXD采用6N137隔离。
考虑到现在工业领域常用的总线有RS232、RS485等,采用MAXIM公司的接收发送器MAX232、MAX485实现电平转换。与外界的接口采用光电开关,通过上位机初始化设置总线类型来选择与外界设备通信的接口方式,从而有效地避免了设置值与实际操作中接法的不一致。
USB接口采用PHILIPS的USB控制芯片PDIUSBD12,该控制芯片能够实现微控制器的并行总线到USB总线的接口功能,而且编程方便,适用于多种微控制器,内部集成实现USB功能的PLL、SIE、FIFO模块,与普通的微控制器配合就可以实现功能完备的USB外设。
与USB的连接是通过1.5kΩ上拉电阻将D+(用于高速USB器件)置为高来实现的。1.5kΩ上拉电阻集成在PDIUSBD12内部,默认状态下不与Vcc相连。连接的建立通过外部/系统微控制器发出命令来实现。这就允许系统微控制器在决定与USB建立连接之前完成初始化时序。USB总线连接可以重新初始化而不需要拔出电缆。PDIUSBD12在连接可建立之前会通过EOT-N管脚检测USB VBUS是否可用。
在以12Mb/s的速率传输数据并且与MCU的并口相连接时,存储器管理单元(MMU)和集成RAM作为和USB之间速度差异的缓冲区,这就允许MCU以它自己的速率对USB信息包进行读写。对一个微控制器而言,PDIUSBD12看起来就象一个带8位数据总线和一个地址位(占用两个位置)的存储器件,PDIUSBD12支持多路复用和非复用的地址和数据总线。本设计中采取的是多路复用的地址和数据总线,PDIUSBD12的地址锁存ALE接AT89C52的ALE,在每一下降沿关闭地址信息锁存。
直接存储器寻址(DMA)允许在PDIUSBD12的主端点和本地RAM之间实现数据块的有效自主传输而不需要本地MCU的干预。要处理任何DMA传输,本地MCU从主机接受必要的SET-UP信息并对DMA控制器的传输模式、字节计数寄存器和地址计数器进行相应的编程。在PDIUSBDl2发出请求时开始传输,在字节计数器减少为零时终止。
4 通信数据采集器的软件设计
4.1 MCU的程序设计
通信数据采集器的软件包括微控制器AT89C52的通信采集控制软件和上位机的管理软件。AT89C52主要实现终端协议的识别,对终端设备的数据采集,协议的解析以及数据向上位机的转存。由于数据采集的全过程及协议解析不
占用上位机系统的CPU时间,数据通过USB接口向上位机传输的速度也非常快,这样就把上位机从通信瓶颈中解脱出来,从而可以充分利用其资源来处理其它事务。
AT89C52的控制程序分为初始化、主循环和中断服务3部分。初始化部分完成单片机和所有外围电路(包括PDIUSBD12)的初始化;主循环部分等待来自上位机的命令或来自终端设备的数据;中断服务程序完成相应的中断处理功能。下面列出了中断服务程序的处理过程:
usb_isr( )interrupt( )
{DISABLE
fn_usb_isr( );
ENABLE
}
void fn_usb_isr( )
{unsigned int i_st
bEPPflags.bits.in_isr=1;
i_st=D12_ReadInterruptRegister( );//读中断寄存器
if(i_st !=0)
{ if(i_stD12_INT_BUSRESET)
{ bus_reset( );//总线复位处理
bEPPflags.bits.bus_reset=1;
}
if(i_stD12_INT_EOT)
dma_eot( );//DMA结束处理
if(i_st Dl2_INT_SUSPENDCHANGE)
bEPPflags.bits.suspend=1;
if(i_st Dl2_INT_ENDPOIN)
ep0-txdone( );//控制端点0输入
if(i_stD12_INT_ENDPOOUT)
ep0-rxdone( );//控制端点0输出
if(i_stD12_INT_ENDPlIN)
epl_txdone( );//端点1输入
if(i_stD12_INT_ENDPlOUT)
epl_rxdone( );//端点1输出
if(i_stDl2_INT_ENDP2IN)
main_txdone( );//主端点2输入
if(i_stD12_INT_ENDP20UT)
main-rxdone( );//主端点2输出
}
bEPPflags.bits.in_isr=0;
}
设备安装完后准备运行前,操作人员可利用上位机管理软件提供的用户界面初始化一些系统参数,如总线类型、终端类型等。在执行对终端单元的智能识别时,MCU首先接收一个上位机客户服务软件下传的指令帧,经过确认是协议识别指令后,上传一个表示就绪的状态帧。然后,接收识别用的数据帧,经过检验,如果数据帧有错就返回相应的状态帧并等待上位机重新发出数据,如果数据正确则先返回状态帧,然后开始对终端单元的识别与数据采集。
对一个固定的终端而言,MCU发出握手信号,远方终端返回相应的信息,数据经RS232/RS485接收,经过MCU的协议解析后得到所需的纯数据,将其暂存入RAM62256中的指定地址;当上位机发出读取数据的命令后MCU将数据经PDIUSBD12传给上位机。
4.2 上位机的程序设计
从上位机来看,通信数据采集器为它的一个USB外设,因此上位机必须提供USB外设的驱动程序。上位机的管理软件包括客户服务程序和USB驱动程序。USB驱动程序(USBD)是驻留在上位机的为客户提供通用服务的软件实体,它管理主控制器上的一个或多个功能。它通过调用适当的主控制器驱动程序(HCD)将用户I/O请求包(IRP)中的数据转化为设备端点的数据,或通过回调适当的HCD将设备端点的数据转化为客户IRP中的数据。
客户服务程序是用VC++6.0编写的,主要完成数据的分析显示功能。MCU上传的数据信息经过相应的校验,如有误,则通知终端重传;如无误,则将校验后的信息转存人计算机指定的内存,并备份到相应的文档,供其他的客户服务程序使用。
USB驱动程序的编写往往是USB设备开发过程中最困难的,通常采用Windows DDK来实现。目前有许多软件厂商提供各种各样的驱动程序生成工具,如Computer ware的Driver Studio,Blue Waters的Driver Wizard等。本设计是采用Driver Studio软件生成的程序框架,添加了适当的用户代码,完成了适合于通信数据采集器的驱动程序的编写。
5 通信数据采集器与传统数据采集方式通信效率的比较
以采集欧姆龙公司的可编程逻辑控制器(PLC)为例,一次采集30个通道,每个通道16个开关量(即4个十六进制数),则有120个十六进制数需要采集和传输,加上通信协议中的其它位,一帧共有131个字符,每一个字符又按串行通信中的一帧11位来发送,则共有1441位ASCII码有待传输。若波特率设为9600b/s,则每采集一次需要用时150ms,在此期间每一帧的接收、效验工作都需CPU的介入。若以传统的方式进行数据的采集和通信,那么主机CPU在这段时间就被串行通信的事务占用而不能处理其它工作,这很耽误时间。而采用通信数据采集器代替主机来完成这一费时的工作后,数据的采集、传输以及协议的解析都不需占用主机的时间,解析后的纯数据经过PDIUS-BDl2上传也仅需很短时间即可完成(大约为0.12ms,PDIUSBD12在同步模式下的数据传输率为1Mb/s),通信效率比传统方式提高了很多倍,这样就把主机从通信瓶颈中解放出来,为主机节省了大量的时间去完成其它工作。
6 结论
本文提出的基于USB总线的智能通信数据采集器具有数据采集和通信的效率高,结构简单,运行可靠,使用方便等优点,在实际应用中取得了良好的效果。它适用于实时监控、数据采集等场合,也可以增强协议识别和协议解析功能,因而在有标准通信协议和规范化的数据格式而缺少详细技术资料的终端设备的通信中具有广泛的使用价值。
- USB总线概述(12-15)
- USB总线分析仪(12-15)
- usb总线驱动粗略过程(OHCI协议)(12-15)
- USB总线协议基础知识(12-15)
- USB总线正在同步相量丈量单位中的操纵(12-14)
- USB总线枚举过程(12-13)