新闻中心

EEPW首页>嵌入式系统>设计应用> 基于单片机的低成本CMOS图像采集系统

基于单片机的低成本CMOS图像采集系统

作者: 时间:2016-09-20 来源:网络 收藏

  3系统软件设计

本文引用地址://m.amcfsurvey.com/article/201609/297210.htm

  3.1主程序的设计

  系统软件可分为:图像传感器模块、图像存储器模块、图像的多帧采集和拼接模块、串口数据传输模块。其基本流程图如图3所示。为了尽量提高的处理速度,将系统的时钟频率设置为最高,即16MHz。

  图3 主程序流程图

  3.2图像传感器模块软件设计

  根据SP0828数字图像传感器的工作原理和工作流程,图像传感器模块包括了图像传感器上电初始化、图像传感器寄存器初始化、图像数据采集3个部分。

  3.2.1 图像传感器上电初始化

  图像传感器上电初始化,就是图像传感器在上电结束但尚未开始工作的时候,对图像传感器芯片提供主时钟、初始化信号线拉低等一系列的操作,以使图像传感器能够正常工作或者获得最佳的工作状态。其主要流程如图4所示。

  图4 图像传感器上电初始化时序图

  DVDD28&AVDD连接电源,DVDD28&AVDD拉高即是上电。在上电之后,延时至少10岬,初始化信号线PWDN拉低。然后延时至少110μs,为图像传感器提供主时钟,为使图像传感器工作在最快的速度,为图像传感器提供最高16MHz的时钟。最后延时至少20clock,单片机通过I2C接口对图像传感器内部寄存器进行初始化。上电结束。

  3.2.2图像传感器内部寄存器

  初始化图像传感器采用I2C总线控制其各项功能,简单、快捷。I2C总线也是目前图像传感器采用最普遍的控制方式。用户可以通过I2C总线改变图像传感器内部可编程寄存器的缺省参数来设置图像传感器的工作方式,如时钟、帧率、曝光、对比度、亮度等。I2C总线是芯片间串行数据传输总线,它只用一根数据线SDA和一根时钟线SCL即可实现完善的双工同步数据传输。I2C总线规定,主控制器发送起始信号表明一次数据传输的开始,然后为寻址字节,寻址字节由高7位地址位和低1位方向位组成。方向位表明主控制器与被控制器之间的数据传输方向,当该位为“0”时表明主控制器对被控制器的写操作,为“1”时表明主控制器对被控制器的读操作。寻址字节后是按照指定地址读写操作的数据字节与应答位。数据传送完成后主控制器必须发送终止信号。I2C协议的时序如图5所示。

  图5 I2C总线的数据传送时序图

  STM8单片机有专门的硬件I2C接口,因此可通过该接口实现与图像传感器的通信。该系统中STM8单片机的I2C_SDA数据线和I2C_SCL时钟线分别连接图像传感器的SBDA数据传输口和SCLK时钟传输口。通过上述对I2C协议的分析,设计了如图6所示的I2C总线数据传输流程。

  图6 I2C总线数据传输流程

  I2C总线操作的典型时序信号有起始位信号、终止位信号、发送地址、发送数据、接收数据,所有的时序信号都是通过对单片机硬件I2C内部寄存器的操作实现的。I2C模块主要功能函数如下:

  (1)读取图像传感器内部寄存器的值unsignedcharI2C_Read(unsignedcharslave—address,unsignedcharregaddress,unsignedcharslave_read_address)/*slave_address是图像传感器的地址+写操作符“0”,reg_address是图像传感器内部寄存器的地址,slave_read_address是图像传感器的地址+读操作符“1”*/{unsignedcharval;I2C_Start();//启动I2C总线,I2C_CR2寄存器最低位置lI2C_SendDAdr(slave_address);//发送图像传感器的地址+写操作符“0”I2C_SendDat(reg_address);//发送内部寄存器的地址I2C_Start();//启动I2C总线,I2C_CR2寄存器最低位置1I2C_SendDAdr(slave_read_address);//发送图像传感器的地址+读操作符“1”vai=12C_RcvDat();//从I2C接口读取数据I2C_stop();//释放I2C总线,I2C_CR2寄存器次低位置1retunlval;}(2)读取图像传感器内部寄存器的值unsignedcharI2C_Main(unsignedcharslave_address,unsignedcharreg_address,unsignedcharwrite_data){/*slave_address是图像传感器的地址+写操作符“0”,reg_address是内部寄存器的地址,write_data是要写入寄存器的数据*/I2C_Start();//启动I2C总线,I2C_CR2寄存器最低位置1I2C_SendDAdr(slave_address);//发送图像传感器的地址+写操作符“0”I2C_SendDat(reg._address);//发送内部寄存器的地址I2C_SendDat(write_data);//发送内部寄存器要写入的数据I2C_stop();//释放I2C总线,I2C_CR2寄存器次低位置1

  3.2.3图像数据的采集

  单片机通过SPI协议采集图像传感器的图像数据。SPI总线是一种同步串行外设接口,允许MCU与各种外围接口器件以串行方式进行通信。SPI总线一般采用4根线:串行时钟线SCK、主机输入从机输出数据线MISO、主机输出从机输入数据线MOSI、低电平有效的使能信号线SS。因为在系统的SPI数据传输过程中,单片机只采集图像传感器的数据,没有向图像传感器的数据输出,所以系统选用SPl只接收模式,这样只需要一根串行时钟线SCK和一根主机输入从机输出数据线MISO即可,节省硬件资源。SPI接口的最大特点是由主设备时钟信号的出现与否来决定主从设备之间的通信。在从设备被使能时,一旦检测到主设备的时钟信号,数据开始传输,时钟信号无效后,传输结束。在系统中,单片机作为主设备,图像传感器作为从设备,图像传感器在时钟的下降沿变数,单片机在时钟的上升沿采集数据,图像传感器接收单片机的时钟信号SPI协议的时序如图7所示。

  图7 SPI总线的数据传送时序图

  STM8单片机有专门的硬件SPI接口,因此可通过该接1:2采集图像数据。图像传感器SPI时钟输入引脚连接单片机的SPI_SCK口,图像传感器图像数据输出引脚连接单片机SPI_MISO口,片选SPI_CS引脚连接单片机的普通I/O口PD7。然后对硬件SPI的参数进行配置,主要包括时钟频率、工作模式、主从模式、空闲时候电平状态、触发边沿等,这些参数都可以通过单片机硬件SPI的内部寄存器的配置实现。SPI总线读取图像数据的流程如下:unsignedcharspinet_byte(void){while(!(SPI_SR&0x02));//等待总线空闲SPI_DR=Oxff;//产生时序信号硬件SPI在且仅在发送数据的时候才产生SCK时钟while(!(SPI_SR&0x01));//等待数据接收完毕returnSPI_DR;//将接收到的数据返回}

  3.3 Flash模块软件设计

  SST25VF020是一款2MbitSPISerialNOR型Flash芯片,在系统中作为图像存储器使用。该Flash通过SPI的串口接收指令和数据,支持3/4的SPI协议,其工作时序如图8所示。

  图8 SST25VF020的工作时序图

  从上图可以看出,CE#f氐电平使能芯片正常工作,该芯片在SCK的上升沿读入信号,在SCK下降沿的时候输出信号。STM8单片机有专门的硬件SPI接口,但是图像传感器也需要单片机的硬件sPI接口与之通信,所以系统设计了一种分时复用单片机硬件SPI接口的方式。CE#片选连接单片机的普通I/O口PD0,该I/O口在不同的时刻与图像传感器的片选PD7分别选中,如此,一个硬件SPI接口便可操作2个SPI设备。SPI时钟输入引脚连接单片机的SPI_SCK口,SI读人信号连接单片机的SPI_MOSI,SO输出信号连接单片机的SPI_MISO。硬件SPI配置与前文所述图像数据采集Sial一致。此外,与图像采集相比,在程序部分还要多加一个单片机输出信号函数。

  Flash模块主要功能函数如下:

  voidsst_send_byte(unsignedcharbyte){while(!(SPI_SR&0x02));//等待总线空闲SPI_DR=byte;//将要写入的数据byte存入SPI_DRwhile(!(SPI_SR&0x01));//等待数据发送完毕完毕tmp=SPI_DR;//清空接收缓冲区voidflashwrite_byte(unsignedlongaddr,unsignedchardata)//向缓冲区l的指定位置(0—263)写入指定字节}write_en();//写使能命令mss0();//片选端选中,低电平有效send(0x02);//写命令send((unsignedchar)(addr》》16));//发送数据的地址send((unsignedchar)(addr》》8));send((unsignedchar)addr);send(data);//发送要写入的数据mssl();//释放片选}unsignedcharflashreadbyte(unsignedlongaddr)}unsignedcharbyte;mss0();//片选端选中,低电平有效send(0x03);//读命令send((unsignedchar)(addr》》16));//发送数据的地址send((unsignedchar)(addr》》8));send((unsignedchar)addr);byte=get();//读取数据mssl();//释放片选returnbyte;}

  3.4图像的多帧采集和拼接模块软件设计

  为保存图像数据,系统引入Flash存储器,而数据转存入Flash存储器需要占用中断响应时间,这就导致了中断响应时间不够的问题。为解决这个问题,根据所采图像为静态图像这一应用背景,提出一种多帧图像的部分采集与拼接算法,在中断响应时间中,只读取图像传感器中的图像数据,而后占用两次中断的时间,把图像数据转存入Flash。每帧图像有160次中断,每帧图像只取其1/3,取3帧图像的数据,即可拼接成一幅完整的图像。多帧采集方法如图9所示。图中,实线表示捕获到的中断,虚线表示因转存人Flash错过的中断。

  图9多帧采集图像方法示意

  单片机把采集的数据按照采集时间的顺序转存入Flash数据在Flash中的排列顺序如图10所示。

  图10图像数据在Flash中的存储顺序

  在Flash中读取图像数据的时候,按照中断次数的先后顺序读出,即第l帧第1次中断、第2帧第2次中断、第3帧第3次中断、第1帧第4次中断、第2帧第5次中断……第2帧第158次中断、第3帧第159次中断、第1帧第160次中断。这样,3帧图像的数据拼接成一幅完整的图像。在读取图像数据的同时,单片机以2个字节为单位,拼接成一个无符号整型,即一个像素点,通过RS232接口传送至上位机。

  4试验及分析

  图11是系统的实物图,硬件系统面积是(7.5×7.5)cm2,双层PCB板,系统结构简单,运行稳定。系统对图像的处理速度是4帧/s,满足实时性的要求。图12为采集的一幅图像,大小为240×320,图像格式为bmp,像素格式为RGB565,该图像是3帧图像拼接而成,是单片机通过RS232接口传输至上位机,并在显示器上显示的。

  图11系统实物图

  图12试验结果图像

  5结束语

  介绍了基于STM8单片机的低成本CMOS图像采集系统的硬软件构成,与其他嵌入式图像采集系统相比,有3点优势:第一,价格低廉,有较强的市场竞争力;第二,方法新颖,提出了一种多帧图像拼接成一幅图像的方法,解决了单片机处理速度慢的问题,取得了很好的试验效果;第三,系统体积小,结构简单,实时性好,能以非常低的成本附加到其他物联网传感节点上,使物联网节点具有采集和传输图像的功能,更大程度上方便用户使用。


上一页 1 2 下一页

关键词:单片机CMOS

评论


相关推荐

技术专区

关闭