基于S12单片机的循迹小车视觉系统设计与优化
全国大学生智能汽车竞赛已经在国内顺利举行两年。随着智能车速度的提高,越来越多的参赛队开始采用摄像头作为道路辨识的主要传感器,而如何使用单片机进行数字图像信号采集,并识别赛道路径是该系统的设计重点。目前图像采集与处理技术已经得到了广泛的应用,但多数基于图像的控制系统都采用了DSP等高速处理器,并不适合智能车竞赛所规定使用的单片机平台。本文利用CMOS图像传感器的可编程特性,设计了适用于中低速单片机的基于FIFO的数字图像采集处理系统,用MC9S12DG128单片机进行实时图像采集和控制。该系统结构简洁、成本低廉、通用性强,可方便地移植到各种类型的处理器。
本文引用地址:http://www.amcfsurvey.com/article/173873.htm1 主要芯片
MC9S12DG128是Freescale公司出品的16位单片机,其采用增强型16位HCS12 CPU,内部总线时钟最高可达25MHz;片内资源包括8KB RAM、128KB Flash、2KB EEPROM、8路10位A/D转换器、SCI、IIC、SPI串行通讯模块、PWM模块以及多路CAN总线模块等。同时它支持Freescale特有的背景调试模式(BDM),可以进行在系统调试,使开发效率大大提高。
OV7620[1]是美国OmniVision公司出品的彩色/黑白CMOS图像传感器。这是一种自带图像敏感阵列和A/D转换元件、能直接提供8/16位CCIR601、CCIR656等格式视频数字信号的彩色/黑白图像传感器,图像输出最高速度可达60S/s,最大图像分辨率为644×492,5V供电;它具有自动增益、自动曝光、自动白平衡、边缘增强、伽玛校正等控制功能;可以通过I 2 C总线进行设置;同时OV7620具有图像开窗输出的功能,即允许用户可根据实际使用需要设置其内部寄存器,使其只输出完整图像中的任意一矩形区域内的信号,其范围从4×2到644×492。这种功能从硬件上屏蔽了图像中不需要的部分,只保留用户需要的部分图像,大大减少了图像的数据量,提高了系统的效率。
FIFO存储器没有地址线,按照先入先出的顺序进行顺序读写,因此是接口电路十分简洁,读写速度快,允许读写动作同时进行。IDT7205是IDT公司生产的高速、低功耗异步FIFO,容量为8 192×9bit,存取时间最小只有12ns,有空、半满、满三个标志位,最大功耗660mW,工作电压+5V;D0~D8为数据输入总线,Q0~Q8为数据输出总线,为读写控制端,分别在信号下降沿锁存、输出数据,是FIFO写满标志位,此外,IDT公司还提供256B~64KB不同容量的FIFO可供选择。
2 系统硬件结构设计
由于所使用的MC9S12DG128单片机的频率较低,最高只有25MHz,而摄像头的图像输出速率一般至少有13.5MHz(以30万像素为例),每个像素的信号保持时间不到75ns,若使用单片机直接采集图像传感器输出的数字信号,则会受到其时钟频率的影响,难以将信号完整地采集进系统。
因此本系统使用FIFO芯片IDT7205作为图像传感器与单片机之间的数据缓存,通过设计一定的逻辑电路,使图像传感器自动地将图像数据写入FIFO,同时MCU开始从FIFO读出数据。图像采集系统结构框图如图1所示。
2.1 摄像头同步信号分析
OV7620的同步信号时序如下:垂直同步信号VSYN为两个正脉冲之间扫描一帧的定时,即完整的一帧图像在两个正脉冲之间;水平同步信号HREF扫描该帧图像中各行像素的定时,即高电平时为扫描一行像素的有效时间;像素同步信号PCLK为读取有效像素值提供同步信号,高电平时输出有效图像数据,若当前图像窗口大小为320×240,则在VSYN两个正脉冲之间有240个HREF的正脉冲,即240行;在每个HREF正脉冲期间有320个PCLK正脉冲,即每行320个像素。这就是VSYN、HREF、PCLK三个同步信号之间的关系[2]。OV7620同步信号时序如图2所示。
2.2 数字图像信号的采集
为了将图像传感器输出的图像信号自动地存入FIFO,只需要通过一个“与非门”就能产生符合FIFO要求的写时钟脉冲,如图3所示。将帧同步信号VSYN引入单片机输入口,复位后V_EN置0,“与非门”关闭,输出1。当单片机检测到VSYN上跳后,V_EN输出1,打开“与非门”。当摄像头输出有效像素时,HREF为高,PCLK高电平时像素数据有效,三者“与非”后输出为0,使信号产生一个下跳,触发FIFO锁存OV7620输出的图像数据。
经过图3电路处理后的系统时序如图4所示。写信号已符合脚的时序要求,经实际使用,功能正常。
当一帧图像写入FIFO后,单片机根据时序要求在FIFO的脚上产生相应脉冲,即可从FIFO中读出图像数据,按照一定格式存入内存,进行后续处理。图5为采集得到的黑线图像。
虽然单片机通过一定的硬件结构等可以实现图像信号的采集,但是由于内部结构的原因,其进行大数据量运算的能力有限,进行图像处理速度较慢。通过以下方法进行优化,可以使单片机进行一些简单的图像处理和实时控制任务。
3.1 减小图像数据量
CMOS图像传感器具有图像开窗输出(Windowing)的功能,通过设置其内部相应寄存器,可以使CMOS只输出特定区域内的图像数据。如设置CMOS使其只输出画面中用户所关心部分的图像信号,图像数据量则可大大减少,同时也减轻了后期进行图像处理的难度,提高了系统的性能。
在要求图像精度不高的情况下,为了进一步降低图像数据量、减轻单片机负担,可以采取隔行、隔像素采集的方法,即在PCLK和HREF信号上加入计数电路,每隔N行和M个像素采集一次,这样在保证图像可用的情况下数据量可减小为原来的1/(N×M)。
3.2 FIFO异步读写图像数据
IDT7205具有两套独立的读写指针,可以同时进行读和写操作而互不干扰。当图像输出速度比单片机读入速度快许多时,为了提高采集效率,可以让图像读写同时进行,即当新的一帧图像开始写入FIFO后,单片机就开始读取图像数据,读写同时进行,以减少单片机等待数据写入FIFO完成的空闲时间。
单片机并不适合完成复杂的图像处理算法,如卷积等运算。因此在编写图像处理算法时应根据单片机特性,尽量避免使用浮点运算,要简化算式,或者可以牺牲一定精度来换取时间。以图像分割的大津算法(OTSU)为例,该算法遍历0~255个灰度值,以找出一个最小的灰度u,使得到的g最小。
OTSU原始算式:g=Wa×(u0-u)2+Wb×(u1-u)2
OTSU改进算式:g=Wa×Wb×(u0-u1)2
使用原始算式和改进的等效算式进行计算时,每次迭代中改进算式比原始算式少进行2个乘法运算,其速度约提高1/3。
本文提出的基于FIFO和单片机的图像处理系统,结构十分简洁,成本低廉,可移植性强。虽然单片机并不十分适合于大数据量的图像处理任务,但通过优化和精度与性能的折中,可以完成一些简单的基于图像的处理任务,并具有一定的实时性。本文介绍的采集系统被用在基于CMOS的智能循迹小车上,使用一片MC9S12DG128单片机运行于24MHz的总线时钟并配合IDT7205、OV7620图像传感器实现了图像采集、处理和小车控制,取得了良好的效果。
评论