基于μC/OS-III的嵌入式视频处理系统设计
2017-11-22
北京信息科技大学 自动化学院,北京100192
一、引言
2015年,李克强总理的政府工作报告中将“互联网+”正式被纳入顶层设计,成为国家经济社会发展的重要战略。“互联网+”计划将重点促进以云计算、物联网、大数据等为代表的新一代信息技术与现代制造业、生产性服务业等的融合创新,嵌入式技术作为物联网里的重要环节将会得到更为广泛的应用。
μC/OS-III(Micro Control Operation System Three)是一种基于ROM运行的、可删减、可扩展、可升级、可固化、基于优先级的实时内核,能够满足当今的实时内核所需求的大部分功能。由于μC/OS-III支持灵活移植,广泛适用在微处理器与控制器,性能优越性远超大多数商业操作系统[1]。
在STM32芯片上移植μC/OS-III能够大幅度提高芯片的应用水平。为了提高控制芯片的工作效率,本论文将研究如何将μC/OS-III移植到STM32F107中。STM32F107可以直接连接互联网,运行速度极快并且兼顾STM32的必备功能[2]。实现μC/OS-III在STM32F107的移植和应用,提高芯片的处理功能,对于嵌入式系统的开发具有重要意义。
二、视频处理总体架构
本次研究的嵌入式系统是以STM32F107为主控芯片,系统搭配有LCD触摸屏和摄像头。采用外部的稳定5V电源作为电源输入,DC-DC电源模块将5V降到3.3V为STM32供电;3.5吋电阻式显示触摸屏可以显示信息;30万像素摄像头可进行外部实时图像信息采集;SIM900A实现2G网络通讯功能;USB接头、Ethernet接口和串口可以实现与外界的连接功能[3]图1为系统硬件关系图。
三、模块功能介绍
1、STM32及外围硬件电路
STM32F107具有高达14个通信接口,并且含有CRC计算单元。芯片具有10/100 Internet MAC,DMA和SRAM(4K字节):硬件支持IEEE1588,所有封装都支持MII和RMII接口。所以该芯片十分适合于嵌入式方面的设计应用[4]。摄像头、显示屏分别与STM32连接引脚如图2所示。
2、电源设计
硬件系统电源分配如图3所示。首先通过外接5V作为系统的电源,然后通过AMS1117-3.3V产生稳定3.3V电压。AMS1117是系列的电源模块,不同的版本能够通过外围电阻调节实现1.25V~13.8V电压输出。通常都是采用的1.8V、2.5V、2.85V、3.3V和5V固定电压的型号。本电路中在3.3V电压的范围下进行设计。输出电流最大可达到800mA,电压与电流都符合系统要 求。AMS1117-3.3V电压调节电路的连接如图4所示。
3、保护电路
在我们试验中与电路板,或者芯片的直接接触机率较大,人体的极高静电电压冲击下很容易就会造成系统内芯片工作异常,所以在电路中设计使用了两个瞬态抑制二极管(TVS), 其 TVS具有瞬间吸收高能量的作用,并将两级的电压控制于预定值。本次设计中使用SMBJ3.3A、SMBJ5.0A,分别用于保护3.3V电路与5V电路[5]。电路原理图如图5所示。
4、TFTLCD显示屏电路设计
此3.5in.电阻式显示触摸屏控制部分芯片XPT2046,这款芯片主要用在移动终端。该芯片具有采样与保持、模数转换、串口数据稳定输出等功能。该芯片通过ADC采样能够感知压力。XPT2046支持从1.5V到5.25V的低电压I/O接口。片内集成温度传感器。芯片功耗可小于0.75mW。当采用触摸屏模式时,最好设置成差分模式,这样能够极大程度上抵消掉驱动器开关操作时的寄生电阻和外部的电磁干扰造成的检测误差,进而大幅度地增强了转换精准度[6]。显示屏电路如图6所示。
5、30万像素摄像头OV7670的电路设计
OV7670是1/6in.CMOS 图像传感器,可以达到30万像素图像采集效果。该模块由SCCB 总线控制,能够传输整帧、子采样、截取显示窗口等方式的全部分辨率8位图影。VGA图像最高达到30frame/s,能够自如地把控图像的质量、数据采集的数据格式和传输数据的格式。伽玛曲线、白平衡、度、色度等都能够用SCCB接口编程。
OV7670摄像头模块里面包含了一个AL422B芯片。AL422b 具有先进先出功能的存储空间。摄像头的所有动态内存的操作都是由内部动态内存控制器完成的[7]。PC影像架构要包含有640×480或者720×480字节的存储空间,AL422B能够提供超出一倍的存储空间,对于提高视频采集效率具有重要意义。OV7670的原理图如图7所示。
四、软件设计
1、μC/GUI在STM32上的移植
修改bsp.c和bsp.h文件。在bsp.c文件里只需修改局部的DWT代码,DWT是CM3中的三种跟踪源之一,要启动跟踪源就需要DEMCR寄存器中的TRCENA位置1,该寄存器的地址为0XE000EDFC。DWT组件中有许多寄存器,如果要用时钟计时功能就需要将CTRL寄存器中的bit0位置1。至于对bsp.h的修改仅需进行一些头文件的添加:
(1)修改os_cpu_c.c文件。在os_cpu_c.c的头文件部分添加includes.h。
(2)修改os_cfg_app.h文件。它主要用于配置任务优先级、堆栈、μC/OS-III的系统时钟节拍等[8]。可根据需要进行修改相关内容。
(3)修改SYSTEM文件夹内的sys.h文件。将SYSTEM_SUPPORT_UCOS将其定义为1,此时就是支持μC/OS-III系统。语句如下所示:
#define SYSTEM_SUPPORT_UCOS 1。系统移植后编译运行验证,如图8所示。
2、TFTLCD显示与触摸屏软件设计
LCD采用的是 NT35310液晶控制器,该控制器自己配有显示内存,可以缓存一定的显示数据,显存的大小为320×480×18/8。采用的是16位的RGB565格式储存色彩数据。通过NT35310指令来实现LCD屏的功能,NT3510的18位数据线和LCD GRAM对应关系来自由设置扫描方向。通过指令0x2A用于设定列的地址,这一个指令就能够设置横坐标。指令0x2B是用来设置纵轴坐标也就是y轴的指令,该指令的默认扫描方式是是在从左到右,从上到下的扫描方式。指令0x2C是用于写 GRAM,通过这个指令在可以持续发送信息往 LCD里面GRAM输入颜色数据。指令0x2E是用于读 GRAM,也就是用于读取NT35310的显存。
在对TFTLCD显示的软件设置当中,首先进行复位和初始化的设置,指令0x2A与0x2B用于设定扫描方式,从而设置位置坐标。当NT35310接到指令0x2C后,有效数据位宽变为16位,此时能够持续输入LCD的GRAM 数据,然后写入颜色数据并在LCD显示相关信息。如果没有写GRAM指令,那么通过读指令0x2E读出数据,然后通过控制器处理。之后可以循环此流程或者退出工作。信息在TFTLCD显示的程序流程如图9所示。
3、摄像头OV7670的软件设计
此次程序设计采用QVGA 模式,以RGB565格式输出颜色数据。由于有了FIFO,所以,现在只需要关心两方面的程序设计:
首先,怎样的程序设计才能将图像信息存储到FIFO里面,当打开设备后,第一个OV7670同步信号到达控制器后,FIFO写数据指针复位,并且使能FIFO写功能。当第二个OV7670数据到来时中断写功能,实现一帧数据的采集。存储一帧图像信息的流程图见10所示。
其次,怎样的代码设计才能从FIFO里面读取影像数据,首先要FIFO读指针复位并且设置读时钟频率,先读取高字节数据再设置读取低字节数据频率并读取低字节数据,一帧图像就读完了。图11为读取影像数据的流程图。需要注意的是,为了避免数据不被覆盖,在FIFO充满存储空间之前读取FIFO数据。
五、设计成果
通过OV7670的工作特点结合在STM32F107硬件和一系列软件系统设计,设计出高效的视频处理系统。如图12为视频采集和显示的结果。将软件μC/OS-III系统屏蔽,和非屏蔽系统相比,μC/OS-III系统在效率、稳定性、用户使用灵活性方面都有明显的提高。
六、结束语
基于μC/OS-III系统下的嵌入式物视频处理系统。通过STM32F107为控制数据采集与传输的控制核心,该控制系统根据OV7670的工作特点结合在STM32F107硬件系统上的,给出了应用程序设计的流程图和关键性的设计实现数据采集。通过设计的电路接口传输到控制器,通过控制器的控制实现对视频数据在LCD显示屏的显示功能。通过实验的测试,该系统实现了所设计的视频数据处理功能。
此系统将图像显示技术、嵌入式编程技术、嵌入式系统移植技术等结合在一起。实现理想的视频显示、图像采集等功能,所以要求本嵌入式系统要有十分高的稳定性、实时性等特点,对于开发μC/OS-III系统下的嵌入式设计具有重要的借鉴意义。