IP视频监控系统中云台控制模块的设计与实现[日期:2008-6-26]来源:电子技术应用作者:权立伟石江宏薛财锋[字体:大中小]随着多媒体技术和网络通信技术的迅速发展,视频监控技术在电力系统、电信机房、工厂、城市交通、水利系统、小区治安等领域得到越来越广泛的应用。而DSP技术的迅速发展,尤其是视频专用处理DSP芯片的发展,大大推动了多媒体技术的应用。Equator公司在这一领域始终走在最前沿,其推出的MAP-CA、BSP-15等专用视频处理DSP芯片,以其强大的处理能力和针对视频处理的优化性能,在业界取得了很大的成功。同时,Equator公司推出的Dolphin、Tetra、Shark等以其专用视频处理DSP为核心的嵌入式开发平台,也成为诸多视频处理设备的核心。1系统总体框架Tetra开发板系统总体框架如图1所示,BSP-15的数据总线和地址总线与SDRAM、Flash以及视频输入输出芯片SAA7113和SAA7121相连,进行数据交换。另外,BSP-15作为PCI总线的主设备,控制南桥芯片VT82C686B和网络芯片RTL8139C,通过南桥芯片扩展IDE接口、RS-232串口、USB接口、ISA总线等外扩接口。音频输入输出芯片通过I2S总线控制。由于I/O口有限,因此其他控制接口和数据交互都使用I2C总线来完成,包括EEPROM、SAA7113和SAA7112和87LPC764的控制。2系统实现2.1云台控制硬件结构框图及工作原理云台控制硬件框图如图2所示。BSP-15首先将云台控制信息通过I2C总线发送给87LPC764,87LPC764将控制码解释后,通过串行口转发到RS485接口芯片MAX487,从而将控制码通过RS485接口发送给云台摄像机。云台摄像机接收到控制码时,根据要求进行相应的云台操作。另外,87LPC764连接了PCI总线上的一条中断线,可向BSP-15申请中断来通知BSP-15云台控制状态,以及向BSP-15申请发送其他数据。2.1.187LPC76487LPC764是PHILIPS公司生产的、以加速的80C51为内核的高性能、高可靠性和低价格的工业级通用型嵌入式微处理器。内含4KBOPT程序代码控制器,128字节的用户RAM存储器,32字节用户代码存储器。具有全双工UART,内带I2C总线控制。还具有可由外部晶振或内部振荡源驱动的内部看门狗定时器,其溢出时间具有8级时间选择。2.1.2云台摄像机云台摄像机的云台是一种安装在摄像机支撑物上的工作台,用于摄像机与支撑物的联结,云台具有水平和垂直运动的功能。一般云台摄像机内置解码器,遵循云台控制标准协议,根据外部控制信号,可以完成指定速度的水平、垂直运动,光圈、焦距调节,摄像机关闭、开启等功能。2.1.3云台控制协议当前比较通用的云台控制协议有派尔高公司推出的PELCO-D、PELCO-P协议,另外还有三星公司、Sony公司等公司针对其专用云台制定的云台协议。在开发过程中,考虑到对不同协议的云台摄像头的兼容,将云台控制设计为可兼容各类协议的通用控制模块。可根据不同云台摄像机更新监控系统的云台协议,实现对各类云台的支持。在实际应用中,PELCO-P协议是当前业内最为流行的云台控制协议,PELCO-P协议一般采用RS-485接口进行传输,波特率一般在1200~9600bps之间,1位起始位,1位停止位,8位数据位,无校验位。其数据传输格式如表1所示。其中地址码用于区分不同的云台摄像机,而四个数据字节则包含了本条云台控制命令的全部信息,具体数据含义如表2所示。2.287LPC764控制程序设计87LPC764所完成的功能很多,包括全局上电复位和电源控制、底板LED控制、看门狗定时控制、外部报警。另外在需要的情况下,可以扩展I/O口,其内部自带的EEPROM也可记录各类信息。在实际设计中,由于原版87LPC764的程序使用汇编编写,很多功能和实际要求不相符,因此在本项目中,将87LPC764的全部代码用C语言重新改写,修改和加入了针对本项目所需的功能。主程序部分判断与BSP-15交互的信息,程序流程图如图3所示。图中接收和发送都是相对BSP-15而言的。87LPC764等待BSP-15的指令,一旦收到指令则执行,如果收到外部信号,则申请中断,等待BSP-15读取相应信息。其中I2C读写、串口读写、内部定时器均采用中断方式。这里给出的流程图仅为部分流程,与云台控制无关的部分程序,不做详细描述。2.3VxWorks中87LPC764驱动程序设计驱动程序部分主要是在VxWorks操作系统下,完成通过I2C与87LPC764交互,作为中介解释并传递由上层应用程序发送给87LPC764的命令,以及将87LPC764反馈的各种信息告知上层应用程序。驱动程序流程如图4所示。首先随系统启动初始化驱动程序中各部分的变量,将中断函数与指定的PCI中断连接,创建一个消息队列,然后开始进入阻塞式的等待状态。当87LPC764向BSP-15申请中断时,跳入中断函数入口,通过I2C总线从87LPC764读取一个字节的数据,并判断是否需要继续读取。读取完成后,中断函数将数据发送到消息队列中,然后跳出。驱动接收到消息队列中的数据时,将向上层应用程序报告,并转由上层应用程序处理。另外,驱动程序中同样提供了所有有关87LPC764的操作的独立函数,可直接由上层程序调用,由驱动程序通过I2C给87LPC764发送操作命令。2.4云台协议部分程序设计云台协议程序主要完成四个部分的内容:云台协议文件解析、Flash烧写、云台模块初始化、提供Web服务端控制接口。图5给出了协议文件解析和模块初始化的简单流程,下面对这四个部分进行具体说明:(1)云台协议文件的解析。这一部分主要是完成将上层Web服务端通过网络接收的云台协议文件进行转换。由于云台协议文件是文本文件,按照一定格式书写,因此文件解析主要是将文本中有效部分的ASCII码转换为十六进制的云台控制码。并且考虑到协议兼容性问题,解析过程中要标识很多特征位,如地址码、旋转速度码在码片中的位置、校验字节的位置及计算方法以及控制码的码长等。(2)Flash烧写功能。在云台协议文件解析后,将已解析后的云台协议调用底层Flash烧写驱动烧入Flash存储器,并且在需要的时候将协议从Flash存储器中读出。(3)程序初始化。在每次开机后,初始化并设置好所需变量,将云台协议数据按照一定格式存放在内存中。考虑到可能要同时控制多个不同协议的云台摄像机,因此实际项目中最多可同时支持四种不同的云台协议。相应地,在初始化时要调用Flash读取函数,从Flash中将需要的一个或多个协议读出,并存放在内存中供模块使用;(4)云台接口函数。根据Web服务端要求,当Web服务层调用时,将指定的云台标准协议进行解释,包括设置要控制的云台地址码、转动速度,计算出校验码,然后调用底层驱动程序将控制码发送给87LPC764,并在需要的情况下告知87LPC764应使用何种波特率。本文从总体上介绍了基于Tetra硬件开发平台的网络视频监控系统中云台摄像机控制模块的设计与实现。项目中云台模块对各种类型云台的兼容能力,以及可同时监控多种不同类型云台摄像机,是本产品的一个亮点。本项目所开发的视频监控系统已经投入市场,以其完善的功能得到用户的认可。云台是通过云台解码器与计算机串口或并口相连的,程序是通过向云台解码器发送指令来实现云台控制的。这里的指令是由云台控制协议确定的。不同的厂家,云台控制协议也不尽相同。以Pelco-D2400为例,其命令格式由7个字节构成。第一个字节为同步字节,始终为FFH,第2个字节为地址码,也就是摄像头的逻辑地址号,范围在00H~FFH之间,是在安装摄像头时手动设置的,该值一定要正确,否则命令不会执行。第3、4个字节表示指令码,即执行哪项操作,例如,向上、下、左、右移动摄像头等。第5、6个字节表示数据码,用于指定摄像头的水平、垂直方向移动速度。第7个字节为校验码,它是由第2、3、4、5、6个字节数据之和与100H取模获得的。此外,在执行某一命令后,应执行停止命令,否则命令执行的动作会一直执行。例如,将摄像头向上移动。如果不发送停止命令,摄像头就会一直向上移动。在Pelco-D2400协议的停止命令中,第一个字节为FFH,第2个字节为地址码,第3、4、5、6个字节为00F,第7个字节为第2个字节数据与100H的模。只要知道了控制命令,就可以通过向串口发送这些命令来控制云台了。例如,下面的代码实现了云台的向下移动。classPelcoD{privatestaticreadonlybyteSTX=0xFF;//同步字节privateconstbyteTiltUp=0x08;//上privateconstbyteTiltDown=0x10;//下#region镜头上下移动的速度privateconstbyteTiltSpeedMin=0x00;//停止privateconstbyteTiltSpeedMax=0x3F;//最高速#endregionpublicenumTilt{Up=TiltUp,Down=TiltDown}//上下控制//上下控制publicbyte[]CameraTilt(uintdeviceAddress,Tiltaction,uintspeed){if(speedTiltSpeedMin)speed=TiltSpeedMin;if(speedTiltSpeedMax)speed=TiltSpeedMax;returnMessage.GetMessage(deviceAddress,0x00,(byte)action,0x00,(byte)speed);}publicstructMessage{publicstaticbyteAddress;publicstaticbyteCheckSum;publicstaticbyteCommand1,Command2,Data1,Data2;publicstaticbyte[]GetMessage(uintaddress,bytecommand1,bytecommand2,bytedata1,bytedata2){if(address1&address256)thrownewException(PelcoD协议只支持设备);Address=Byte.Parse((address).ToString());Data1=data1;Data2=data2;Command1=command1;Command2=command2;CheckSum=(byte)(STX^Address^Command1^Command2^Data1^Data2);returnnewbyte[]{STX,Address,Command1,Command2,Data1,Data2,CheckSum};}}publicpartialclassfrmMain:Form{PelcoDpelcod=newPelcoD();SerialPortserialPort=newSerialPort(COM1,2400,Parity.None,8);byteaddressin=Byte.Parse(Convert.ToString(0x01));bytespeedin=Byte.Parse(Convert.ToString(0xff));byte[]messagesend;//方向控制——下privatevoidbtnDown_MouseDown(objectsender,MouseEventArgse){messagesend=pelcod.CameraTilt(addressin,PelcoD.Tilt.Down,speedin);serialPort.Open();serialPort.Write(messagesend,0,7);serialPort.Close();}}云台镜头控制MSP430微控制器电视监控系统是一种典型的分布式计算机信号