当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]针对目前嵌入式视频监控系统中,云台控制模块开发周期长且运行不稳定的问题,提出了基于简单网络管理协议(SNMP)的远程云台控制方案。该方案运用Net-SNMP作为开发工具,通过扩展MIB库在嵌入式系统上移植SNMP代理,成功地实现了IP网上云台的远程控制。实验表明,该方案不仅稳定可靠而且开发周期短,已被运用于某单位的视频监控系统中。

随着多媒体技术和网络通信技术的迅速发展,视频监控技术在国民生产生活的各个领域得到了广泛应用。而云台控制系统的出现为增加视频监控系统的监控范围、提高摄像头的监控效率起到了巨大作用。对于云台控制系统,参考文献[1]提出了基于DSP芯片的云台控制系统,参考文献[2]提出了在Visual C++编程中利用ActiveX控件实现云台控制的方案。但是,这些方案由于没有现成的开发工具支持,开发周期长、成本高且开发出来的系统在网络环境不佳时,运行不够稳定。针对这种情况,以及ARM11微处理器具有优异的多媒体数据处理能力和高度智能化的特点,本文提出了运用Net-SNMP开发工具,通过在嵌入式ARM11平台上移植SNMP代理的方法实现IP网上云台的远程控制方案。

1 基于ARM11的嵌入式视频监控系统

如图1所示为典型的嵌入式视频监控系统[3],S3C6410处理器通过控制外围设备进行视频采集,并将压缩编码后的信号发送给监控终端。同时,嵌入式处理器通过网卡接收监控终端发送过来的云台控制命令,按照云台控制协议将其解码并通过RS485端口发送给云台,实现对云台的控制功能。


2 系统硬件设计

基于SNMP和ARM11的云台控制系统的硬件部分由主控制板模块、云台模块和传输模块组成。

系统硬件部分主要包括:微处理器及存储电路模块、电源时钟模块、网卡模块和外围接口电路模块等[3]。DM9000网卡用于从IP网接收远程控制命令;RS485串口用于微处理器与云台之间的通信。Flash用于存储各种固化程序;SDRAM用于系统运行时程序的存取; 串口RS232用于打印输出信息和程序的调试。

2.1 主控制板模块

主控制板模块(即核心控制器)S3C6410是三星公司基于ARM1176JZF-S内核构建的高性能多媒体应用微处理器,由于其内部集成了硬件编解码单元MFC,使其在多媒体信号处理上大大优于早期的同类产品。S3C6410内部结构复杂,其内部集成有1个LCD控制器、SDRAM控制器、NAND Flash控制器、I2C总线接口和看门狗计数器等。完善的外设和667 MHz的运行频率,使S3C6410处理器很适用于智能控制系统的开发。

2.2 云台模块

云台是一种安装在摄像机支撑物上的工作台,用于支撑摄像机以实现水平和垂直运动等辅助功能。一般云台摄像机内置有解码器,遵循云台控制标准协议,根据外部控制信号可以对其实现控制。本系统采用3030WQ型云台和PELCO-D云台协议。其云台协议如表1所示,系统硬件架构如图2所示。

云台数据格式为:1位起始位、8位数据位、1位停止位,无效验位。波特率为2 400 B/s。
云台的停止、左、右、上、下命令分别对应:0xff,0x01,0x00,0x00,0x00,0x00,0x01;0xff,0x01,0x00,0x04,
0xff,0x00,0x04;0xff,0x01,0x00,0x02,0xff,0x00,0x02;0xff,0x01,0x00,0x08,0x00,0xff,0x08;0xff,0x01,0x00,0x10,
0x00,0xff,0x10(这里的地址码均设为0x01)。

3 软件设计

软件设计包括嵌入式系统构建和应用软件两部分[4]。嵌入式系统部分按照华恒科技S3C6410用户手册构建,其包括了引导程序(Bootloader)、Linux内核、驱动等,软件框图如图3所示。

Bootloader、Linux内核和设备驱动程序形成基本的嵌入式运行环境,应用层软件snmpd为SNMP代理软件,负责接收、解码控制命令,并将解码后的命令通过串口RS485发送到云台模块,实现对云台运动方向的控制。

