历史上的今天
返回首页

历史上的今天

今天是:2025年03月16日(星期日)

正在发生

2021年03月16日 | 基于STM32的嵌入式双目图像采集系统设计

2021-03-16 来源:eefocus

1引言

随着图像处理技术及嵌入式系统的发展,利用嵌入式系统进行图像处理,已使如视频监控、视频电话和视频会议等应用成为可能。嵌入式系统上进行图像采集则是实现这些应用的前提。


双目立体视觉通常由两个摄像头从两个不同的角度,同时获取外界物体的两幅图像,或由单独一个摄像头在不同时间、不同位置获取外界物体的两幅图像,并基于视差的原理来获取外界物体的三维几何信息,复现外界物体的形状和位置。


目前已有很多方案实现在嵌入式平台上的图像采集。本文基于嵌入式的图像采集系统选择了意法半导体(ST)公司生产的STM32F103ZET6芯片为主控芯片,FIFO结构的AL422B芯片实现图像数据缓存,SD卡实现图像存储以及四线制电阻触摸屏实现外部控制。实现通过OV7670双摄像头采集图像数据,经主芯片控制存储、显示。


2嵌入式主控芯片介绍

ARM Cortex-M 处理器是一系列定位于深度嵌入式开发应用设计的。STM32F103ZET6是由意法半导体(ST)公司生产的新一代Cortex-M3内核处理器,具有以下特点:


性能和能效:具有高性能和低动态能耗,在90nm基础上提供了12.5DMIPS/mW 的性能,Cortex-M3处理器确保对于同时需要低能耗和出色性能的应用不存在折衷。


丰富的连接:功能和性能的巧妙组合使基于Cortex-M3的设备可以有效处理多个I/O 通道和协议标准,如USBOTG(On-The-Go)。


3μC/OS-II操作系统介绍


μC/OS-II操作系统实时性有保障,延时可预测,代码可小到2K,完全可以满足设计需要。C/OS-II移植过程中只选择用户和系统两种模式。μC/OS-II包括任务调度、时间管理、内存管理、资源管理(信号量、邮箱、消息队列)四大部分,没有文件系统、网络接口、输入输出界面。它的移植只与4个文件相关:汇编文件(OS_CPU_A.ASM)、处理器相关C文件(OS_CPU.H、OS_CPU_C.C)和配置文件(OS_CFG.H)。


4系统硬件设计

系统采用ARM 处理器作为核心,负责对系统设备初始化、数据总线仲裁、承载操作系统运行;为了弥补图像传输过程中的时钟偏差和图像显示不流畅等缺点,采用AL422B图像缓存芯片;图像经主芯片控制将于液晶屏显示,并存贮于SD卡中。系统结构图如图1所示。



4.1核心器件选型

系统的核心ARM 处理器使用由意法半导体公司生产的新一代Cortex-M3内核的STM32F103ZET6,具有高性能和低动态能耗,带有FSMC 外设可以外挂NANDFLASH、SRAM等,支持代码从扩展的外部存储器中直接运行,而不需要首先调入内部SRAM,便于系统的数据传输。


图像传感器采用Ommivision公司的OV7670 CMOS摄像头,较CCD 摄像头具有较高的性价比,具有标准的SCCB接口,兼容I2C接口,其高灵敏度和自动画面控制功能满足检测系统的精度要求。


4.2检测电路设计

系统采用集成了A/D和DSP的图像传感器模块,通过SCCB总线,由STM32完成定义相应寄存器和初始化;通过寄存器可设置图像数据输出格式,系统选择RGB565格式输出,一个像素点占16位,而像素数据总线为D0-D7,因此用两个PCLK时钟周期分别输出高8位和低8位;

图2图像传感器模块接口


XCLK是由CPLD 提供的输入时钟;VSYNC、HREF分别在每帧、每行开始和结束时电平发生跳变,供CPLD 判断。图像传感器模块接口如图2所示。


4.3数据缓存电路设计

数据缓存使用AverLogic公司推出的一个存储容量为393216字节×8位的FIFO存储芯片AL422B,其所有的寻址、刷新等操作都由集成在芯片内部的控制系统完成。数据缓存接口如图3所示,DO0-DO7是8位写出数据总线;DI0-DI7是8位写入数据总线;CE引脚为片选,OE为输出控制,WE是写操作控制;通过STM32的FSMC与外设连接。采用AL422B芯片对连续的数据流进行缓存,防止在进机和存储操作时丢失数据;数据集中起来进行进机和存储,避免了频繁的总线操作,减轻CPU的负担。



