国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于STM32F407的圖像采集系統(tǒng)設(shè)計(jì)*

2016-07-13 10:36:50任志敏
山西電子技術(shù) 2016年3期
關(guān)鍵詞:圖像采集

任志敏

(常州紡織服裝職業(yè)技術(shù)學(xué)院機(jī)電工程系,江蘇 常州 213164)

?

基于STM32F407的圖像采集系統(tǒng)設(shè)計(jì)*

任志敏

(常州紡織服裝職業(yè)技術(shù)學(xué)院機(jī)電工程系,江蘇 常州 213164)

摘要:為了解決工業(yè)產(chǎn)品表面缺陷檢測等需求,需要設(shè)計(jì)一款低成本的,具有普遍使用價值的數(shù)字圖像采集系統(tǒng)。以Cortex-M4為內(nèi)核的STM32F407VG控制器以其特有的DCMI接口無縫連接OV7725圖像傳感器,采集的圖像源數(shù)據(jù)通過USB接口傳輸?shù)絇C等上位機(jī)。

關(guān)鍵詞:圖像采集;STM32F407;OV7725;USB

隨著互聯(lián)網(wǎng)+技術(shù)和工業(yè)4.0技術(shù)的不斷推進(jìn),對于自動化技術(shù),工業(yè)機(jī)器人技術(shù)的要求越來越高,需求越來越多。對于一些工業(yè)產(chǎn)品的檢測,比如產(chǎn)品表面是否有缺陷,傳統(tǒng)的做法通常是人工檢測,在現(xiàn)有條件下,設(shè)計(jì)出一款高效,低成本,可靠性有保障的自動檢測系統(tǒng)替代人工檢測系統(tǒng)具有現(xiàn)實(shí)的需求。要實(shí)現(xiàn)自動檢測系統(tǒng),首先要解決的就是圖像的采集和識別,本文正是基于這一需求嘗試解決和實(shí)現(xiàn)一款低成本的,有益的,具有普遍使用價值的圖像采集系統(tǒng)。

1總體結(jié)構(gòu)設(shè)計(jì)

本文的設(shè)計(jì)需求是下位機(jī)采集攝像頭的像素信號,通過USB接口傳送到PC端上位機(jī)顯示并處理。單從需求的角度出發(fā),首先需要選擇目前主流使用的控制器和圖像感光元件,使之符合低成本、具有普遍使用價值等特點(diǎn)。

通過比較研究,控制器使用基于Cortex-M4內(nèi)核的ST公司的STM32F407VG。32位的Cortex-M4內(nèi)核處理器除了具備低功耗、低成本和易于使用的優(yōu)點(diǎn)外,還強(qiáng)化了運(yùn)算能力,增加了浮點(diǎn)、DSP、并行計(jì)算等,用于滿足控制和信號處理混合處理的需求。STM32F407VG控制器是有ST(意法半導(dǎo)體)公司推出的基于Cortex-M4內(nèi)存的32位嵌入式CPU,其最高主頻可達(dá)168 MHz,集成1 024 KByte的Flash,192 Kbyte的SRAM,具有DCMI(數(shù)字?jǐn)z像頭接口)和USB OTG FS接口[2]。

OV7725是Omnivision(美國豪威)公司生產(chǎn)的CMOS感光芯片,其最大分辨率為640×480,30萬像,可以設(shè)置不同分辨率。OV7725支持YUV,RGB等不同圖像格式的數(shù)據(jù)輸出。OV7725主要有三類引腳:一是D0~D9十個數(shù)字信號輸出引腳,本文使用D9~D2八個數(shù)字信號引腳;二是VSYNC(幀輸出),HREF(行輸出),PCLK(像素信號輸出)三個控制引腳;三是SCCB_D,SCCB_C兩個寄存器配置引腳[1]。

不管是STM32F407VG還是OV7725都是目前主流使用的控制器和圖像傳感器,而且STM32F407集成了DCMI接口、I2C接口和USB接口,DCMI接口可以無縫對接OV7725的數(shù)據(jù)和控制引腳,I2C接口可以用來連接OV7725的SCCB引腳,USB接口可以作為與PC上位機(jī)通信的接口。因此結(jié)合需求和選型,本文設(shè)計(jì)了如圖1所示的總體設(shè)計(jì)方案。

2軟件設(shè)計(jì)

2.1軟件構(gòu)思