3.1 Linux2.6.21操作系统定制

本系统采用开放源代码的嵌入式Linux2.6.21作为操作系统。首先对Linux内核进行裁剪,保留本系统所需的NAND Sevice Support、UDP协议以及串口支持、套接字、NFS文件系统等。裁剪包括并口支持、USB口支持、WLAN协议支持、SD卡支持等驱动模块。将裁剪后的内核通过交叉编译器编译即可得到ARM处理器能够运行的文件。然后再将镜像文件通过Bootloader下载到目标板的Dataflash中。

3.2 应用程序snmpd的开发

3.2.1 Agent开发环境的建立

由于嵌入式Linux系统的资源有限,不可能在其上运行开发和调试工具,因此,采用“宿主机即目标机”的开发形式。宿主机和目标机通过串口与网口连接。宿主机是安装了Linux系统的PC机,在宿主机上建立交叉编译环境,程序在宿主机上进行编译,然后通过交叉编译工具得到在嵌入式操作系统上运行的可执行文件。本系统采用Linux2.6.21版本作为PC机的操作系统,编译器选用Arm-linux-gcc3.4.1版本,以Net-snmp v5.4.2作为开发工具,目标机CPU为ARM11微处理器。

3.2.2 MIB库的扩展

开发环境建立后,就可以进行SNMP代理软件的开发。依据Net-SNMP开发文档,要在SNMP代理中实现自定义的功能(云台控制)就需要对其MIB库进行相应的扩展。MIB文件的编写要遵循SNMP协议中SMI部分的要求[5-6]。下面是本文编写的实现云台控制功能的MIB库文件,本文将其命名为S3C6410.txt。

S3C6410-MIB DEFINITIONS ::= BEGIN
IMPORTS
TimeTicksFROM SNMPv2-SMI
enterprisesFROM SNMPv2-SMI
OBJECT-GROUP,NOTIFICATION-GROUP FROM SNMPv2-CONF
OBJECT-TYPE, Integer32, Gauge32, MODULE-IDENTITY
FROM SNMPv2-SMI
TEXTUAL-CONVENTION FROM SNMPv2-TC;
S3C6410 OBJECT IDENTIFIER::={ enterprises 9000 }
DIRECTIONOBJECT-TYPE
SYNTAXInteger32
MAX-ACCESSread-write
STATUScurrent
DESCRIPTION
"DIRECTION controll the directions of the camera.
The number ‘0‘ equals the command ‘stop‘
The number ‘1‘ equals the command ‘left‘
The number ‘2‘ equals the command ‘right‘
The number ‘3‘ equals the command ‘up‘
The number ‘4‘ equals the command ‘down‘
The other number equals the number ‘0‘
"
DEFVAL { 0 }
::={ S3C6410 1 }
END
MIB文件S3C6410.txt描述了0、1、2、3、4分别代表的涵义。即,当SNMP代理软件(snmpd)接收到了控制端发送过来的0、1、2、3、4信息时,分别将其解释为stop、left、right、up、down命令。

3.2.3 C代码(框架)的自动生成和自定义功能的加入

按照SMI规范编写好MIB库文件后,将MIB文件放在usr/local/share/snmp/mibs/目录下面,并用Net-SNMP自带的mib2c工具生成相应的C文件S3C6410.c和S3C6410.h;然后将这两个C文件拷贝到net-snmp.5.4.2/agent/mibgroup/examples/目录下,并在生成的S3C6410.c模板上添加需要的功能[7]。下面是主要添加和修改的部分。

(1)依据PELCO-D云台协议定义一维字符型数组stop、left、right、up、down。当SNMP代理接收到stop、left等命令时,就可以按照下面的定义将命令翻译成云台模块可以识别的码流。
char stop[7]={0xff,0x01,0x00,0x00,0x00,0x00,0x01};//0
char left[7]={0xff,0x01,0x00,0x04,0xff,0x00,0x04};//1
char right[7]={0xff,0x01,0x00,0x02,0xff,0x00,0x02};//2
char up[7]={0xff,0x01,0x00,0x08,0x00,0xff,0x08};//3
char down[7]={0xff,0x01,0x00,0x10,0x00,0xff,0x10};//4

