电子巡更系统是智能楼宇中保安系统的一个子系统。保安巡更时, 需按指定的路线和时间, 依次到达各个巡更点进行巡更。在此系统中, 各巡更点设有信息钮扣, 保安用巡更机读取信息钮及当前时间。巡更完毕后, 将巡更机交至安保中心, 使之与计算机的USB 接口相连, 将存储在巡更机中的巡更数据输入计算机。所以, 通过它可以了解保安的巡更情况, 有效地管理和督促保安的工作。
1996 年,Intel、Microsoft、IBM 等七家公司共同推出USB1.0 通用串行接口标准,随后带USB 接口的产品陆续出现。 USB 接口具有速度快、支持热插拔和即插即用、易扩展、可提供总线供电等优点。
基于USB 接口的诸多优点和本设计中巡更机的特点, 我们在设计巡更系统时, 采用了USB 接口。该电子巡更系统具有使用方便、数据传输速度快、易扩展、充电方便、功耗低、性价比高等优点, 有效地解决了传统巡更机的不足。
1 电子巡更系统硬件设计
针对电子巡更系统的特点, 为了降低开发成本, 提高系统的性价比, 本设计采用MCU + USB 接口芯片的方案。MCU 采用Atmel 公司的AT89C52 单片机,可以设置成低功耗方式。USB 接口芯片采用Philips 公司的PDIUSBD12。带USB 接口的电子巡更系统硬件原理框图如图1 所示。其中DS1302 为高性能、低功耗、宽电压、带有R A M 实时时钟芯片, 它适合于作电池供电设备的系统时钟。这里MCU 通过它读取当前时间;24LC64 为低功耗、宽电压、64Kb、支持I2C 协议的串行CMOS 电可擦除程序存
储器EEPROM , 这里用于存储巡更点信息钮扣的ID值和读取信息钮扣时间数据。DS1990A 外形上是一种圆形不锈钢器件, 内部存有64 b 的二进制代码,以此代码作为巡更点的ID 值。DS1302 和24LC64 电压工作范围为2.5~5.5V,以I2C 总线和MCU 通信。DS1990A 以单总线(1-Wire总线) 和MCU 通信。 本系统中巡更机采用3.6V 可充电电池供电,充电电源由USB 接口的5 V 电源线提供, 电源电压监测电路如图2 所示。 其中AMS1117 是一个DC-DC 电压变换器, 其输入端为USB 接口的5V 电源线, 输出端为3.3V 电压,以此电压为3 . 6 V 电池充电。MAX9117 是一个带有1.245V 基准电压(Vref)的比较器。当电池电压下降到3 V 以下时, LED 点亮, 指示电量不足。
![](/Public/lazyload/gray.png)
图1巡更机硬件原理框图
PDIUSBD12 是一种性能优化的U S B 器件。它是一种与微控制器进行通信的高速通用并行接口, 它同时也支持本地D M A 传输。设计人员可以在各种不同类型的微控制器中选择出最合适的微控制器,而且不需要专门的开发设备。这种组件方式增强了系统开发的灵活性, 减少了开发时间、风险和费用, 是开发U S B 外设的一种快捷和经济的途径。
PDIUSBD12 符合USB1.1 规范,也符合大多数设备类规范, 如成像类、大容量存储类、通信类、打印类和人工输入设备等。因此,PDIUSBD12 非常适合做外围设备, 如打印机、扫描仪、外部大容量存储器(Z i p 驱动器) 和数码相机等的接口芯片。它使得当前使用SCSI 的系统可以立即降低成本。
2 电子巡更系统软件设计
2.1 巡更机固件程序
巡更机固件程序从功能上主要分为两部分。
① 信息钮扣的读取操作程序。这一部分实现MCU 及外围器件的初始化、读取信息钮以及对DS1302 和24LC64 的读写操作。调试时要注意I2C 总线的时序问题。巡更机固件程序采用C 语言编程。
信息钮读取操作程序流程如图3 所示。
② MCU 和USB 接口的通信程序。这一部分程序要实现将24LC64 中的数据经USB 接口读入到上位计算机中。U S B 接口芯片PDIUSBD12 的端点适用于不同类型的设备, 可通过命令配置为4 种不同的模式:模式0 (非同步传输)、模式1(同步输出传输)、模式2 (同步输入传输) 和模式3 ( 同步输入输出传输)。
PDIUSBD12 带有三个端点,即端点0、端点1 和端点2。这里仅列出模式0 (非同步传输) 时各端点的配置表格, 如表1 所列。
![](/Public/lazyload/gray.png)
本程序设计时, 使用PDIUSBD12 的端点1 和端点2 进行上位计算机与巡更机MCU 之间的命令和数据的传输。端点1和端点2 设置成模式0 , 其中端点1 进行命令的传输和应答, 端点2 用于数据的传输。端点1 接收上位计算机发送过来的8 字节的读指令, 指令正确回应后, 使用端点2 返回读成功数据。通信中所使用的端点情况如图4 所示(括号内为使用的端点号)。
PDIUSBD12 收到上位计算机的数据包时,就以中断的方式通知巡更机的MCU 。固件程序工作过程如下:当PDIUSBD12 从USB 收到一个数据包时,PDIUSBD12 就会对MCU 产生中断请求, MCU 立即响应中断。巡更机固件程序将数据包从PDIUSBD12内部缓冲区移到数据缓冲区, 并清零PDIUSBD12 的内部缓冲区, 以使之能接收新的数据包。在中断处理程序中, MCU 判断产生的中断类型, 并进行相应的处理。其中断程序流程如图5 所示。
![](/Public/lazyload/gray.png)
图2 巡更机电源电压监测电路
![](/Public/lazyload/gray.png)
图3 信息钮读取流程图
![](/Public/lazyload/gray.png)
图4 USB 通信框图
2.2 巡更机驱动程序
Windows98 和Windows2000 已经为一些USB 标准设备提供了驱动程序, 巡更机目前还不是标准的计算机外设, 所以必须针对巡更机的特点来编写驱动程序。本设计中巡更机的驱动程序是通过Win dows DDK 来开发的,它是Microsoft 公司提供的一个开发Windows驱动程序的工具, DDK 提供了编译驱动程序的环境。该巡更机的驱动程序是WDM 类型的, 采用VC++ 编程。
驱动程序中对USB 进行操作的请求都应调用系统例程, 将其转化为一个URB 结构, 即USB 请求块(USB Request Block),然后使用系统级的IRP 将其提交。该驱动程序由四个模块组成: 初始化模块、即插即用管理模块、电源管理模块和I/O 控制模块。
①初始化模块。DriverEntry 为驱动程序的入口处, 通过它来执行大量的初始化函数。
② 即插即用管理模块实现设备的热插拔和动态配置。驱动程序初始化完成后, 接着对设备进行初始化, 这主要是通过即插即用(PnP ) 管理器调用驱动程序中的AddDevice 和IRP_MJ_PNP 两个例程
来完成的。当驱动程序从PnP 管理器中收到IRP_MN_START_DEVICE 请求时, 驱动程序启动设备, 并且准备好处理I/O 操作。
③ 电源管理模块负责设备的唤醒和挂起。电源管理器(power manager)从整个系统的角度来管理电源, 所有与电源相关的IRP 都是由它发出的, 它发出的请求包可以指定一种新的电源状态以及查询或更改一种状态。支持电源管理的驱动程序, 在最大程度地帮助Windows 合理地利用资源方面起着重要作用。值得注意的是, 与电源相关的IRP 必须在同步操作上有非常严格的要求。例如,任何时候在一个PDO (物理设备对象) 中, 只能有一个IRP_MN_QUERY_POWER 或者IRP_MN_SET_POWER ;电源IRP 的处理要尽可能地快等。
④ I/ O 控制模块完成输入输出请求的大部分功能。设备的控制由设备控制例程(IRP_MJ_DEVICE_CONTROL)负责,主要是对设备进行一些操作命令的发送或者标志的读取。数据读写主要由IRP_MJ_READ 和IRP_MJ_WRITE 两个例程完成, 只需在AddDevice 中申请一个符号链接, 并且在StartDevice 中将此符号链接激活即可。
![](/Public/lazyload/gray.png)
图5 中断程序流程图
2.3 应用程序设计
在Win32 系统中, 每一个设备对象都抽象为文件, 此时的应用程序只需通过几条简单的文件操作API 函数, 就可以实现与驱动程序中某个设备的通信。在本设计中, 应用程序是该电子巡更系统的中心,采用Visual C++ 编程。其主要功能有:启动或关闭USB 设备、检测USB 设备、设置巡更参数。