整個圖像采集系統(tǒng)的數(shù)據(jù)流程是PC端上位機(jī)程序通過USB接口發(fā)起采集信號,然后STM32F407VG控制OV7725獲取一幀圖像數(shù)據(jù),最后通過USB接口傳輸回PC端并顯示。

軟件設(shè)計(jì)主要分成三個部分:一是STM32F407VG通過DCMI接口采集OV7725的圖像信號;二是采集的信號通過USB傳輸?shù)絇C端;三是PC端上位機(jī)程序控制和顯示程序。

圖像采集首先需要考慮的問題是輸出數(shù)據(jù)的格式和分辨率大小。為了使得本圖像采集系統(tǒng)更具有通用性,因此PC端上位機(jī)程序設(shè)計(jì)接收YUV和RGB Raw Bayer兩種圖像格式數(shù)據(jù)輸出。輸出圖像分辨率的大小由需求和STM32F407VG本身的SRAM大小決定。STM32F407VG的SRAM由可供所有AHB主控總線訪問的(112+16)Kbyte和只供CPU通過數(shù)據(jù)總線訪問的64 Kbyte組成,結(jié)合實(shí)際需求,本文設(shè)計(jì)的OV7725一幀圖像數(shù)據(jù)輸出分辨率大小為128×120。OV7725 YUV輸出的格式之一是Y U Y V Y U Y V…,RGB Raw Bayer輸出格式為R G R G…,G B G B…,因此一幀YUV數(shù)據(jù)占據(jù)128×120×2=30 720 Byte內(nèi)存空間,而一幀RGB Raw Bayer數(shù)據(jù)占據(jù)128×120=15 360 Byte內(nèi)存空間。

2.2下位機(jī)程序設(shè)計(jì)

STM32F407VG通過DCMI接口采集OV7725圖像信號比較簡單,主要就是配置和設(shè)置等初始化工作,程序流程如圖2所示。

如前文所述,一幀YUV數(shù)據(jù)的存儲空間需要30 720 Byte,因此首先聲明一個全局?jǐn)?shù)組用于存放圖像數(shù)據(jù),需要注意的是,這個全局?jǐn)?shù)組需要用4個對齊的方式聲明:

__align(4) u8 rawpixel[30720];

SCCB初始化用到STM32F407VG的PB10和PB11兩個引腳,可以用通用IO模擬SCCB時序和STM32F407VG I2C自帶的庫函數(shù)實(shí)現(xiàn)SCCB兩種方式與OV7725寄存器配置引腳通信。OV7725寄存器配置主要包括配置YUV和RGB Raw Bayer格式輸出,以及分辨率設(shè)置。配置成YUV,輸出順序?yàn)閅 U Y V…的寄存器配置是:

SCCB_WriteReg(0x12,0x40);

SCCB_WriteReg(0x0C,0x10);

配置成RGB Raw Bayer的寄存器配置是:

SCCB_WriteReg(0x12,0x43);

配置分辨率為128x120輸出的寄存器配置是:

// ((int)0x20 << 2) | (0x00 & 0x03) = 128

SCCB_WriteReg(0x29,0x20);

// ((int)0x3C << 1) | ( (0x00 & 0x04) >> 2) = 120

SCCB_WriteReg(0x2C,0x3C);

SCCB_WriteReg(0x2A,0x00);

根據(jù)OV7725的說明文檔,圖像寬度輸出的像素大小是由0x29號寄存器值左移兩位與0x2A號寄存器值的低兩位進(jìn)行位或運(yùn)算,圖像高度輸出的像素值是由0x0C號寄存器值左移一位與0x2A號寄存器值的第2位進(jìn)行位或運(yùn)算。

DCMI接口初始化主要是把STM32F407VG連接OV7725的引腳設(shè)置成數(shù)字和控制引腳功能,需要特別注意的是默認(rèn)情況下,OV7725的幀信號VSYNC是低電平有效,行信號HREF是高電平有效,但是在DCMI初始化時,要求設(shè)置的是VSYNC和HREF無效時電平信號狀態(tài)。

DCMI的DMA傳輸初始化設(shè)置DMA的參數(shù),主要是把DMA存儲地址設(shè)置成圖像數(shù)據(jù)存儲數(shù)組的首地址。所有初始化工作完成后就等待上位機(jī)發(fā)出開始采集的命令。