(2)打开串口并设置串口参数,SNMP代理通过串口控制云台转动。
open("/dev/s3c_serial1",O_RDWR | O_NDELAY |
O_NOCTTY)//打开串口
//设置串口参数
tio.c_cflag = B2400 |CS8 |CREAD |CLOCAL;
tio.c_cflag &= ~HUPCL;
tio.c_lflag = 0;
tio.c_iflag = IGNPAR;
tio.c_oflag = 0;
tio.c_cc[VTIME] = 0;
tio.c_cc[VMIN] = 0;
……

(3)在case MODE_SET_ACTION:下添加云台控制功能。
case MODE_SET_ACTION:
……
switch(direction)
{
case 0://当接收到0时执行stop命令
write(fd,stop,7);
close(fd);
break;
……
……
case 640://当接收到640时启动application
system("exec /mnt/nand/my.application &");
break;
default://错误处理
……
}

当snmpd接收到0、1、2…时,分别向串口写入stop、left、right…命令。

3.2.4 snmpd的编译、配置和移植

(1)在net-snmp-5.4.2.1目录下使用CC=arm-none-linux-gnueabi-gcc ./configure --build=i386-linux --host=arm-none-linux-gnueabi --enable-mini-agent --disable-ipv6 --with-endianness=little --disable-manuals --disable-ucd-snmp-compatibility --enable-as-needed --disable-embedded-perl --without-perl-modules --disable-snmptrapd-subagent --disable-applications --disable-scripts --with-mib-modules="S3C6410"命令进行配置编译选项,这里可以添加需要或者去掉一些不需要的选项。配置完成后使用make install命令进行编译、安装。编译得到的snmpd比较大,但可用arm-linux-strip snmpd进行处理即可得到需要的snmpd文件。

(2)snmpd.conf文件的配置。配置文件用于存放代理进程所需的配置信息。代理进程在初始化时访问该文件:读取所需的参数、地址以及启动运行及进入循环后读写SNMP报文所需的其他信息。下面是本设计中缩减后的SNMP代理配置文件内容:
#sec.namesourcecommunity
com2sec locallocalhostpublic
com2sec mynetwork 192.168.1.0/24public#我的网段
在168
为了便于测试,可以将组设置为可读写,如:group MyRWGroup v2c mynetwork。

(3)移植到目标开发板。将snmpd和修改后的snmpd.conf文件移到宿主机的Windows下。启动目标板,将snmpd文件上传到目标板/usr/sbin目录下(需要将访问权限更改为可执行),将snmpd.conf文件上传到/usr/local/share/snmp/下(不存在的目录先要创建)。然后就可以启动snmpd了。

4 系统测试

测试环境为:内线速率为10 Mb/s的局域网Intranet;控制终端采用戴尔Vostro230型PC机(主频2.7 GHz,内存2 GB,Windows XP操作系统,IP地址:24.84.58.129)。为了方便测试,控制软件采用ManageEngine-MibBrowser软件,ARM11板IP地址设为24.84.58.224。

在系统搭建完成后,启动ARM板,同时在控制端PC机上打开ManageEngine-MibBrowser软件,并加载MIB文件。设置好相关参数后,向ARM板分别发送控制命令1(左)、2(右)、3(上)、4(下)、0(停止)。
实验表明,该方案能够在IP网络上稳定可靠地实现对云台的远程控制功能,效果非常好。

本文将先进的嵌入式技术与SNMP协议相结合,通过MIB扩展和SNMP移植,成功地在ARM11平台上实现了对云台的远程控制,并给出了运用Net-SNMP工具实现云台控制功能的详细方法。该方案不仅新颖,而且稳定可靠,开发周期短,具有很高的市场应用价值。目前,该方案已在某单位网络管理系统的视频监控模块中得到运用。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