引言
飛思卡爾智能車比賽已經(jīng)成功舉辦4屆,以攝像頭為主要傳感器的參賽隊(duì)伍大多數(shù)選用了模擬CCD或模擬CMOS攝像頭。本文介紹了數(shù)字式CMOS 攝像頭MT9M011的性能特點(diǎn)和工作方式,給出了MT9M011在基于HCSl2單片機(jī)的智能車控制系統(tǒng)中的應(yīng)用方案,并分析了數(shù)字?jǐn)z像頭的優(yōu)勢(shì)和不足。
1 CMOS圖像傳感器的特點(diǎn)
CMOS圖像傳感器可通過(guò)CMOS技術(shù)將像素陣列與外圍支持電路(如圖像傳感器核心、單一時(shí)鐘、所有的時(shí)序邏輯、可編程功能和A/D轉(zhuǎn)換器)集成在同一塊芯片上。與CCD(電容耦合器件)圖像傳感器相比,CMOS圖像傳感器將整個(gè)圖像系統(tǒng)集成在一塊芯片上,具有體積小、重量輕、功耗低、編程方便、易于控制等優(yōu)點(diǎn);同時(shí),可通過(guò)I2C、SPI等接口配置其曝光時(shí)間、增益控制等功能,可控性強(qiáng)。因此,CMOS圖像傳感器的應(yīng)用已經(jīng)變得越來(lái)越廣泛。
2 MT9M011的性能特點(diǎn)與工作方式
2.1 MT9M011的基本參數(shù)
MT9M011是一款:Mieron公司推出的RGB三基色的130萬(wàn)像素?cái)?shù)字式CMOS攝像頭,具有可編程控制及數(shù)字信號(hào)輸出等功能。其輸出為Bayer彩色格式,圖像尺寸為4.6 mm×3.7 mm,像素尺寸為3.6 μm×3.6 μm,最大分辨率為1 280×1 024,支持的最高時(shí)鐘頻率為25MHz;A/D轉(zhuǎn)換精度為10位,最大信噪比為44 dB,在最高分辨率模式下功耗為129 mW。
MT9M011輸出為逐行掃描的數(shù)字信號(hào),通過(guò)內(nèi)嵌的10位ADC將模擬視頻信號(hào)采樣量化后同步輸出10位數(shù)據(jù)流。同時(shí),MT9M011還提供像素時(shí)鐘(PIXCLK)、行有效信號(hào)(LVAL)、幀有效信號(hào)(FVAL),以及配置MT9M011所需的I2C協(xié)議引腳SCLK和SDAT。
2.2 MT9M011的編程功能
MT9M011有25個(gè)寄存器,涉及攝像頭的各個(gè)方面,通過(guò)與I2C兼容的串行總線時(shí)序讀寫。結(jié)合智能車競(jìng)賽應(yīng)用重點(diǎn)介紹以下寄存器:
?、傩衅鹗技拇嫫?Ox01)和列起始寄存器(Ox02)。這兩個(gè)寄存器決定輸出圖像的起始點(diǎn)坐標(biāo)。利用這兩個(gè)寄存器可以軟件調(diào)節(jié)攝像頭采集到的圖像整體位置。
?、谛袑挾燃拇嫫?0x03)和列寬度寄存器(Ox04)。MT9M011的一大特色就是輸出數(shù)據(jù)的圖像大小可以任意調(diào)整。通過(guò)這兩個(gè)寄存器可以針對(duì)當(dāng)前的應(yīng)用環(huán)境(即賽道)設(shè)置合適的圖像范圍。
③曝光時(shí)間寄存器(Ox09)。該寄存器的值決定了攝像頭采集一幀圖像時(shí)感光元器件的感光時(shí)間。通過(guò)調(diào)整該寄存器值的大小可以直接調(diào)整圖像的成像質(zhì)量。
?、軘?shù)據(jù)讀取模式寄存器(Ox20)。該寄存器可以使輸出的行數(shù)據(jù)和列數(shù)據(jù)減少至1/2或者1/4,也可以使輸出的圖像鏡面對(duì)稱。
⑤增益設(shè)置寄存器。它又包含Greenl分量增益設(shè)置寄存器(Ox2B)、Blue分量增益設(shè)置寄存器(Ox2C)、Red分量增益設(shè)置寄存器 (Ox2D)、Green2分量增益設(shè)置寄存器(Ox2E)和全局增益設(shè)置寄存器(Ox2F)5個(gè)寄存器。由于RGB分量對(duì)同一光源表現(xiàn)出不同的數(shù)值,因此需要針對(duì)不同的光源情況分別調(diào)整前4個(gè)寄存器的值,而這也是這款攝像頭最大的缺點(diǎn)。
2.3 MT9M011的數(shù)字圖像輸出
2.3.1 Bayer彩色格式輸出
MT9M011的輸出為Bayer彩色格式(Bayer color pattern)。這種輸出格式直接將濾波陣列上每一個(gè)像素點(diǎn)對(duì)應(yīng)的保留基色模擬電平值,通過(guò)A/D轉(zhuǎn)換后按時(shí)序先后輸出。圖1展示了這種輸出格式對(duì)應(yīng)的局部像素點(diǎn)陣。其中,黑色像素點(diǎn)為輸出有效數(shù)據(jù)的第一個(gè)點(diǎn)。
2.3.2 MT9M011的輸出信號(hào)時(shí)序
像素?cái)?shù)據(jù)輸出時(shí)序和幀與行有效信號(hào)時(shí)序分別如圖2和圖3所示。像素時(shí)鐘與主時(shí)鐘同頻,在一幀圖像開(kāi)始輸出時(shí)幀有效信號(hào)由低電平變?yōu)楦唠娖剑粠敵鼋Y(jié)束時(shí)由高電平變?yōu)榈碗娖?;而行有效信?hào)則在一行數(shù)據(jù)輸出有效時(shí)由低電平變?yōu)楦唠娖?,一行?shù)據(jù)輸出完成后由高電平變?yōu)榈碗娖?。根?jù)MT9M0ll的輸出信號(hào)時(shí)序就能正確地采集整幀圖像。圖3中,P為幀消隱區(qū),A為有效數(shù)據(jù)區(qū),Q為行消隱區(qū)。
3 MT9M011在智能車控制系統(tǒng)中的應(yīng)用
3.1 硬件設(shè)計(jì)
MT9M011的電平是3.3 V,而HCSl2單片機(jī)系統(tǒng)的I/O電平是5 V,因此需要通過(guò)電平轉(zhuǎn)換芯片將攝像頭輸出數(shù)據(jù)的電平提升到5V。結(jié)合MT9M011的輸出信號(hào)時(shí)序關(guān)系和HCSl2單片機(jī)的特點(diǎn),本文利用HCSl2的 ECT模塊提取MT9M011的幀有效信號(hào)的上升沿,采用ECT模塊對(duì)應(yīng)引腳的普通I/O口功能采集行有效信號(hào)的上升沿。MT9M011的數(shù)據(jù)輸出信號(hào)有 10位,鑒于賽道環(huán)境相對(duì)簡(jiǎn)單,只截取高8位作為攝像頭信號(hào)輸出,既可以保證圖像分辨率,又可節(jié)省HCSl2的存儲(chǔ)空間。HCSl2單片機(jī)本身帶有一個(gè)標(biāo)準(zhǔn)的I2C模塊,直接使用這個(gè)模塊與MT9M011的SCLK和SDAT相接。
3.2 軟件設(shè)計(jì)
3.2.1 HCSl2單片機(jī)I2C模塊配置
HCSl2單片機(jī)提供標(biāo)準(zhǔn)的I2C模塊,SCLK引腳能產(chǎn)生多種時(shí)鐘頻率,支持主從模式,設(shè)有多種標(biāo)志位以供查詢。初始化I2C模塊時(shí)需要完成以下工作:
?、僭O(shè)置IBFD寄存器,使產(chǎn)生的SCLK信號(hào)能夠?qū)T9M011進(jìn)行正常的配置;
?、谠O(shè)置IBEN寄存器位,使能I2C模塊;
?、墼O(shè)置IBCR,確定I2C模塊的主、從模式,收、發(fā)模式以及是否使能中斷功能等。
3.2.2 MT9M011圖像數(shù)據(jù)采集
受限于單片機(jī)時(shí)鐘的約束關(guān)系,HCSl2的通用I/O口無(wú)法檢測(cè)攝像頭像素時(shí)鐘信號(hào)跳變,本文采取以固定周期采集一行數(shù)據(jù)的方法。因此,采集像素?cái)?shù)據(jù)的關(guān)鍵是準(zhǔn)確地采集幀有效信號(hào)的上升沿和行有效信號(hào)的上升沿。選用的方案是:使用HCSl2單片機(jī)的ECT模塊采集幀有效信號(hào)的上升沿,使用ECT 模塊普通端口模式采集行有效信號(hào)的上升沿。
采集對(duì)象要求縱、橫分辨率都不能過(guò)低,而HCSl2內(nèi)部存儲(chǔ)空間有限,無(wú)法為高分辨率提供有利支持。針對(duì)這一矛盾,利用一個(gè)像素
與其周圍點(diǎn)的值的關(guān)聯(lián)性,以及攝像頭所具有的隔行和隔列輸出功能進(jìn)行跳采集。確定了1 280x 480的分辨率和行列均跳4行采集的模式,
同時(shí)軟件上再進(jìn)行一次隔行采集,最終可得80×60=4 800個(gè)像素?cái)?shù)據(jù)。采集數(shù)據(jù)的流程如圖4所示。
3.2.3 采集圖像時(shí)遇到的問(wèn)題及解決方法
(1)攝像頭晶振的選擇
MT9M011晶振的選擇是一個(gè)很重要的問(wèn)題,如果一幀圖像的時(shí)間超過(guò)20 ms,就無(wú)法體現(xiàn)它的主要優(yōu)勢(shì)。同時(shí),也要考慮到HCSl2單片機(jī)的限制,HCSl2的總線頻率最大可達(dá)到32 MHz,而在此條件下如果MT9M011的晶振選取過(guò)大,則每一行采集到的點(diǎn)數(shù)過(guò)少。
通過(guò)式(1)可計(jì)算出MT9M011輸出一幀圖像所需的時(shí)間:
式中:ColNum+HBlanking和RowNum+VBlanking分別表示包含空白數(shù)據(jù)的總列數(shù)和總行數(shù);fcamera表示攝像頭晶振頻率,在一幀圖像大小已經(jīng)確定的情況下,該值越大則一幀時(shí)間越短。
通過(guò)式(2)可計(jì)算出單片機(jī)一行采集像素點(diǎn)的個(gè)數(shù):
式中:RowPixNum表示一行能采集到的數(shù)據(jù);ColNum表示每一行中輸出的像素?cái)?shù)據(jù)個(gè)數(shù);Tcamera是攝像頭晶振,fcamera 的倒數(shù);Cycle表示一個(gè)采集周期使用的機(jī)器周期數(shù),在整個(gè)采集過(guò)程中固定不變的;fbus表示單片機(jī)的總線周期。從式(2)可知,在fbus一定的情況下,camera越小,則一行采集到的數(shù)據(jù)就越少,這樣不利于數(shù)據(jù)分析。
綜合考慮,最終確定使用8 MHz的晶振作為MT9M011的時(shí)鐘,而采用16 MHz晶振作為HCSl2的時(shí)鐘,單行采集80個(gè)點(diǎn),可滿足路徑識(shí)別的需要。
(2)攝像頭曝光時(shí)間和增益的設(shè)置問(wèn)題MT9M011是一款RGB三基色的彩色攝像頭,采集到的數(shù)據(jù)為Bayer彩色格式。由于提取的是賽道上的黑線信息,圖像環(huán)境相對(duì)簡(jiǎn)單,因此這里直接將每一個(gè)分量的值作為該點(diǎn)像素的灰度值處理。
如圖5(a)所示,在使用默認(rèn)曝光時(shí)間和增益時(shí)采集得到的圖像有明顯的隔行噪聲效應(yīng),而且在一行間也有明顯的干擾噪聲存在。這是因?yàn)橥还庠磳?duì)于RGB三種分量所體現(xiàn)出的數(shù)值不同,直接將其當(dāng)作灰度值處理會(huì)產(chǎn)生恢復(fù)的圖像不均勻、噪聲大的現(xiàn)象。解決辦法是通過(guò)多次
實(shí)踐調(diào)整攝像頭的曝光時(shí)間和RGB每個(gè)分量的增益值,使3個(gè)分量在同一光源下反應(yīng)出的數(shù)值基本一致。經(jīng)過(guò)調(diào)整后得到的圖像如圖5(b)所示。
4 數(shù)字式CMOS攝像頭與模擬攝像頭比較
數(shù)字式CMOS攝像頭MT9M011最大的優(yōu)勢(shì)在于節(jié)約時(shí)間。選用合適的晶振及圖像大小能將整個(gè)小車控制周期限制在20ms左右。筆者曾經(jīng)做過(guò)實(shí)驗(yàn),選用20MHz的晶振作為攝像頭時(shí)鐘,將單片機(jī)倍頻到32 MHz。在這種條件下,一個(gè)控制周期的反應(yīng)時(shí)間甚至能縮短到4ms左右,與模擬攝像頭的40 ms一幀圖像相比有明顯的優(yōu)勢(shì)。MT9M011的另一個(gè)優(yōu)勢(shì)是圖像大小可以任意設(shè)置,因此筆者可以軟件調(diào)整圖像的大小和視野的高度,且MT9M011與單片機(jī)接口簡(jiǎn)單,很大程度上減輕了硬件負(fù)擔(dān)。
MT9M011在智能車比賽應(yīng)用中也具有一些缺點(diǎn)。它不能自動(dòng)適應(yīng)各種光源,需要人工進(jìn)行調(diào)整;同時(shí),它的動(dòng)態(tài)特性不如CCD攝像頭好,這點(diǎn)可以通過(guò)提高攝像頭晶振時(shí)鐘來(lái)縮短采集周期解決。
結(jié)語(yǔ)
本文介紹了數(shù)字式CMOS攝像頭MT9MOll在基于HCSl2單片機(jī)的智能車中的應(yīng)用,并針對(duì)數(shù)字?jǐn)z像頭與模擬攝像頭的各自特點(diǎn)進(jìn)行了比較。實(shí)踐表明,選用數(shù)字式CMOS攝像頭作為智能車路徑識(shí)別傳感器是可行的。