图3数据缓存接口图


4.4实时显示电路设计

系统的实时显示采用了ILI9325主控的2.4寸65536色TFT液晶屏,兼容系统需要的16位总线宽度的RGB格式图像,最高可显示320*240 分辨率;内部集成图像RAM,因而将其接入STM32的FSMC外设控制器,采用LCD8080i接口方式;CS为片选,RD、RW 分别为读写控制,RS是寄存器选择引脚,如图4所示。


5系统软件设计

STM32F103ZET6编程在KeiluVision4环境下通过C语言实现。系统的主流程如图5所示。



图5系统的软件流程


5.1文件OS_CPU.H的编写


1)μC/OS-II不使用C语言中的short、int、long等于处理器相关的数据类型,而是以移植性更强的整数数据类型代替,这样直观、便于移植。所以必须对操作系统和ARM体系结构的数据类型进行统一。


2)虽然ARM 处理器对堆栈向上及向下的两种增长模式都予以支持,但是通常系统仅支持堆栈从上往下长,并且是满递减堆栈,所以文件中定义堆栈增长方式的常量OS_STK_GROWTH的值应为1.


3)定义声明使能中断、结束中断、任务切换等函数。


5.2文件OS_CPU.C的编写


1)任务堆栈初始化函数OSTaskStkInit()堆栈的概念在ARM 体系结构和系统移植中非常重要,是在ARM 处理器中利用有限的寄存器完成数据和状态记录的载体。在编写堆栈初始化函数OSTaskStkInit()之前,必须根据处理器的结构特点确定堆栈的结构,所以需要对ARM 体系结构有充分的认识。根据ARM 体系结构每种运行模式14个通用寄存器,有一个或两个状态寄存器,很容易该写出OSTaskStkInit()的代码。


TCB结构体中OSTCBStkPtr总是指向用户堆栈最高地址,该地址空间内存放用户堆栈长度,其上空间存放系统堆栈映像,即:用户堆栈空间大小=系统堆栈空间大小+1。


2)μC/OS-II分别使用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来开中断和开中断,可以直接在C语言编程中应用。


3)可以根据ARM特点和移植目标,增加应用函数。例如处理器模式转换函数、人物初始指令集函数、钩子函数等。


5.3文件OS_CPU_A.ASM 的编写

这个文件采用汇编语言编写。完成了系统软中断的地址分配、相应的存储区域等,编写了任务级任务切换函数OS_TASK_SW()、中断级任务切换函数OSIntCtxSw()、启动最高优先级任务函数0SStartHighRdy()等函数。完成了C语言和机器硬件语言的对接。


6结语

本文在基于STM32核心嵌入式μC/OS-II平台上利用的、双向的、可靠的、无重复的数据连接,加上Vxworks系统自身的实时性强和可靠性高等优点,该通信方式完全满足某型车载武器系统的高速实时网络通信要求,在实际的操作使用中,取得了良好的效果。


推荐阅读

史海拾趣

AverLogic公司的发展小趣事

AverLogic公司在电子行业中以其技术创新和产品突破而崭露头角。在早期的发展阶段,公司专注于研发高质量的视频处理芯片,以满足市场对于更高清晰度和更流畅视频播放的需求。经过多次实验和迭代,公司成功推出了一款具有革命性的转换器产品——AL110,这款产品能够将PC和Macintosh的VGA信号转换为高品质的NTSC或PAL信号,从而极大地提升了视频信号的处理效率和输出品质。这一创新不仅为公司赢得了市场的认可,也为公司在电子行业中奠定了坚实的基础。

Decawave公司的发展小趣事

Decawave公司成立于2007年,总部位于爱尔兰都柏林。成立之初,公司就专注于超宽带(UWB)技术的研发。在初创阶段,Decawave面临着技术难度大、资金紧张等挑战。然而,凭借对UWB技术的深入理解和研究,公司成功开发出了具有高精度定位能力的UWB芯片,这一技术突破为Decawave在电子行业中赢得了声誉。

Aimtec公司的发展小趣事

作为一家注重品质的企业,Aimtec公司深知质量管理体系的重要性。因此,公司投入大量资源,建立了完善的质量管理体系,并通过了ISO 9001:2015等国际质量管理体系认证。这些认证不仅证明了Aimtec公司在质量管理方面的实力,也为公司的业务拓展提供了有力的保障。通过持续的质量改进和创新,Aimtec的产品在行业中赢得了良好的口碑。

