在很多场合,由于客观条件限制,人们不可能进入现场进行直接观察,只能用适应性更强的电子图像设备来代替完成,在此背景下发展起来的图像技术成为人们关注的热点应用技术之一,它以直观、信息内容丰富而被广泛应用于许多场合。在物联网系统中实现图像采集,必须要考虑物联网的以下特点:
(1)物联网节点对价格敏感。
物联网是信息传感技术的大规模应用,传感节点数目成百上千,若每个节点的成本提高一点,整个物联网系统的成本就会提高很多。所以传感节点图像采集的成本应尽量低。
(2)大部分物联网应用对图像质量要求不高。
图像采集主要是帮助用户不需要到现场就可以观察现场情况,对于大多数应用只要能分辨出现场场景即可,没必要采集很高像素的图像。
(3)基于成本考虑,物联网大多选用RS232,Zigbee,GPRS等传输速率不高的联网方式,图像传输时间较长。
但许多监测节点安放的位置固定,采集的图像是准静态图像,也就是说,大部分情况下,图像是不变的,所以对帧率要求不高。即使图像采集的速度慢一些,也不会对现场情况的观察有太大的影响。基于单片机的低成本CMOS图像采集系统正是在这样特定的应用背景下设计的。针对物联网传感节点的特性,结合现有的技术条件和实际应用,提出一种用单片机直接与CMOS图像传感器相连,采用Flash为图像存储器,RS232为图像传输协议,并且多帧图像拼接成一幅图像的方法,实现了远程监控。所选器件价格低廉,硬件连接简单,从而成本非常低。该系统可单独作为独立的图像采集系统,又能以非常低的成本附加到其他物联网节点上,应用领域广泛。
1系统总体方案
图像采集系统是根据某种特定的使用目的和应用条件,由图像采集、图像存储、图像传输和系统控制等相关电子设备和传输介质组成的一个有机整体。
图1是系统的总体框图,系统主要由单片机、图像传感器、Flash图像存储器组成。图像传感器负责图像的采集,采集的图像数据由单片机实时读取。图像传感器的分辨率为240×320,数据量为150KB,而单片机的内部RAM只有2K,存不下一帧图像,所以选择了一款Flash作为图像存储器,单片机将读取的图像数据转存人Flash图像存储器。由于图像数据转存入Flash需要占用数据采集的时间,这就导致单片机会错过部分数据的采集,根据所采图像为静态图像这一应用背景,错过的数据可通过下两帧图像替代,由此确定了用3帧图像拼成一幅图像的算法。等一幅图像采集转存完毕,单片机再从Flash图像存储器中读取图像数据,通过RS232口传输到上位机。
图1 系统总体框图
2系统硬件设计
2.1 图像传感器系统
SP0828是一款完整的1/13英寸QVGA格式COMS图像传感器芯片。它支持RGB565、YUV422、RawBayer、Format图像格式,最高像素为240×320,最高帧速率为30帧/s,能够满足物联网传感节点图像采集的要求。SP0828可工作在3种模式下:普通sensor、EMI、SPI;3种模式的选择可通过I2C总线控制内部可编程功能寄存器来实现。该系统采用SPI模式,RGB565格式图像输出。
2.2 STM8单片机
STM8单片机是系统的控制中心,协调着整个系统的运作,所以必须要有较高的响应速度和丰富的外设资源。系统选用高性能、低功耗的8位微处理器STM8S207S6。它运行速度快,最高可以达到24M。它的内部资源丰富,拥有32KB的系统内可编程Flash,2KB的内部RAM,l024B的EEPROM,2个可编程的串行UART接口,一个最高速度可达400bit/s的硬件I2C接口,一个可工作在主从模式的最高速度可达10bit/s的硬件SPI接口等。并且它的开发工具简单,易于使用,价格便宜,开发资料多。
因此,选用该款单片机不仅不需要为系统配置额外器件,而且大大降低了整个系统的成本及缩短了开发时间。
2.3 Flash图像存储器
STM8S207S6内部RAM为2KB,一幅240×320分辨率图像的大小为150KB,内部RAM不足以存下该分辨率的图像,所以系统选用一款Flash存储器SST25VF020作为外挂图像存储器。SST25VF020是SST25VF系列产品中的一员,其芯片具有以下特点:总容量为256KB;单电源读和写操作,工作电压为2.7~3.3V;低功耗,工作电流为7mA,等待电流为3μA;SPI接口,可接受SPI时钟频率高达33MHz,快速编程、快速擦除、快速读取等,该系列特点满足图像存储的要求。2.4单片机与图像传感器、图像存储器的连接STM8单片机与SP0828COMS图像传感器、SST25VF020Flash图像存储器的硬件连接如图2所示。STM8单片机通过硬件12C接口对图像传感器内部寄存器进行初始化,通过硬件SPI接口接收图像传感器发送的数据。因为Flash图像存储器也是SPI接口,所以图像存储器与图像传感器分时复用STM8单片机的硬件SPI接口。
图2 硬件连接框图
各接口代表的意义如下:SPI_CS:图像传感器SPI接口片选,低电平有效,只有该接13为低电平,图像传感器才能接收单片机的SPI时钟,然后往单片机传送数据。该引脚连接单片机的PD7普通I/O口。ECLK:图像传感器的主时钟输入引脚,连接单片机的CLK_CCO口。单片机通过该口为图像传感器提供16MHz的主时钟。SPI_RD:图像传感器的图像控制信号输入脚,该引脚控制图像传感器下一帧图像是否到来,高电平有效,该13连接单片机的PB6普通I/O口。SPI_CLK:图像传感器SPI数据输出的时钟信号输入脚,该引脚连接单片机硬件SPI的SPI_SCK口。单片机通过该引脚为图像传感器提供采数时钟,图像传感器根据采数时钟向单片机传输数据。
SPI_SDA:图像传感器SPI数据输出的数据信号输出脚,该引脚连接单片机硬件SPI的SPI_MISO口。单片机通过该引脚采集数据。SPI_INT:图像传感器的中断申请信号。图像传感器把每帧图像分成几次中断,单片机响应中断,在中断服务程序里接收数据。该引脚连接单片机PIM具有外部中断接收功能的I/O口。SBDA、SCLK:图像传感器I2C接口的数据引脚和时钟引脚,连接单片机硬件I2C接口的I2C_SDA和I2C_SCL,是单片机对图像传感器内部寄存器读写操作的数据总线和时钟总线。PWDN:图像传感器初始化信号线,该引脚连接单片机的PC2普通I/0口。
该信号线要在图像传感器上电的过程中拉低,只有该引脚在低电平的情况下,图像传感器才能正常工作。SST_CE:FlashSPI接口的片选引脚,低电平有效,该引脚连接单片机的PD0普通I/O口。SST_SO、SST_SI:FlashSPI接口的数据引脚,连接单片机SPI_MISO和SPI_MOSI口,与图像传感器的SPI_SDA分时复用SPI_MISO口。SST_SCK:HashSPI接口的时钟信号输入引脚,连接单片机的SPI_SCK口,与图像传感器的SPI_CLK分时复用SPI_SCK口。
3系统软件设计
3.1主程序的设计
系统软件可分为:图像传感器模块、图像存储器模块、图像的多帧采集和拼接模块、串口数据传输模块。其基本流程图如图3所示。为了尽量提高单片机的处理速度,将系统的时钟频率设置为最高,即16MHz。
图3 主程序流程图
3.2图像传感器模块软件设计
根据SP0828CMOS数字图像传感器的工作原理和工作流程,图像传感器模块包括了图像传感器上电初始化、图像传感器寄存器初始化、图像数据采集3个部分。
3.2.1 图像传感器上电初始化
图像传感器上电初始化,就是图像传感器在上电结束但尚未开始工作的时候,对图像传感器芯片提供主时钟、初始化信号线拉低等一系列的操作,以使图像传感器能够正常工作或者获得最佳的工作状态。其主要流程如图4所示。
图4 图像传感器上电初始化时序图
DVDD28&AVDD连接电源,DVDD28&AVDD拉高即是上电。在上电之后,延时至少10岬,初始化信号线PWDN拉低。然后延时至少110μs,单片机为图像传感器提供主时钟,为使图像传感器工作在最快的速度,单片机为图像传感器提供最高16MHz的时钟。最后延时至少20clock,单片机通过I2C接口对图像传感器内部寄存器进行初始化。上电结束。
3.2.2图像传感器内部寄存器
初始化CMOS图像传感器采用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协议采集CMOS图像传感器的图像数据。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点优势:第一,价格低廉,有较强的市场竞争力;第二,方法新颖,提出了一种多帧图像拼接成一幅图像的方法,解决了单片机处理速度慢的问题,取得了很好的试验效果;第三,系统体积小,结构简单,实时性好,能以非常低的成本附加到其他物联网传感节点上,使物联网节点具有采集和传输图像的功能,更大程度上方便用户使用。