??? 摘 要: 分析了線陣" title="線陣">線陣CCD用于實時檢測系統(tǒng)" title="檢測系統(tǒng)">檢測系統(tǒng)的特點和要求,介紹了一種基于AT89C2051單片機的線陣CCD實時檢測系統(tǒng)的設(shè)計方案。本方案電路結(jié)構(gòu)簡單可靠,信號處理靈活恰當,有一定的通用性和啟發(fā)性。
??? 關(guān)鍵詞: CCD? 單片機? 驅(qū)動? 檢測系統(tǒng)
?
??? CCD(Charge Coupled Devices)電荷耦合器件[1]應(yīng)用系統(tǒng)的關(guān)鍵技術(shù)在于CCD驅(qū)動時序的產(chǎn)生和輸出信號的采集與處理。目前驅(qū)動主要有直接數(shù)字電路驅(qū)動、EPROM驅(qū)動、專用IC驅(qū)動、復(fù)雜的CPLD驅(qū)動等常用的驅(qū)動方法,但是它們存在著邏輯設(shè)計較為復(fù)雜、調(diào)試困難、柔性較差等缺點。在數(shù)據(jù)采集和處理方面,大多數(shù)都經(jīng)過差動放大、采樣保持、A/D轉(zhuǎn)換,再通過總線或采集卡等接口與PC機相連。這種系統(tǒng)結(jié)構(gòu)龐大,而且在信號處理、通信軟件和界面設(shè)計等方面要耗費大量的精力。應(yīng)該說這種應(yīng)用系統(tǒng)在靜態(tài)測量處理方面有其優(yōu)點,但如果要滿足實時控制系統(tǒng)的連續(xù)檢測要求以及系統(tǒng)體積精小而容易裝配等特點,則必須簡化驅(qū)動電路、數(shù)據(jù)采集過程和處理方式。本文正是出于這種考慮,開發(fā)出了一種基于單片機的實時性檢測系統(tǒng):僅用Atmel公司一塊小型的AT89C2051單片機便能產(chǎn)生穩(wěn)定、精確、高速的驅(qū)動脈沖。該電路結(jié)構(gòu)簡單、調(diào)試方便、CPU占用率低,將驅(qū)動、采集和處理融為一體,而且與上位機" title="上位機">上位機的連接僅用兩條導(dǎo)線便可實現(xiàn)檢測信息傳輸。這種方法大大簡化了線陣CCD檢測系統(tǒng)的結(jié)構(gòu),在機器人視覺、智能小車、軌跡導(dǎo)引等動態(tài)檢測方面有獨特的應(yīng)用優(yōu)勢。
1 線陣CCD實時檢測系統(tǒng)模型
??? 以機器人路徑識別為例具體說明如何利用線陣CCD開發(fā)實時動態(tài)環(huán)境檢測系統(tǒng)。
??? 假設(shè)在一個深色(如黑色、藍、綠等)平面上用寬度為30mm的白線作為機器人將要運動的軌跡導(dǎo)引線,利用線陣CCD開發(fā)出檢測白線軌跡的檢測系統(tǒng)。先利用光學(xué)系統(tǒng)用攝像頭將路面信息成像到CCD的感光面上;然后讀取白線的位置檢測信息作為機器人的視覺,讓機器人在上位機的控制下沿白線軌跡運動。這是一個典型的CCD實時檢測系統(tǒng)。整體檢測系統(tǒng)如圖1所示。
?
2 硬件設(shè)計
??? 利用CCD的光電特性,設(shè)計出的電路應(yīng)能判別視頻信號上輸出的深色和白色區(qū)別,這樣才能識別白線,時刻反應(yīng)機器人當前所在的物理位置,以便對其運動做相應(yīng)的調(diào)整。
??? 線陣CCD選用NEC公司的μPD3575D型號[4]。芯片為20腳DIP封裝,像敏單元數(shù)目為1024,像敏單元大小為14μm×14μm×14μm(相鄰像元中心距為14μm),光敏區(qū)域采用高靈敏度和低暗電流PN結(jié)作為光敏單元, 內(nèi)置采用保持電路、輸出放大電路,外觀尺寸為25.5mm×10mm,易于裝卸。該器件工作在5V驅(qū)動(脈沖)、12V電源條件下。
??? 系統(tǒng)簡要電路如圖2所示。驅(qū)動用的單片機是AT89C2051。它是Atmel公司生產(chǎn)的自帶2KB可編程Flash存儲器的與MSC-51兼容的高性能處理器。它與常規(guī)的51芯片有相同的核心和相近的結(jié)構(gòu)功能如RAM、定時/記數(shù)器、中斷結(jié)構(gòu)、串行口、振蕩器和時鐘電路等;有最高達24MHz的振蕩頻率,能高速地驅(qū)動CCD;有較少的精簡I/O端口,因此體積很小,非常適用做小型應(yīng)用系統(tǒng)的處理器。對很多嵌入式控制應(yīng)用提供了一個高度靈活的有效解決方案。本線陣CCD檢測系統(tǒng)發(fā)揮了其小而靈活的特點,既使系統(tǒng)資源得到了充分的應(yīng)用又讓系統(tǒng)結(jié)構(gòu)精簡緊奏。電路中二值化" title="二值化">二值化部分的電位器R_T用來調(diào)整二值化比較電平的閥值(0~5V),通過它調(diào)節(jié)整個CCD的灰度分辨率?眼3?演。同時整個系統(tǒng)對外接口十分簡單,只需接上電源和兩條通向上位機的信號線。上位機只需等待同步信號FC和檢測脈沖信號" title="脈沖信號">脈沖信號BIN_OUT到來的中斷信號,與AT89C2051相互獨立,彼此之間沒有任何時鐘信號或復(fù)用關(guān)系。因此實際運用中器件互換性較強,既可選用普通的AT89C51進行一定的端口擴展接收FC和BIN_OUT,也可選用中斷能力較強的SOC芯片C8051FXX系列等。整個檢測系統(tǒng)具有良好的柔性,最終電路體積可控制在手掌心大小之內(nèi)。
?
3 信號時序及軟件設(shè)計
??? 由于硬件設(shè)計時考慮用軟件產(chǎn)生CCD驅(qū)動信號,這樣軟件設(shè)計的最大難點為既要滿足CCD芯片的驅(qū)動信號要求又要完成檢測信息的完整表述。綜合比較各種方法后得出了整個軟件設(shè)計思路如下:
??? 驅(qū)動描述:NEC公司的線陣μPD3575D所需驅(qū)動信號與TOSHIBA公司傳統(tǒng)的TCD系列略有差異,具體驅(qū)動信號為:時鐘Φ10、轉(zhuǎn)移脈沖ΦTG、復(fù)位時鐘ΦRO和采樣保持時鐘ΦSHO,時序關(guān)系如圖3所示。
?
??? μPD3575D為雙溝道線陣CCD,它有兩列525位的CCD移位寄存器,分列在像敏陣列的兩邊,在一個積分的ΦTG周期中至少有525個Φ10脈沖。另外考慮到一些暗信號和空驅(qū)動,本系統(tǒng)開發(fā)中取Φ10脈沖寬度約為10μs、ΦTG積分時間為12ms。
??? 單片機驅(qū)動主要是通過程序編程控制輸出驅(qū)動的時序信號,可以通過修改程序方便地修改輸出時序。單片機是靠指令產(chǎn)生I/O口的輸出邏輯,在使用邏輯轉(zhuǎn)移指令時,必須注意精心配置,避免產(chǎn)生驅(qū)動時序相位上的不同步。因為轉(zhuǎn)移指令要根據(jù)某些條件產(chǎn)生程序分支,而分支程序在不同的條件下執(zhí)行周期通常不同?眼2?演,會造成CCD驅(qū)動時序不同步。
?? ?檢測過程描述:參見圖2的系統(tǒng)電路圖,當CCD被驅(qū)動后因其光電特性會有視頻模擬信號Vout輸出,信號如圖4所示??梢钥闯?模擬信號Vout在CCD掃描到深色區(qū)和白色區(qū)有明顯的幅值大小區(qū)別,要提取的信息就是這個變化的電壓信號。但單片機不能直接處理模擬信號Vout,因此必須先將Vout通過二值化處理得到數(shù)字信號BIN(見圖2二值化電路部分)。這樣便得到了反映白線左右兩個邊緣的脈沖信號BIN。為了方便上位機的處理,不直接輸出信號BIN,而是將 BIN反饋給AT89C2051,讓其通過程序編制來捕捉其上升沿和下降沿的跳變,再從另外的引腳輸出與BIN上升沿和下降沿同步的負脈沖信號BIN_OUT。這樣上位機可方便地通過中斷檢測到白線的左右側(cè)。這里AT89C2051還要輸出一個同步信號FC(即驅(qū)動轉(zhuǎn)移脈沖ΦTG)。因為系統(tǒng)是在連續(xù)掃描地面信息,故FC脈沖可標志CCD上一次掃描的結(jié)束和新一行掃描的開始。新一行開始掃描時,上位機收到FC負脈沖后可進入中斷對定時器T0、T1清零并立即開始計數(shù)。當收到BIN_OUT的第一個負脈沖后進入中斷并停止定時器T0;當收到BIN_OUT的第二個負脈沖后進入中斷并停止定時器T1,讀出定時器T0、T1里的數(shù)t0、t1。t0、t1便反映了路面白線的坐標位置,很明顯t1與t0之差便是白線寬度。
?
??? 綜合以上驅(qū)動和檢測信號要求得出:在主程序中用一個死循環(huán)產(chǎn)生連續(xù)的四路驅(qū)動脈沖,并通過嵌入相應(yīng)的其他功能的指令來保證四個驅(qū)動脈沖的相位關(guān)系,對BIN信號的上升沿和下降沿的判斷也在此循環(huán)中完成。對BIN信號的當前狀態(tài)還必須有一個狀態(tài)標志BIN_STATE。一旦遇到BIN信號有電平變化便給出相應(yīng)的BIN_OUT負脈沖,而BIN_OUT恢復(fù)高電平是靠定時器T0溢出中斷服務(wù)程序?qū)崿F(xiàn)的。
??? P_1O????????EQU????? P1.7????? ;時鐘脈沖信號Φ10
?? ?P_RO??????? EQU? ?? ?P1.6??? ? ;復(fù)位時鐘信號ΦRO
?? ?P_SHO??? ???EQU ??? ?P1.5???? ?;采樣保持時鐘信號ΦSHO
??? P_TG???? ???EQU? ?? ?P1.4????? ;轉(zhuǎn)移脈沖信號ΦTG
?? ?BIN??? ?? ??EQU? ?? ?P1.2??? ? ;二值化后的數(shù)字信號
?? ?P_FC????? ??EQU? ?? ?P1.0??? ? ;同步信號輸出
?? ?P_BIN_OUT???EQU?? ? ?P1.1??? ? ;BIN_OUT檢測信號
?? ?BIN_STATE???BIT???? ?20H????? ?;BIN信號的狀態(tài)標志
??? 主要驅(qū)動程序:
??? LOOP:?????? CPL???? ?P_1O????????
????????????????INC???? ?R5
????? ???????? ?CLR??? ??P_SHO?????
????? ???????? ?JNB???? ?BIN_STATE,? LINE1
????????????????SETB??? ?P_SHO?????????
????????????????JB????? ?BIN,?? LINE3
????? ???????? ?CLR??? ??BIN_STATE?? ?;BIN有下降沿
????? ???????? ?CLR ??? ?P_BIN_OUT?? ?;BIN_OUT負脈沖輸出
????? ???????? ?SETB?? ??TR0????? ? ??;啟動定時器等待定時中斷恢復(fù)高電平
???????????? ???SJMP???? LINE3
??? LINE1:???? ?SETB???? P_SHO????????
????????????????JNB??????BIN, LINE3
????? ???????? ?SETB???? BIN_STATE????;BIN有上升沿
????? ???????? ?CLR??? ? P_BIN_OUT?? ?;BIN_OUT負脈沖輸出
???????????? ???SETB???? TR0??????????;啟動定時器等待定時中斷恢復(fù)高電平
??? LINE3:??? ??CLR? ?? ?P_RO
???????? ??? ???NOP
????? ???????? ?SETB?? ? P_RO
????? ???????? ?CJNE ?? ?R5, #50, LOOP ;控制光積分時間
????? ???????? ?MOV???? ?R5, #0
????? ???????? ?INC???? ?R6
????????????????CJNR?? ??R6, #25, LOOP
????? ???????? ?MOV? ??? R6, #0
????? ???????? ?CLR?? ? ?P_TG??????
????? ???????? ?CLR??????P_FC???????
????? ???????? ?MOV???? ?R7, #200
????? ???????? ?DJNZ??? ?R7, $
????? ???????? ?SETB??? ?P_TG
????? ???????? ?SETB?? ? P_FC
????? ???????? ?SJMP??? ?LOOP
??? 本系統(tǒng)用一片小型單片機完全實現(xiàn)了預(yù)定功能,幾乎沒有復(fù)雜的外圍電路器件,結(jié)構(gòu)簡單可靠,硬件、軟件代價都較低,系統(tǒng)成本預(yù)算較低。整個檢測系統(tǒng)用在機器人視覺上實驗效果也非常理想。系統(tǒng)可根據(jù)具體的需要和要求進行擴展和改變,如增加信號輸出、改變檢測系統(tǒng)和上位機的信號接口等。
參考文獻
1? 王慶有.CCD應(yīng)用技術(shù).天津:天津大學(xué)出版社?熏 2000
2? 何立民.MSC-51系列單片機應(yīng)用系統(tǒng)設(shè)計系統(tǒng)配置與接口技術(shù). 北京?押北京航空航天大學(xué)出版社,2002
3? 萬 英.CCD二值化測量的閥值自動調(diào)節(jié)方法.光學(xué)技術(shù),2003;(3):370~371
4? NEC公司.線陣CCD圖像傳感器技術(shù)手冊. 2003