基于STM32F407与OV2640的图像采集系统的设计
2018-07-26杨才生吴状肥万国义
杨才生,吴状肥,万国义
(上汽通用五菱汽车股份有限公司,广西 柳州 545007)
关键字:STM32F407;OV2640;嵌入式系统
引言
随着计算机技术的发展,嵌入式系统越来越多应用在各种微型控制系统中,如智能驾驶系统、机器人视觉系统、场景监控系统等,这些系统中大量使用摄像头,虽然市面上有很多摄像头可直接使用,但是具有个性化的摄像头还是需要用户自己设计和研究,比如要求摄像头嵌入到控制系统中、要求具有视频捕捉功能、要求具有图像识别、对象跟踪功能等。在智能驾驶系统中中的图像采集与处理技术,在汽车主动安全领域具有非常重要的意义。
1 系统结构与功能
一套完善的图像采集系统由硬件和软件两个部分组成,其中硬件部分主要包括微控制器、摄像头、图像存储设备等,软件部分主要用来驱动摄像头,并实现图像的传输、存储与处理等任务。
2 硬件设计
2.1 最小系统
(1)电源电路
电源电路用于给视觉系统提供功率需求,本设计要求电源模块能将24V车载电源转化成+5V和+3.3V两个级别,其中+5V给摄像头等模块供电,+3.3V给MCU供电。图1是24V转+5V的电路原理图:
图1 24伏转5伏电源电路
图1中,MURB1620CT用于防止电源反接,SMAJ36A通过吸收浪涌冲击实现对电路中的元器件的保护,LM2575S型调压器可输出高达3A的稳定电流,从而为摄像头等外设的工作提供了保证。
为了使STM32型微控制器正常运行,需要给其提供3.3V稳定的电压,图2所示为采用REG1117-3.3型集成三端稳压器实现+5V到+3.3V的转换:
图2 5伏转3.3伏电压
作为常用的降压型稳压器,REG1117-3.3可将 4.8~10V的输入电压稳定在+3.3V,且保证输出电流高达 800mA,完全满足图像采集系统微处理器的功耗需求。
(2)复位电路
STM32F407是低电平复位的,所设计的复位电路如图3所示,其中R13和C23构成了上电复位电路:
图3 复位电路
(3)JTAG调试接口
图4 JTAG调试接口
通过JTAG调试接口既可对STM32F407内部数据进行监测,又可实现 ISP(In-System Programmer,在系统编程),便于对微控制器的FLASH等器件进行编程。图4所示为本设计所采用的20引脚JTAG调试接口。
2.2 摄像头接口
STM32F407自带数字同步并行摄像头(DCMI)接口,该接口能够接收外部8~14位CMOS摄像头模块发出的像素数据流。STM32F407为OV2640型摄像头模块提供的接口如图5所示:
图5
在该接口中使用了微控制器的如下引脚资源:
DCMI(D[0:7]):用于接 OV2640型摄像头模块的数据输出引脚;
DCMI_HSYNC:用于接OV2640型摄像头模块的水平同步信号引脚;
DCMI_VSYNC:用于接OV2640型摄像头模块的垂直同步信号引脚;
DCMI_PIXCLK:用于接 OV2640型摄像头模块的像素时钟信号引脚。
2.3 存储器接口
STM32F407自带的标准的SD卡接口使用4位SDIO接口驱动,最高通信速度可达 48Mhz(分频器旁路时), 最高每秒可传输数据 24M字节,完全满足图像传输速度的要求,SD卡的接口电路如图6所示:
图6 SD卡接口电路
3 软件设计
3.1 摄像头驱动
OV2640的初始化
OV2640型摄像头模块的初始化包括以下几个方面的配置和操作:
(1)选择控制对象为图像传感器,通过向 RA_DLMT寄存器写入0x01实现;
(2)软复位OV2640,通过COM7寄存器写入0x80实现;
(3)设置图像参数,包括:输出模式,白平衡,亮度,对比度,特效,分辨率等。
图像格式控制
由于YUV422格式的图像直接读取其像素的Y分量即可获得该像素的灰度信息,因此驱动 OV2640时优先考虑YUV422格式图像数据的输出。OV2640输出YUV422格式图像数据需要依次通过以下配置实现:
(1)通过向RA_DLMT寄存器写0x00选择控制对象为摄像头模块内置DSP。
(2)通过 IMAGE_MODE寄存器切换摄像头模块的数据输出格式。
(3)通过CTRL0寄存器控制摄像头模块的使能。
3.2 图像的缓存
图像传感器采集到的像素数据缓存在 32位数据寄存器DCMI_DR中,然后通过DMA传输至外部存储设备。STM32F407的直接存储器访问DMA可以在无需任何CPU操作的情况下通过DMA快速移动数据实现外设与存储器之间的高速数据传输,这样节省的CPU资源可供其它操作使用。
在本设计中,DCMI每次触发DMA请求时DMA仲裁器根据当前请求的优先级启动图像数据流从 DCMI_DR到FIFO的传输。当图像数据量达到FIFO的阈值时,FIFO中缓存的图像数据被转移至外部SRAM中。当数据流项数寄存器达到零时DCMI请求DMA终止当前的数据传输事务。
3.3 SD卡的驱动
为了实现大量图像数据的存储,图像缓冲区中的像素数据要被及时转移至SD卡中,使用SD卡进行图像存储主要通过以下函数来实现:
//写SD卡
//buf:写数据缓存区
//sector:扇区地址
//cnt:扇区个数
//返回值,错误状态,0,正常,其它,错误
u8 SD_WriteDisk(u8*buf,u32 sector,u8 cnt)
{
u8 sta=SD_OK;
u8 n;
long long lsector=sector;
lsector<<=9;
if((u32)buf%4!=0)
{
for(n=0;n { memcpy(SDIO_DATA_BUFFER,buf,512); sta=SD_WriteBlock(SDIO_DATA_BUFFER,lsector+512*n,512); buf+=512; } }else { if(cnt==1)sta=SD_WriteBlock(buf,lsector,512); else sta=SD_WriteMultiBlocks(buf,lsector,512,cnt); } return sta; } 本文基于STM32F407型微处理器和OV2640型摄像头加SD卡的设计方案不仅成本低廉,而且功能齐全,整体效果较好,硬件平台设备较为成熟。在软件方面,程序流程严谨,逻辑严密,而且驱动程序较为完善,各个模块之间不存在耦合性,系统运行稳 定、可靠。4 结束语