USB总线在同步相量测量单元中的应用
发布时间:2015-07-07 09:29
摘 要 本文提出使用usb总线来进行下位机与上位机之间的数据通讯,以满足同步相量测量单元对数据传输高速率、低延时和高可靠性的要求。这里主要解决的是usb接口驱动程序的问题,通过编写上位机与下位机的硬件驱动程序,实现利用usb接口进行atmage128与上位微机之间数据传输的工作。
关键词 usb总线;同步相量测量单元;数据通讯;通讯接口
1 引言
同步相量测量单元(pmu)测量装置与上位计算机之间的通讯速率普遍较低,不能将测量数据及时传送到上位机进行分析处理,通讯接口已成为整个系统性能提高的一个瓶颈,因此有必要使用一种传输速率、时延、稳定性均能满足同步相量测量数据传输的通用接口。 采用usb接口作为上位机与下位机的通讯接口方式可以解决这些问题。利用usb接口中断传输速率大,时延小,差错率极低的特点来完成实时相量数据的传输。在usb接口的实际应用中,驱动程序的开发是最为困难的部分,由于usb接口诞生较晚,目前尚未成为多数单片微机的标准设备,还需要使用专门的接口芯片进行连接,用户必须编写相应的驱动程序将数据转化为符合usb系统协议的格式进行传输。 本文叙述了atmage128单片机使用pdiusbd12接口芯片完成usb接口数据通讯的过程。通过驱动程序完成对相关硬件设备的操作。该驱动程序完成usb接口的中断传输功能,用户调用通用命令就可以像使用一个普通的存储器一样使用usb接口芯片。该接口实现了各采样点的低延时上传功能,可以在1ms内完成一个工频周期全部采样值的传输。2 usb系统及其器件选择介绍
2.1 usb体系概述
usb(universal serial bus)是一种通用串行总线,为了实现整个计算机系统中总线的一致性,由compaq/ intel/micrsoft和nec等公司共同开发出的一种新的、快速的、双向的、同步传输的并可以热拔插的数据传输总线,简称usb总线。usb总线由以下四个主要部分构成:①主机和设备:是指usb系统中的主要构件。②物理构成:是指usb元件的连接方法。③逻辑构成:不同的usb元件所担当的角色和责任,以及从主机和设备的角度出发usb总线所呈现的结构。④客户软件与设备功能接口的关系。 usb总线有四种数据传输方式:①控制传输:主要用于主机把命令传给设备以及设备把状态返回给主机。②中断传输:用来支持那些偶然需要少量数据通信,但服务时间受限制的设备。③批量传输:用来传输大量的数据而没有周期和传输速率的设备上。批量传输方式并不能保证传输的速率,但可以保证传输的可靠性,当出现错误的时候会要求发送方重发。④同步传输:以一个恒定的速率进行传输。同步传输的方式的发送和接收方都必须保证传输速率的匹配,不然会造成数据的丢失。2.2 usb器件简介及应用
实现usb传输的方法主要有使用接口转换芯片和专用的接口芯片两种。前者就是将usb接口转换为标准的rs232接口使用,在操作方式和传输速度上与rs232接口完全相同。后者则可以实现真正的usb传输,使用usb1.1标准的接口芯片如pdiusbd12可以达到最高12mb/s的传输速率,使用usb2.0标准的接口芯片如isp1581则可以达到480mb/s的传输速率。如果要使用专用的usb接口芯片就必须编写相应的下位机与上位机驱动程序,由于usb传输不同于串口传输,usb传输的方式都是通过协议规定的数据包来完成的,所以下位机的软件必须实现对接口器件的硬件管理功能,及对协议发出的各种请求作出响应。而上位机驱动程序需完成对接口芯片的枚举、地址分配等工作。2.3 usb接口在本系统中的作用
usb接口在本系统中用来完成下位机与上位机的通讯,具体就是连接avr单片机与pc,将下位机采集的数据及一些相关信息传送到pc进行处理。传输的数据包括:①电压值(每周期采样64个点,12位数据)。②电流值(每周期采样64个点,12位数据)。③同步时间信号(取自gps)。 上位机在接收到这些信息后将会对其进行描点,故障录波,远程传送等处理。12位的电压电流数据都要经过变换,成为16位数据,占一个字节。每通道1秒钟传输的数据在6kb以上,多个通道合计,接口的传输速率至少要40kb/s,这一要求已经超过rs232接口所能提供的传输速率。如果使用can总线进行传输,则硬件设备较为复杂。综合比较后,采用pdiusbd12作为接口芯片进行数据传输是较合适的选择。采用塑料极小封装的pdiusbd12可以很容易安置在电路板上。而且对上位机的要求也较为宽松,只要有usb接口的计算机都可以作为本系统的上位机。3 atmage128单片机
3.1 atmage128单片机介绍
atmage128单片机是由atmel公司出品的一款高性能低功耗的8位微型控制器,最高时钟频率可以达16mhz。片内集成有容量为128kb的闪存作为程序存储器,4kb的eeprom,以及4kb的片内存储器,最高可支持64kb的片外存储器。3.2 开发过程简述
tmage128的开发一般是由atmel公司提供的免费仿真工具avrstudio完成的,与常用的51单片机略有不同,使用c语言进行开发的时候必须使用第三方编译器对源代码进行编译后才能在仿真环境下运行。本次采用的是icc作为编译器,本文所有的单片机程序都在此环境下运行调试。usb接口器件采用总线控制方式,数据传输形式采用中断传输。usb接口器件在使用上与一个普通的外部存储器相同,所有的控制与数据传输都必须对atmage128中相应的寄存器进行读写操作才能完成。4 usb驱动程序mcu部分
mcu即设备方控制器,可以是各类型单片机或者是pc,它们的驱动程序在结构上是类似的,而具体的代码,由于使用的系统环境不同,存在较大差异,下面就详细说明以atmage128单片机作为设备方控制器的usb驱动程序结构以及具体实现的代码。4.1 程序整体结构
对于cpu而言,pdiusbd12芯片与一个外部存储器完全相同,cpu通过总线控制的方式对pdiusbd12进行操作。usb接口的传输并不会占用许多cpu资源,cpu可以执行前台操作,而usb接口传输的工作则在后台完成,两者之间通过中断服务程序连接。当pdiusbd12 从usb 收到一个数据包,那么就对cpu 产生一个中断请求,cpu 立即响应中断。在isr中固件将数据包从pdiusbd12 内部缓冲区移到循环数据缓冲区,并在随后清零pdiusbd12 的内部缓冲区以使能接收新的数据包cpu 可以继续它当前的前台任务直到完成,然后返回到主循环检查循环缓冲区内是否有新的数据,并开始其它的前台任务。无论是上传或者下载数据都是对循环缓冲区内的数据进行处理,主循环只要检查循环缓冲区内是否有要处理的新数据。程序整体结构框图如图1所示。 各模块分工如下: (1)硬件提取层:对单片机的i/o口、数据总线等硬件接口进行操作。 (2)pdiusbd12命令接口:对pdiusbd12器件进行操作的模块子程序集。 (3)中断服务程序:当pdiusbd12向单片机发出中断请求时,读取pdiusbd12的中断传输来的数据,并进行相关处理。 (4)标准请求处理程序:对usb的标准设备请求进行处理。 (5)厂商请求处理程序:对用户添加的厂商请求进行处理。 (6)主循环程序:发送usb请求、处理usb总线事件和用户功能处理等。 图1 usb驱动mcu整体结构图4.2 硬件提取层相关程序
硬件提取层执行对单片机i/o口、数据总线等的操作,包含向pdiusbd12发送数据或命令的子程序及从pdiusbd12读取数据的子程序,该部分代码需对地址总线和数据总线进行直接操作。pdiusbd12的任何操作都是由命令指令和数据指令组合完成的,通过改变a0引脚的电平就可以完成命令模式/数据模式的切换。4.3 命令接口
该部分是由一系列命令接口子程序构成的,包含了所有pdiusbd12给出的访问功能接口的命令。在命令接口中调用了硬件提取层中的子程序。pdiusbd12的所有功能都必须由类似的方法完成,先发送一条命令,然后写该命令的具体参数。有的命令参数是多个字节的,如设置模式命令,此时就必须调用两次写数据线的指令。命令接口程序的编写格式相对固定,按照pdiusbd12说明书中给出的命令汇总表依次编写即可。4.4 中断服务程序
中断服务程序代码处理由pdiusbd12产生的中断,它将数据从pdiusbd12内部的缓冲区内取出,并建立正确的标志,通知主循环进行处理。当pdiusbd12向单片机发出中断请求后,单片机调用读取中断寄存器的标准命令接口子程序d12_readinterruptregister( )来决定中断源,然后跳转到相应的中断服务子程序进行处理。中断服务程序从pdiusbd12收集数据,而主循环程序对数据进行处理。当中断服务程序收集到足够的数据时,它通知主程序已经做好准备等待处理。例如在发送数据包阶段建立包时,中断服务程序将建立包和数据都存入缓冲区内,然后将setup_packet标志送到主循环,这样主循环就可以节省不必要的服务时间。4.5 总线复位和挂起
当接收到总线复位或挂起的请求时,中断服务程序将bus_set或suspends标志位置位,然后退出。 控制传输总是由建立阶段开始,之后为可选的数据阶段,然后结束于状态阶段。单片机需通过选择控制输出端点来提取建立包的内容来决定端点是为满还是为空。如果控制端点是为满,单片机将从缓冲区内读出内容并将其存入存储区。之后,单片机将从存储区使主设备请求生效。如果是一个有效的请求,单片机需向控制端点发送应答建立命令,以重新使能下一个建立阶段。接下来单片机需要证实传输是控制读还是写,这可以通过建立包重定向的请求类型位来实现。建立阶段结束后,主机就会执行数据阶段。pdiusbd12等待接收控制输入包。单片机首先需要读取最后处理状态寄存器清零中断标志位。确认pdiusbd12处于传输模式后,进行数据包的发送。 当下一个控制输入标志来到时,单片机将确定剩余的字节是否为零。如果已经没有数据要发送,单片机需要发送一个空的包以指示主机数据已经发送完毕。如果建立包的为获得描述符请求,那么建立包中的控制传输将指示此包为控制写类型。在执行完获得描述符请求过程后,单片机处于等待数据阶段。主机发送一个控制输出的标志,单片机从pdiusbd12缓冲区内减去数据。此时单片机确认pdiusbd12是否处于usb接收模式,然后单片机通过检查选择控制输出端点确认缓冲区是否已满,并将数据从缓冲区内读出。