下位機(jī)第二部分程序是通過USB接口接收上位機(jī)命令,以及傳輸圖像采集數(shù)據(jù)到PC端。STM32F407VG支持USB主機(jī)和從機(jī)功能,完全符合USB2.0規(guī)范的On-The-Go補(bǔ)充標(biāo)準(zhǔn),主機(jī)支持LS(低速)和FS(全速)收發(fā)器,從機(jī)支持FS(全速)收發(fā)器,本文把STM32F407VG的USB接口設(shè)置成USB從機(jī)功能,接受PC端USB主機(jī)控制。STM32F407VG支持控制、大塊數(shù)據(jù)、中斷和同步四種傳輸方式??紤]到本文一幀圖像數(shù)據(jù)量不是很大,因此文本USB采用控制傳輸方式。雖然ST公司提供的豐富的USB驅(qū)動庫函數(shù),程序設(shè)計(jì)時調(diào)用相應(yīng)的庫函數(shù)即可,但是需要用戶自定義USB參數(shù),包括USB設(shè)備描述,配置描述,接口描述和端點(diǎn)描述,主要需要設(shè)置PID,VID,控制端點(diǎn)包長度等。設(shè)置好參數(shù)以后,直接調(diào)用USB初始化函數(shù):

USBD_Init(&USB_OTG_dev,

USB_OTG_FS_CORE_ID,&USR_desc,

&CAM_cb, &USR_cb);

這五個參數(shù)的含義分別是:

USB_OTG_dev: 申明一個USB的全局句柄實(shí)例,用于存儲USB通信中USB內(nèi)核需要使用的的各種變量、狀態(tài)和緩存等,所有有關(guān)USB的操作都需要用到這個句柄實(shí)例。

USB_OTG_FS_CORE_ID:決定該USB是高速還是全速設(shè)備。

USR_desc:USB設(shè)備描述列表

CAM_cb:USB通信的回調(diào)函數(shù)。

USR_cb:用于處理USB連接,斷開等操作時用戶處理的額外信息。

初始化USB后,USB收發(fā)過程中會調(diào)用CAM_cb中定義的回調(diào)函數(shù),由于本文采用USB控制傳輸,因此USB通信通過ep0收發(fā)數(shù)據(jù)。根據(jù)USB的規(guī)范,控制端傳輸主要是由一個setup包組成,其C語言定義結(jié)構(gòu)如下:

typedef struct usb_setup_req {

uint8_t bmRequest;

uint8_t bRequest;

uint16_t wValue;

uint16_t wIndex;

uint16_t wLength;

} USB_SETUP_REQ;

其中bmRequest描述了USB數(shù)據(jù)傳輸方向,請求類型等參數(shù),本文采用類請求;bRequest是描述符的請求類型,包括標(biāo)準(zhǔn)請求類型和用戶自定義請求類型;wValue是根據(jù)不同的請求而設(shè)置不同的值,一般用于傳送參數(shù);wIndex是根據(jù)不同的請求而設(shè)置不同的值。一般用來說明端點(diǎn)號或者說明接口標(biāo)識;wLength是根據(jù)請求來決定下一階段發(fā)送數(shù)據(jù)的長度,在設(shè)備描述符里面設(shè)定為64字節(jié)。根據(jù)USB的setup包描述,本文設(shè)定了表1的USB通信請求。

其中bRequest值為01,03,04為USB傳輸?shù)腛UT方向,即從PC到STM32F407VG,02為USB傳輸?shù)腎N方向,即從STM32F407VG到PC。

表1 USB通信請求

2.3上位機(jī)程序

PC端上位機(jī)的USB驅(qū)動程序采用libusb-win32開源USB驅(qū)動程序庫,上位機(jī)采用VC6編譯器,通過調(diào)用libusb-win32的API實(shí)現(xiàn)與STM32F407VG的USB接口通信。

libusb-win32是由libusb衍生出來的,提供了一系列符合USB規(guī)范的USB操作API開源庫,即用戶程序可以通過調(diào)用libusb-win32的API來調(diào)用操作系統(tǒng)內(nèi)核的底層即可[3]。

libusb-win32幾乎支持所有的windows操作系統(tǒng),其后續(xù)版本支持32位和64位win7/8/10,本文使用的是1.1.6.0版本,PC端的USB驅(qū)動程序和上位機(jī)程序在win7 32/64和win10 64位系統(tǒng)通過測試。PC端USB驅(qū)動程序可以很方便利用libusb-win32提供的inf-wizard工具生成。如圖3所示。

