<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于單片機的低成本CMOS圖像采集系統

基于單片機的低成本CMOS圖像采集系統

作者: 時(shí)間:2016-09-20 來(lái)源:網(wǎng)絡(luò ) 收藏

  3系統軟件設計

本文引用地址:http://dyxdggzs.com/article/201609/297210.htm

  3.1主程序的設計

  系統軟件可分為:圖像傳感器模塊、圖像存儲器模塊、圖像的多幀采集和拼接模塊、串口數據傳輸模塊。其基本流程圖如圖3所示。為了盡量提高的處理速度,將系統的時(shí)鐘頻率設置為最高,即16MHz。

  

 

  圖3 主程序流程圖

  3.2圖像傳感器模塊軟件設計

  根據SP0828數字圖像傳感器的工作原理和工作流程,圖像傳感器模塊包括了圖像傳感器上電初始化、圖像傳感器寄存器初始化、圖像數據采集3個(gè)部分。

  3.2.1 圖像傳感器上電初始化

  圖像傳感器上電初始化,就是圖像傳感器在上電結束但尚未開(kāi)始工作的時(shí)候,對圖像傳感器芯片提供主時(shí)鐘、初始化信號線(xiàn)拉低等一系列的操作,以使圖像傳感器能夠正常工作或者獲得最佳的工作狀態(tài)。其主要流程如圖4所示。

  

 

  圖4 圖像傳感器上電初始化時(shí)序圖

  DVDD28&AVDD連接電源,DVDD28&AVDD拉高即是上電。在上電之后,延時(shí)至少10岬,初始化信號線(xiàn)PWDN拉低。然后延時(shí)至少110μs,為圖像傳感器提供主時(shí)鐘,為使圖像傳感器工作在最快的速度,為圖像傳感器提供最高16MHz的時(shí)鐘。最后延時(shí)至少20clock,單片機通過(guò)I2C接口對圖像傳感器內部寄存器進(jìn)行初始化。上電結束。

  3.2.2圖像傳感器內部寄存器

  初始化圖像傳感器采用I2C總線(xiàn)控制其各項功能,簡(jiǎn)單、快捷。I2C總線(xiàn)也是目前圖像傳感器采用最普遍的控制方式。用戶(hù)可以通過(guò)I2C總線(xiàn)改變圖像傳感器內部可編程寄存器的缺省參數來(lái)設置圖像傳感器的工作方式,如時(shí)鐘、幀率、曝光、對比度、亮度等。I2C總線(xiàn)是芯片間串行數據傳輸總線(xiàn),它只用一根數據線(xiàn)SDA和一根時(shí)鐘線(xiàn)SCL即可實(shí)現完善的雙工同步數據傳輸。I2C總線(xiàn)規定,主控制器發(fā)送起始信號表明一次數據傳輸的開(kāi)始,然后為尋址字節,尋址字節由高7位地址位和低1位方向位組成。方向位表明主控制器與被控制器之間的數據傳輸方向,當該位為“0”時(shí)表明主控制器對被控制器的寫(xiě)操作,為“1”時(shí)表明主控制器對被控制器的讀操作。尋址字節后是按照指定地址讀寫(xiě)操作的數據字節與應答位。數據傳送完成后主控制器必須發(fā)送終止信號。I2C協(xié)議的時(shí)序如圖5所示。

  

 

  圖5 I2C總線(xiàn)的數據傳送時(shí)序圖

  STM8單片機有專(zhuān)門(mén)的硬件I2C接口,因此可通過(guò)該接口實(shí)現與圖像傳感器的通信。該系統中STM8單片機的I2C_SDA數據線(xiàn)和I2C_SCL時(shí)鐘線(xiàn)分別連接圖像傳感器的SBDA數據傳輸口和SCLK時(shí)鐘傳輸口。通過(guò)上述對I2C協(xié)議的分析,設計了如圖6所示的I2C總線(xiàn)數據傳輸流程。

  

 

  圖6 I2C總線(xiàn)數據傳輸流程

  I2C總線(xiàn)操作的典型時(shí)序信號有起始位信號、終止位信號、發(fā)送地址、發(fā)送數據、接收數據,所有的時(shí)序信號都是通過(guò)對單片機硬件I2C內部寄存器的操作實(shí)現的。I2C模塊主要功能函數如下:

  (1)讀取圖像傳感器內部寄存器的值unsignedcharI2C_Read(unsignedcharslave—address,unsignedcharregaddress,unsignedcharslave_read_address)/*slave_address是圖像傳感器的地址+寫(xiě)操作符“0”,reg_address是圖像傳感器內部寄存器的地址,slave_read_address是圖像傳感器的地址+讀操作符“1”*/{unsignedcharval;I2C_Start();//啟動(dòng)I2C總線(xiàn),I2C_CR2寄存器最低位置lI2C_SendDAdr(slave_address);//發(fā)送圖像傳感器的地址+寫(xiě)操作符“0”I2C_SendDat(reg_address);//發(fā)送內部寄存器的地址I2C_Start();//啟動(dòng)I2C總線(xiàn),I2C_CR2寄存器最低位置1I2C_SendDAdr(slave_read_address);//發(fā)送圖像傳感器的地址+讀操作符“1”vai=12C_RcvDat();//從I2C接口讀取數據I2C_stop();//釋放I2C總線(xiàn),I2C_CR2寄存器次低位置1retunlval;}(2)讀取圖像傳感器內部寄存器的值unsignedcharI2C_Main(unsignedcharslave_address,unsignedcharreg_address,unsignedcharwrite_data){/*slave_address是圖像傳感器的地址+寫(xiě)操作符“0”,reg_address是內部寄存器的地址,write_data是要寫(xiě)入寄存器的數據*/I2C_Start();//啟動(dòng)I2C總線(xiàn),I2C_CR2寄存器最低位置1I2C_SendDAdr(slave_address);//發(fā)送圖像傳感器的地址+寫(xiě)操作符“0”I2C_SendDat(reg._address);//發(fā)送內部寄存器的地址I2C_SendDat(write_data);//發(fā)送內部寄存器要寫(xiě)入的數據I2C_stop();//釋放I2C總線(xiàn),I2C_CR2寄存器次低位置1

  3.2.3圖像數據的采集

  單片機通過(guò)SPI協(xié)議采集圖像傳感器的圖像數據。SPI總線(xiàn)是一種同步串行外設接口,允許MCU與各種外圍接口器件以串行方式進(jìn)行通信。SPI總線(xiàn)一般采用4根線(xiàn):串行時(shí)鐘線(xiàn)SCK、主機輸入從機輸出數據線(xiàn)MISO、主機輸出從機輸入數據線(xiàn)MOSI、低電平有效的使能信號線(xiàn)SS。因為在系統的SPI數據傳輸過(guò)程中,單片機只采集圖像傳感器的數據,沒(méi)有向圖像傳感器的數據輸出,所以系統選用SPl只接收模式,這樣只需要一根串行時(shí)鐘線(xiàn)SCK和一根主機輸入從機輸出數據線(xiàn)MISO即可,節省硬件資源。SPI接口的最大特點(diǎn)是由主設備時(shí)鐘信號的出現與否來(lái)決定主從設備之間的通信。在從設備被使能時(shí),一旦檢測到主設備的時(shí)鐘信號,數據開(kāi)始傳輸,時(shí)鐘信號無(wú)效后,傳輸結束。在系統中,單片機作為主設備,圖像傳感器作為從設備,圖像傳感器在時(shí)鐘的下降沿變數,單片機在時(shí)鐘的上升沿采集數據,圖像傳感器接收單片機的時(shí)鐘信號SPI協(xié)議的時(shí)序如圖7所示。

  

 

  圖7 SPI總線(xiàn)的數據傳送時(shí)序圖

  STM8單片機有專(zhuān)門(mén)的硬件SPI接口,因此可通過(guò)該接1:2采集圖像數據。圖像傳感器SPI時(shí)鐘輸入引腳連接單片機的SPI_SCK口,圖像傳感器圖像數據輸出引腳連接單片機SPI_MISO口,片選SPI_CS引腳連接單片機的普通I/O口PD7。然后對硬件SPI的參數進(jìn)行配置,主要包括時(shí)鐘頻率、工作模式、主從模式、空閑時(shí)候電平狀態(tài)、觸發(fā)邊沿等,這些參數都可以通過(guò)單片機硬件SPI的內部寄存器的配置實(shí)現。SPI總線(xiàn)讀取圖像數據的流程如下:unsignedcharspinet_byte(void){while(!(SPI_SR&0x02));//等待總線(xiàn)空閑SPI_DR=Oxff;//產(chǎn)生時(shí)序信號硬件SPI在且僅在發(fā)送數據的時(shí)候才產(chǎn)生SCK時(shí)鐘while(!(SPI_SR&0x01));//等待數據接收完畢returnSPI_DR;//將接收到的數據返回}

  3.3 Flash模塊軟件設計

  SST25VF020是一款2MbitSPISerialNOR型Flash芯片,在系統中作為圖像存儲器使用。該Flash通過(guò)SPI的串口接收指令和數據,支持3/4的SPI協(xié)議,其工作時(shí)序如圖8所示。

  

 

  圖8 SST25VF020的工作時(shí)序圖

  從上圖可以看出,CE#f氐電平使能芯片正常工作,該芯片在SCK的上升沿讀入信號,在SCK下降沿的時(shí)候輸出信號。STM8單片機有專(zhuān)門(mén)的硬件SPI接口,但是圖像傳感器也需要單片機的硬件sPI接口與之通信,所以系統設計了一種分時(shí)復用單片機硬件SPI接口的方式。CE#片選連接單片機的普通I/O口PD0,該I/O口在不同的時(shí)刻與圖像傳感器的片選PD7分別選中,如此,一個(gè)硬件SPI接口便可操作2個(gè)SPI設備。SPI時(shí)鐘輸入引腳連接單片機的SPI_SCK口,SI讀人信號連接單片機的SPI_MOSI,SO輸出信號連接單片機的SPI_MISO。硬件SPI配置與前文所述圖像數據采集Sial一致。此外,與圖像采集相比,在程序部分還要多加一個(gè)單片機輸出信號函數。

  Flash模塊主要功能函數如下:

  voidsst_send_byte(unsignedcharbyte){while(!(SPI_SR&0x02));//等待總線(xiàn)空閑SPI_DR=byte;//將要寫(xiě)入的數據byte存入SPI_DRwhile(!(SPI_SR&0x01));//等待數據發(fā)送完畢完畢tmp=SPI_DR;//清空接收緩沖區voidflashwrite_byte(unsignedlongaddr,unsignedchardata)//向緩沖區l的指定位置(0—263)寫(xiě)入指定字節}write_en();//寫(xiě)使能命令mss0();//片選端選中,低電平有效send(0x02);//寫(xiě)命令send((unsignedchar)(addr》》16));//發(fā)送數據的地址send((unsignedchar)(addr》》8));send((unsignedchar)addr);send(data);//發(fā)送要寫(xiě)入的數據mssl();//釋放片選}unsignedcharflashreadbyte(unsignedlongaddr)}unsignedcharbyte;mss0();//片選端選中,低電平有效send(0x03);//讀命令send((unsignedchar)(addr》》16));//發(fā)送數據的地址send((unsignedchar)(addr》》8));send((unsignedchar)addr);byte=get();//讀取數據mssl();//釋放片選returnbyte;}

  3.4圖像的多幀采集和拼接模塊軟件設計

  為保存圖像數據,系統引入Flash存儲器,而數據轉存入Flash存儲器需要占用中斷響應時(shí)間,這就導致了中斷響應時(shí)間不夠的問(wèn)題。為解決這個(gè)問(wèn)題,根據所采圖像為靜態(tài)圖像這一應用背景,提出一種多幀圖像的部分采集與拼接算法,在中斷響應時(shí)間中,只讀取圖像傳感器中的圖像數據,而后占用兩次中斷的時(shí)間,把圖像數據轉存入Flash。每幀圖像有160次中斷,每幀圖像只取其1/3,取3幀圖像的數據,即可拼接成一幅完整的圖像。多幀采集方法如圖9所示。圖中,實(shí)線(xiàn)表示捕獲到的中斷,虛線(xiàn)表示因轉存人Flash錯過(guò)的中斷。

  

 

  圖9多幀采集圖像方法示意

  單片機把采集的數據按照采集時(shí)間的順序轉存入Flash數據在Flash中的排列順序如圖10所示。

  

 

  圖10圖像數據在Flash中的存儲順序

  在Flash中讀取圖像數據的時(shí)候,按照中斷次數的先后順序讀出,即第l幀第1次中斷、第2幀第2次中斷、第3幀第3次中斷、第1幀第4次中斷、第2幀第5次中斷……第2幀第158次中斷、第3幀第159次中斷、第1幀第160次中斷。這樣,3幀圖像的數據拼接成一幅完整的圖像。在讀取圖像數據的同時(shí),單片機以2個(gè)字節為單位,拼接成一個(gè)無(wú)符號整型,即一個(gè)像素點(diǎn),通過(guò)RS232接口傳送至上位機。

  4試驗及分析

  圖11是系統的實(shí)物圖,硬件系統面積是(7.5×7.5)cm2,雙層PCB板,系統結構簡(jiǎn)單,運行穩定。系統對圖像的處理速度是4幀/s,滿(mǎn)足實(shí)時(shí)性的要求。圖12為采集的一幅圖像,大小為240×320,圖像格式為bmp,像素格式為RGB565,該圖像是3幀圖像拼接而成,是單片機通過(guò)RS232接口傳輸至上位機,并在顯示器上顯示的。

  

 

  圖11系統實(shí)物圖

  

 

  圖12試驗結果圖像

  5結束語(yǔ)

  介紹了基于STM8單片機的低成本CMOS圖像采集系統的硬軟件構成,與其他嵌入式圖像采集系統相比,有3點(diǎn)優(yōu)勢:第一,價(jià)格低廉,有較強的市場(chǎng)競爭力;第二,方法新穎,提出了一種多幀圖像拼接成一幅圖像的方法,解決了單片機處理速度慢的問(wèn)題,取得了很好的試驗效果;第三,系統體積小,結構簡(jiǎn)單,實(shí)時(shí)性好,能以非常低的成本附加到其他物聯(lián)網(wǎng)傳感節點(diǎn)上,使物聯(lián)網(wǎng)節點(diǎn)具有采集和傳輸圖像的功能,更大程度上方便用戶(hù)使用。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 單片機 CMOS

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>