随着中国视频监控市场的快速发展,数字监控逐渐成为主流,网络化、个性化和智能化将是中国视频监控市场的重要发展趋势。但目前基于流媒体传输的技术对网络条件要求较高,无法广泛推广,固定监控成本过高。如何将视频监控与互联网结合起来,使监控人员能够随时随地进行监控,是现代监控技术亟待解决的问题。另一方面,目前视频监控系统中使用的微控制器多为arm9、arm11等系列微控制器。arm微控制器的硬件外设在工厂已经固定,不利于用户的硬件扩展和升级。arm和fpga相结合的多芯片解决方案会导致系统成本高、系统资源浪费和高功耗。针对上述不足,本文提出了一种新的解决方案,采用zynq系列处理器,芯片采用高性能cortex-a9双核与fpga相结合。arm部分可以解决高清视频处理的问题,可编程逻辑fpga部分可以升级扩展硬件。
1移动视频监控系统架构
本次设计的主控板是digilent公司的zedboard开发板,主芯片zynq7020集成了高性能双核arm cortex-a9 mpcore处理系统和可编程逻辑。视频采集端位于移动小车上,以达到移动视频采集的目的。系统的设计主要包括arm控制部分和fpga逻辑部分的设计。arm部分主要用于运行系统上的操作系统和应用软件,如web服务器boa和视频编码器mjpg-streamer;fpga部分主要用于扩展硬件资源,设计汽车电机驱动部分的pwm ip核。系统的总体结构框图如图1所示。各模块的功能如下:摄像头负责视频图像采集,zynq主控模块负责arm操作系统和fpga逻辑资源,电机控制模块负责智能小车运动,boa webserver负责网络交互,无线路由器负责无线网络数据传输和接收。
系统上电后,首先自动执行固化在芯片内部的芯片初始化程序,然后执行第一级引导加载程序fsbl,使用比特流文件(pwm ip核设计生成的比特流文件)配置fpga部分。fpga配置完成后,启动u-boot引导引导程序,启动linux操作系统[2]。系统启动后,智能车通过无线路由器产生无线信号,用户可以通过另一端的网络连接智能车终端,实现视频监控。用户与系统交互的实现如图2所示。
本文主要介绍了电机控制的设计,包括电机控制的硬件电路设计、fpga的pwm ip核设计和linux操作系统的pwm驱动设计。
2电机控制部分的设计
2.1电机控制部分硬件电路设计
该模块主要由l298p双h桥dc电机驱动芯片实现。由于一个l298p芯片可以驱动两个dc电机,小车有四个轮子,因此需要两个l298p芯片[3]。同时,为了减少fpga i/o引脚数量,在原理图设计中使用了一个四输入二或非门芯片sn74hc02d,使得两个i/o引脚可以控制l298p的四个输入端。dir1、dir2、pwm1、pwm2通过zedboard的pmod接口与fpga相连。示意图如图3所示,其中in1、in2、in3和in4为输入信号,ena和enb为使能信号。ena控制in1和in2的输入使能,enb控制in3和in4的输入使能。当ena为1,dir1为1(即in1为0,in2为1)时,p1接口上的电机正转;当ena是1,d
ir1为0时(也就是in1为1,in2为0时),p1接口上的电动机反转;当ena为0时,p1接口上的电动机停止。与p2口连接的电动机原理同上。
2.2 fpga部分pwm ip核的设计
xilinx嵌入式系统部分的设计由其公司推出的edk(embedded development kit)开发套件实现,edk具有完成嵌入式系统设计的一整套工具,即:硬件设计工具xps(xilinx platform studio)和软件设计工具sdk(xilinx software development kit),硬件设计步骤如下:(1)设置新工程路径;
(2)自定义ip配置外设;
(3)建立ucf文件;
(4)bit流的生成[4]。自定义ip的部分主要实现电机的正转,反转和停止控制。关键veriloghdl代码如下:
case(state)
//电机停止
′nop:{pwm_left,pwm_right}<={7′d0,7′d0};
′going://电机正向旋转
begin
if(dis_value>31)
{pwm_left,pwm_right,dir_lself,dir_rself}
<={7′d100,7′d100,1′d0,1′d0};
else
{pwm_left,pwm_right,dir_lself,dir_rself}<=
{{dis_value[4:0],2′b0},{dis_value[4:0],2′b0},1′d1,1′d1};
end
′return://电机反向旋转
begin
if(dir_value==3′b010)
{pwm_left,pwm_right,dir_lself,dir_rself}<={7′d80,7′d80,1′d1,1′d0};
else
{pwm_left,pwm_right,dir_lself,dir_rself}<={7′d80,7′d80,1′b0,1′b1};
end
endcase
在本设计中,对电机的控制,传输的数据量较小,只需要添加一个低速的axi4-lite总线设备pwm模块来控制pmod接口就可以实现硬件设备之间通信,其中axi4-lite的全局时aclk设置为100 mhz,pwm模块分配的起始物理地址为0x6ca00000,空间大小为64 kb,pwm配置信息如图4所示。
2.3 linux下电机驱动部分的设计
由于远端传输是在linux系统下tcp/ip协议实现的,因此,编写linux下的ip驱动,应用程序就可以通过linux的标准接口访问fpga的pmod接口设备。本设计编写的是字符型设备驱动程序,包含设备加载、设备卸载以及文件操作函数。pwm模块加载时系统调用module_init(pwm_init)宏实现模块的初始化操作,在本系统中pwm_init()函数主要完成以下工作:(1)内核注册字符型设备驱动;(2)创建pwm设备类;(3)利用pwm设备类创建设备;(4)将pwm模块物理地址映射到虚拟地址上[5]。部分关键代码如下所示:
//xps分配的物理地址
#define pwm_moudle_phy_addr 0x6ca00000
//注册驱动
pwm_driver_major=register_chrdev(0,device_name,&pwm_driver_fops);
pwm_driver_class=class_create(this_module,"
pwm_driver");//创建设备类
pwm_driver_device=device_create(pwm_driver_class,null,mkdev(pwm_driver_major,0),null,"pwm_device");
//利用设备类创建设备
//将pwm ip物理地址映射为虚拟地址
pwm_fre_addr=(unsignedlong)ioremap(pwm_moudle_ phy_addr,sizeof(u32));
初始化工作结束,但是仅有初始化函数,设备仍然无法工作,还需要有实现频率和占空比的调节机制。控制pwm的频率函数如下所示:
static ssize_t sys_pwm_frequency_set(struct device*dev, struct device_attribute*attr,const char*buf,size_t count)
long value=0;
int i;
frequency=0;
//修改频率之前,关闭pwm模块
outl(value,pwm_fre_addr);
//将写入pwm_frequency中的字符串转化为整数
for(i=0;i100000000)value=100000000;
value=100000000/frequency;
//将计数值写入到pwm模块的pwm_fre_addr寄存器中
outl(value,pwm_fre_addr);
return count;
控制pwm占空比的函数和控制pwm频率的函数一样。
3 实验结果及测试
系统的主控制板为zedboard开发板,上电启动后,无线路由器会发布一个ssid为tp_link_5c90的无线网络,可以通过任何可以上网的设备连接这个网络。在浏览器中输入网址:192.168.1.100,就会登录到移动视频监控的网页上,通过界面的按钮控制视频终端的运行。
本文设计采用xilinx all programmable芯片zynq作为主控cpu,fpga部分可以实现逻辑扩展和功能补充。例如:自定义通信协议、ip核,同时还可以利用xilinx的部分可重配置技术升级硬件系统,易于后期扩展和硬件升级;arm部分采用的是性能较高的cortex-a9双核,使得对高清晰视频的处理较为流畅,而且系统整体功能也比较稳定。相比于传统的模拟监控,数字视频处理技术提高了图像的质量和监控效率。
设计中采用软硬件协同设计的方法,即:在整个系统及定义的基础上,同时对软硬件进行设计和协调,其中包括软硬件的划分(哪些功能使用软件完成,哪些功能使用硬件完成)、软硬件系统的开发与联合调试,降低了开发风险,缩短了开发周期。
参考文献
[1] xilinx inc. ug585, zynq-7000 all programmable soc technical reference mannual[z]. 2013.
[2] xilinx inc. ug873, zynq-7000 all programmable soc: concepts, tools and techniques[z]. 2013:12-35,40-53.
[3] 王芳芳,张欢.基于zynq平台的动态智能家居系统的设计[j].软件,2013,34(8):98-100.
[4] 胡典荣,郭春生.基于zedboard的spi和以太网传输设计[j].杭州电子科技大学学报,2013,33(5):126-129.
[5] 陆佳华,江舟,马岷.嵌入式系统软硬件协同设计指南:基于xilinx zynq[m].北京:机械工业出版社,2013.