GSN Electronics公司的发展小趣事

作为一家注重品质的企业,Aimtec公司深知质量管理体系的重要性。因此,公司投入大量资源,建立了完善的质量管理体系,并通过了ISO 9001:2015等国际质量管理体系认证。这些认证不仅证明了Aimtec公司在质量管理方面的实力,也为公司的业务拓展提供了有力的保障。通过持续的质量改进和创新,Aimtec的产品在行业中赢得了良好的口碑。

ECS公司的发展小趣事

ECS公司成立于XXXX年,由一群热衷于云计算技术的工程师创立。在创立初期,公司就明确了以提供高效、弹性的云服务为目标。他们深入研究了虚拟化技术、自动化管理等关键技术,成功推出了ECS服务,为客户提供按需分配的计算资源。这一创新的服务模式迅速吸引了众多客户的关注,ECS公司开始在云服务市场崭露头角。

ENSIGN公司的发展小趣事

ENSIGN的前身Skylight于1998年在上海成立,专注于商业照明领域。随着市场需求的增长,公司于2003年正式更名为ENSIGN,并开始为零售店铺提供全面的商业照明解决方案。ENSIGN凭借其创新的设计和高质量的产品,逐渐在市场中树立了良好的口碑。

问答坊 | AI 解惑

关于TI 6000系列DSP优化经验(转帖)

看到网上很多网友对TI 6000系列DSP优化工作感到苦恼,在此我总结下我的优化经验,希望对大家有帮助。 一、首先考虑从系统结构上优化,比如尽量减少待处理数据的无谓搬移,考虑你DSP片内存储量和每次处理数据量对系统结构优化,这部分的优化应该最 ...…

查看全部问答>

【ATMEL技术问题】关于KEIL下AT91R40008启动代码问题

用KEIL 软件建立一个工程,自动生成一个启动代码STartup.S ; 但是问题来了,这个代码有点不知所云,编译出错哦啊,请大侠指点!下面是代码 /*****************************************************************************/;/* STARTUP.S: Start ...…

查看全部问答>

菜鸟提问:SHBrowseForForlder()不能用,怎么代替

我是个初学者,我这个平台不能使用SHBrowseForForlder()这个方法,想找另外一个方法来代替SHBrowseForFolder,达到相同的效果, 或者可以不用打开浏览文件夹着个对话框,直接可以保存文件到指定目录也可以。劳驾各位帮忙啊…

查看全部问答>

求助:蓝牙和WIFI共存的问题

关于BT与WIFI共存时的设计,小弟有些问题,实在是不太明白,请教各位高手。 1. 我在网上看到有人说如果蓝牙和WIFI的物理隔离达到30dB以上,则两者之间的相互影响可以基本忽略。请问如果才能做到物理隔离达到30dB以上呢?是否天线距离远一些就可以 ...…

查看全部问答>

关于pc104总线驱动的制作

小弟刚刚做了一块基于pc104总线的DA板卡,但是现在要与基于pc104总线的3350主板进行交互,主要是对pc104总线的数据进行读取,需要制作驱动,小弟第一次开发,有那位大侠能够给一个例子或其他的资料,多谢…

查看全部问答>

螺纹的检测技术

各位大虾,有什么方法可以检测孔内的螺纹?只要检测孔内是否有螺纹就可以了。…

查看全部问答>

向大家请教一下uc/os-II多任务的运行机制?

有一个如下的uc/os-II源代码,就是采用信号量机制使两个任务共享一个串口com1,去打印一条字符串。 [code] #include \"config.h\" #define        Task0StkLengh        64       ...…

查看全部问答>

【课后练习】LaunchPad课后练习七之定时器

课后练习七之定时器   (定时器看起来简单,却搞了好久,和之前的430定时器不太一样,看了很多次,还有很多没弄出来的地方,有几个地方还是没懂) 1.TIMER_A由以下部分组成 [1] 计数器部分 输入的时钟源具有4种选择,所选择的时钟源又可 ...…

查看全部问答>

4位半的AD达到5位半分辨率的讨论,欢迎跟进一起探讨。

5位半的数字万用表没有一千块RMB是拿不下来的,本帖想讨论能否设计一种廉价的方案实施一个5位半表呢? ICL7135是4位半AD转换器,价格低廉,才4块钱多些,如果采用过采样编程技术,是否可以做出一个5位半分辨率的万用表呢? 欢迎讨论。 如果经研 ...…

查看全部问答>