基于STM32的嵌入式雙目圖像采集系統(tǒng)設(shè)計(jì)
1 引言
隨著圖像處理技術(shù)及嵌入式系統(tǒng)的發(fā)展,利用嵌入式系統(tǒng)進(jìn)行圖像處理,已使如視頻監(jiān)控、視頻電話和視頻會(huì)議等應(yīng)用成為可能。嵌入式系統(tǒng)上進(jìn)行圖像采集則是實(shí)現(xiàn)這些應(yīng)用的前提[1~2]。
雙目立體視覺通常由兩個(gè)攝像頭從兩個(gè)不同的角度,同時(shí)獲取外界物體的兩幅圖像,或由單獨(dú)一個(gè)攝像頭在不同時(shí)間、不同位置獲取外界物體的兩幅圖像,并基于視差的原理來獲取外界物體的三維幾何信息,復(fù)現(xiàn)外界物體的形狀和位置。
目前已有很多方案實(shí)現(xiàn)在嵌入式平臺(tái)上的圖像采集。本文基于嵌入式的圖像采集系統(tǒng)選擇了意法半導(dǎo)體(ST)公司生產(chǎn)的STM32F103ZET6芯片為主控芯片,F(xiàn)IFO結(jié)構(gòu)的AL422B芯片實(shí)現(xiàn)圖像數(shù)據(jù)緩存,SD卡實(shí)現(xiàn)圖像存儲(chǔ)以及四線制電阻觸摸屏實(shí)現(xiàn)外部控制[3]。實(shí)現(xiàn)通過OV7670雙攝像頭采集圖像數(shù)據(jù),經(jīng)主芯片控制存儲(chǔ)、顯示[4]。
2 嵌入式主控芯片介紹
ARM Cortex-M 處理器是一系列定位于深度嵌入式開發(fā)應(yīng)用設(shè)計(jì)的。STM32F103ZET6是由意法半導(dǎo)體(ST)公司生產(chǎn)的新一代Cortex-M3內(nèi)核處理器,具有以下特點(diǎn):
性能和能效:具有高性能和低動(dòng)態(tài)能耗,在90nm基礎(chǔ)上提供了12.5DMIPS/mW 的性能,Cortex-M3處理器確保對(duì)于同時(shí)需要低能耗和出色性能的應(yīng)用不存在折衷。
豐富的連接:功能和性能的巧妙組合使基于Cortex-M3的設(shè)備可以有效處理多個(gè)I/O 通道和協(xié)議標(biāo)準(zhǔn),如USB OTG(On-The-Go)[5]。
3 μC/OS-II操作系統(tǒng)介紹
μC/OS-II操作系統(tǒng)實(shí)時(shí)性有保障,延時(shí)可預(yù)測(cè),代碼可小到2K,完全可以滿足設(shè)計(jì)需要。C/OS-II移植過程中只選擇用戶和系統(tǒng)兩種模式。μC/OS-II包括任務(wù)調(diào)度、時(shí)間管理、內(nèi)存管理、資源管理(信號(hào)量、郵箱、消息隊(duì)列)四大部分,沒有文件系統(tǒng)、網(wǎng)絡(luò)接口、輸入輸出界面。它的移植只與4個(gè)文件相關(guān):匯編文件(OS_CPU_A.ASM)、處理器相關(guān)C文件(OS_CPU.H、OS_CPU_C.C)和配置文件(OS_CFG.H)[6~7]。
4 系統(tǒng)硬件設(shè)計(jì)
系統(tǒng)采用ARM 處理器作為核心,負(fù)責(zé)對(duì)系統(tǒng)設(shè)備初始化、數(shù)據(jù)總線仲裁、承載操作系統(tǒng)運(yùn)行;為了彌補(bǔ)圖像傳輸過程中的時(shí)鐘偏差和圖像顯示不流暢等缺點(diǎn),采用AL422B圖像緩存芯片;圖像經(jīng)主芯片控制將于液晶屏顯示,并存貯于SD卡中。系統(tǒng)結(jié)構(gòu)圖如圖1所示[8]。
4.1 核心器件選型
系統(tǒng)的核心ARM 處理器使用由意法半導(dǎo)體公司生產(chǎn)的新一代Cortex-M3內(nèi)核的STM32F103ZET6,具有高性能和低動(dòng)態(tài)能耗,帶有FSMC 外設(shè)可以外掛NAND FLASH、SRAM等,支持代碼從擴(kuò)展的外部存儲(chǔ)器中直接運(yùn)行,而不需要首先調(diào)入內(nèi)部SRAM,便于系統(tǒng)的數(shù)據(jù)傳輸[9]。
圖像傳感器采用Ommivision公司的OV7670 CMOS攝像頭,較CCD 攝像頭具有較高的性價(jià)比,具有標(biāo)準(zhǔn)的SCCB接口,兼容I2 C接口,其高靈敏度和自動(dòng)畫面控制功能滿足檢測(cè)系統(tǒng)的精度要求[10]。
4.2 檢測(cè)電路設(shè)計(jì)
系統(tǒng)采用集成了A/D和DSP的圖像傳感器模塊,通過SCCB總線,由STM32完成定義相應(yīng)寄存器和初始化;通過寄存器可設(shè)置圖像數(shù)據(jù)輸出格式,系統(tǒng)選擇RGB565格式輸出,一個(gè)像素點(diǎn)占16位,而像素?cái)?shù)據(jù)總線為D0-D7,因此用兩個(gè)PCLK時(shí)鐘周期分別輸出高8位和低8位;
圖2 圖像傳感器模塊接口
XCLK是由CPLD 提供的輸入時(shí)鐘;VSYNC、HREF分別在每幀、每行開始和結(jié)束時(shí)電平發(fā)生跳變,供CPLD 判斷[11]。圖像傳感器模塊接口如圖2所示。
4.3 數(shù)據(jù)緩存電路設(shè)計(jì)
數(shù)據(jù)緩存使用AverLogic公司推出的一個(gè)存儲(chǔ)容量為393216字節(jié)×8位的FIFO存儲(chǔ)芯片AL422B,其所有的尋址、刷新等操作都由集成在芯片內(nèi)部的控制系統(tǒng)完成。數(shù)據(jù)緩存接口如圖3所示,DO0-DO7是8位寫出數(shù)據(jù)總線;DI0-DI7是8位寫入數(shù)據(jù)總線;CE引腳為片選,OE為輸出控制,WE是寫操作控制;通過STM32的FSMC與外設(shè)連接。采用AL422B芯片對(duì)連續(xù)的數(shù)據(jù)流進(jìn)行緩存,防止在進(jìn)機(jī)和存儲(chǔ)操作時(shí)丟失數(shù)據(jù);數(shù)據(jù)集中起來進(jìn)行進(jìn)機(jī)和存儲(chǔ),避免了頻繁的總線操作,減輕CPU的負(fù)擔(dān)。
圖3 數(shù)據(jù)緩存接口圖
4.4 實(shí)時(shí)顯示電路設(shè)計(jì)
系統(tǒng)的實(shí)時(shí)顯示采用了ILI9325主控的2.4寸65536色TFT液晶屏,兼容系統(tǒng)需要的16位總線寬度的RGB格式圖像,最高可顯示320*240 分辨率;內(nèi)部集成圖像RAM,因而將其接入STM32的FSMC外設(shè)控制器,采用LCD8080i接口方式;CS為片選,RD、RW 分別為讀寫控制,RS是寄存器選擇引腳,如圖4所示[13]。
5 系統(tǒng)軟件設(shè)計(jì)
STM32F103ZET6編程在Keil uVision4環(huán)境下通過C語言實(shí)現(xiàn)。系統(tǒng)的主流程如圖5所示。
圖5 系統(tǒng)的軟件流程
5.1 文件OS_CPU.H的編寫
1)μC/OS-II不使用C語言中的short、int、long等于處理器相關(guān)的數(shù)據(jù)類型,而是以移植性更強(qiáng)的整數(shù)數(shù)據(jù)類型代替,這樣直觀、便于移植。所以必須對(duì)操作系統(tǒng)和ARM體系結(jié)構(gòu)的數(shù)據(jù)類型進(jìn)行統(tǒng)一。
2)雖然ARM 處理器對(duì)堆棧向上及向下的兩種增長(zhǎng)模式都予以支持,但是通常系統(tǒng)僅支持堆棧從上往下長(zhǎng),并且是滿遞減堆棧,所以文件中定義堆棧增長(zhǎng)方式的常量OS_STK_GROWTH的值應(yīng)為1.
3)定義聲明使能中斷、結(jié)束中斷、任務(wù)切換等函數(shù)。
5.2 文件OS_CPU.C的編寫
1)任務(wù)堆棧初始化函數(shù)OSTaskStkInit()堆棧的概念在ARM 體系結(jié)構(gòu)和系統(tǒng)移植中非常重要,是在ARM 處理器中利用有限的寄存器完成數(shù)據(jù)和狀態(tài)記錄的載體。在編寫堆棧初始化函數(shù)OSTaskStkInit()之前,必須根據(jù)處理器的結(jié)構(gòu)特點(diǎn)確定堆棧的結(jié)構(gòu),所以需要對(duì)ARM 體系結(jié)構(gòu)有充分的認(rèn)識(shí)。根據(jù)ARM 體系結(jié)構(gòu)每種運(yùn)行模式14個(gè)通用寄存器,有一個(gè)或兩個(gè)狀態(tài)寄存器,很容易該寫出OSTaskStkInit()的代碼。
TCB結(jié)構(gòu)體中OSTCBStkPtr總是指向用戶堆棧最高地址,該地址空間內(nèi)存放用戶堆棧長(zhǎng)度,其上空間存放系統(tǒng)堆棧映像,即:用戶堆??臻g大小=系統(tǒng)堆??臻g大?。?。
2)μC/OS-II分別使用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()來開中斷和開中斷,可以直接在C語言編程中應(yīng)用。
3)可以根據(jù)ARM特點(diǎn)和移植目標(biāo),增加應(yīng)用函數(shù)。例如處理器模式轉(zhuǎn)換函數(shù)、人物初始指令集函數(shù)、鉤子函數(shù)等。
5.3 文件OS_CPU_A.ASM 的編寫
這個(gè)文件采用匯編語言編寫。完成了系統(tǒng)軟中斷的地址分配、相應(yīng)的存儲(chǔ)區(qū)域等,編寫了任務(wù)級(jí)任務(wù)切換函數(shù)OS_TASK_SW()、中斷級(jí)任務(wù)切換函數(shù)OSIntCtxSw()、啟動(dòng)最高優(yōu)先級(jí)任務(wù)函數(shù)0SStartHighRdy()等函數(shù)。完成了C語言和機(jī)器硬件語言的對(duì)接。
6 結(jié)語
本文在基于STM32核心嵌入式μC/OS-II平臺(tái)上利用的、雙向的、可靠的、無重復(fù)的數(shù)據(jù)連接,加上Vxworks系統(tǒng)自身的實(shí)時(shí)性強(qiáng)和可靠性高等優(yōu)點(diǎn),該通信方式完全滿
足某型車載武器系統(tǒng)的高速實(shí)時(shí)網(wǎng)絡(luò)通信要求,在實(shí)際的操作使用中,取得了良好的效果。
立即加入意法半導(dǎo)體技術(shù)社區(qū)