圖3 libusb-win32驅(qū)動程序生成工具截圖

只要填入和下位機(jī)設(shè)置一樣的VID和PID就可以生成與PC平臺相符合的驅(qū)動程序。PC端程序的程序流程圖如圖4所示。

圖4 PC端程序流程圖

打開USB設(shè)備就是調(diào)用libusb-win32的API初始化usb接口,通過VID和PID查找到對應(yīng)的USB設(shè)備,打開并配置好接口;接下來根據(jù)表1發(fā)出對應(yīng)的命令值,控制下位機(jī)配置OV7725是YUV還是RGB Raw Bayer格式輸出;配置完成后,再次發(fā)出采集命令等待接收一幀圖像數(shù)據(jù),最后顯示。PC端程序的窗口截圖如圖5所示。

圖5 PC端上位機(jī)程序窗口截圖

通過USB監(jiān)控采集的數(shù)據(jù)看,控制斷點(diǎn)傳輸1 024個字節(jié)需要時間大約是19.95 ms,即通信速率約410 Kbps。

3結(jié)束語

本文以目前主流使用的STM32F4系列控制器和OV7725圖像傳感器,實(shí)現(xiàn)了通過USB的控制事務(wù)通道傳輸圖像Raw數(shù)據(jù)的圖像采集系統(tǒng),在以后的設(shè)計(jì)中,可以嘗試通過USB的大塊數(shù)據(jù)事務(wù)通道傳輸圖像數(shù)據(jù),加快數(shù)據(jù)傳輸速率。

參考文獻(xiàn)

[1]Ommvision.OV7725 Datasheet [EB/OL].(2007-12-17).http://www.zhopper.narod.ru/mobile/ov7725_full.pdf

[2]ST.STM32F407VG Datasheet.[EB/OL].(2012-1).http://pdf1.alldatasheet.com/datasheet-pdf/view/504999/STMICROELECTRONICS/STM32F407VG.html.

[3]Libusb.[EB/OL].(2014-06-01).http://www.libusb.org/wiki/libusb-win32.

A Design of Image Capture System

Ren Zhimin

(DepartmentofElectromechanicalEngineering,ChangzhouTextileGarmentInstitute,ChangzhouJiangsu213164,China)

Abstract:In order to detect the surface flaw of industrial products, it is necessary to design a low-cost and useful digital image capture system. With the Cortex-M4 core, the STM32F407VG controller seamlessly connects OV7725 image sensor by DCMI interface. The image raw data is transferred from the controller to PC and other hosts through USB.

Key words:image capture; STM32F407; OV7725; USB

收稿日期:2016-01-16

基金項(xiàng)目:常州紡織服裝職業(yè)技術(shù)學(xué)院科研基金資助項(xiàng)目(CFK201505)

作者簡介:任志敏(1981- ),男,江蘇常州人,講師,工程師,碩士,研究方向:機(jī)器視覺,嵌入式系統(tǒng)。

文章編號:1674- 4578(2016)03- 0061- 03

中圖分類號:TP393.11

文獻(xiàn)標(biāo)識碼:A

猜你喜歡
圖像采集
機(jī)器視覺技術(shù)的發(fā)展及其應(yīng)用
科技視界(2016年25期)2016-11-25 19:53:52
視覺拉線檢測器的設(shè)計(jì)與實(shí)現(xiàn)
科技視界(2016年25期)2016-11-25 09:27:34
基于ARM—Linux的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的設(shè)計(jì)
視覺導(dǎo)航系統(tǒng)中圖像采集及處理技術(shù)綜述
科技視界(2016年24期)2016-10-11 12:57:04
基于ARM處理器的指紋識別技術(shù)研究
噴霧作業(yè)效果檢測方法的研究
静安区| 明星| 金坛市| 依兰县| 和林格尔县| 青川县| 醴陵市| 浮山县| 达孜县| 乐清市| 壤塘县| 积石山| 子长县| 阿克| 宁武县| 芦山县| 故城县| 乡宁县| 河曲县| 苍南县| 祁门县| 禹州市| 福州市| 鞍山市| 甘肃省| 麻江县| 永城市| 东丽区| 宜州市| 乌兰察布市| 九台市| 镇坪县| 信丰县| 双江| 珲春市| 桑日县| 玉屏| 宜兰市| 彰化市| 中西区| 碌曲县|