摘要:結(jié)合uClinux操作系統(tǒng)和S3C4510B的特點,設(shè)計了以中斷方式實現(xiàn)的實時特征采集系統(tǒng),通過開辟非實時程序與實時特征采集系統(tǒng)共享的存儲區(qū),將大大地提升紙幣識別系統(tǒng)的并發(fā)處理能力。但是uClinux操作系統(tǒng)并不能完美地滿足實時采集系統(tǒng)對實時性的要求。為了能使用功能強(qiáng)大并且免費的uClinux,有必要改進(jìn)uClinux的中斷延遲時間,提出了改進(jìn)方法。經(jīng)過改進(jìn)后的uClinux可以滿足要求。
關(guān)鍵詞:uClinux; S3C4510B; 紙幣識別系統(tǒng); 實時采集系統(tǒng); 中斷延遲
中圖分類號:TP311文獻(xiàn)標(biāo)志碼:A
文章編號:1001-3695(2008)04-1261-03
紙幣識別系統(tǒng)已經(jīng)廣泛應(yīng)用于金融、商業(yè)、交通、電信、公用事業(yè)、文化娛樂等各個領(lǐng)域的自動存款機(jī)、自助信息亭、自動充值機(jī)、自動售貨機(jī)、自動售卡機(jī)、自動售票機(jī)、紙硬幣兌換機(jī)、自動繳費機(jī)等。經(jīng)過幾十年的發(fā)展,紙幣識別技術(shù)已經(jīng)發(fā)展到了比較成熟的階段,能夠達(dá)到比較高的識別水平。識別器的機(jī)械、電機(jī)控制方面也已比較完善。但目前國內(nèi)外主要廠商的主流產(chǎn)品都是基于單片機(jī)(無操作系統(tǒng)),在功能、擴(kuò)展性等方面比較有限。隨著技術(shù)的革新和自助服務(wù)在國內(nèi)的迅速興起,基于單片機(jī)的紙幣識別系統(tǒng)已經(jīng)越來越不能滿足市場需求。
基于單片機(jī)的紙幣識別系統(tǒng)中,由于處理器處理能力和系統(tǒng)資源的限制,采集系統(tǒng)在采集時獨占處理器,其他系統(tǒng)只有等采集結(jié)束后才能處理采集到的數(shù)據(jù),這樣使得整個處理時間延遲了不少。并且單片機(jī)本身功能簡單,對現(xiàn)在很多新增功能不能很好地支持。
本文從uClinux操作系統(tǒng)[1]和S3C4510B[2]的特點出發(fā),通過對uClinux的改進(jìn),結(jié)合紙幣識別系統(tǒng)采集系統(tǒng)的要求,采用中斷方式實現(xiàn)采集。本采集系統(tǒng)將采集到的數(shù)據(jù)送往非實時程序與采集系統(tǒng)共享的內(nèi)存區(qū),縮短了其他模塊的訪問時間,這樣將提高整個紙幣識別系統(tǒng)的并發(fā)處理能力,充分利用處理器的強(qiáng)大處理能力和系統(tǒng)資源。由于uClinux免費,而且操作系統(tǒng)功能強(qiáng)大,使得紙幣識別系統(tǒng)能夠支持更多功能,并降低其成本,可擴(kuò)展性大大增強(qiáng)。
1采集系統(tǒng)
1.1硬件簡介
特殊光發(fā)光/接收電路是紙幣識別系統(tǒng)的關(guān)鍵信號收集電路,具體結(jié)構(gòu)如圖1所示。在紙幣通道上、下設(shè)有特殊光發(fā)光部件和接收部件,S3C4510B對發(fā)光部件進(jìn)行強(qiáng)度控制。當(dāng)有紙幣通過時,接收部件將檢測到的特殊光信號傳給模數(shù)轉(zhuǎn)換器TLC1543。共有三路類似的特殊光發(fā)光/接收電路,這三路信號通過TLC1543后由SPI串行總線傳回S3C4510B。
僅有以上特殊光發(fā)光/接收電路還是不夠的,要采集多個不同點的信息還要借助其他的硬件設(shè)備,碼盤光耦信號收集電路和馬達(dá)電機(jī)驅(qū)動電路必不可少。
馬達(dá)電機(jī)的作用是帶動傳動裝置將放入紙幣通道的紙幣卷進(jìn)紙幣器。在紙幣通道上下都有特殊的發(fā)光部件和接收部件,它們在紙幣被卷入紙幣器時是保存不動的,那么紙幣上的多個點就能被特殊的發(fā)光部件掃描,這樣就實現(xiàn)了對紙幣上多個點的數(shù)據(jù)采集。馬達(dá)電機(jī)驅(qū)動電路如圖2所示。S3C4510B通過大電流電機(jī)驅(qū)動芯片L298驅(qū)動步進(jìn)電機(jī),電機(jī)的過載信號也由L298傳回。
碼盤是安裝在電機(jī)旁對電機(jī)進(jìn)行測速的角度傳感器,碼盤光耦是測速光信號的發(fā)生器和接收器。碼盤光耦將接收到的信號經(jīng)施密特觸發(fā)器整形后,傳送到S3C4510B的I/O口。這個電路對實現(xiàn)采集系統(tǒng)的意義重大。而本文所設(shè)計的采集系統(tǒng)也是依賴這一電路產(chǎn)生的反饋信號,形成中斷,從而實現(xiàn)對采集數(shù)據(jù)的讀取。碼盤光耦信號收集電路如圖3 所示。
以上的硬件電路再加上傳動裝置等,就構(gòu)成了采集系統(tǒng)的硬件基礎(chǔ)設(shè)備。
1.2程序設(shè)計
本文設(shè)計的采集系統(tǒng),所采集的數(shù)據(jù)是紙幣上等距離點上的數(shù)據(jù),采集到的數(shù)據(jù)通過一些算法[3,4],與預(yù)先取得的保存在面額數(shù)據(jù)特征庫中的數(shù)據(jù)對比,判斷紙幣的真假,從而使紙幣識別系統(tǒng)決定是否接受被檢測的紙幣。
可見,能正確地取得紙幣的數(shù)據(jù)對這些算法來說是非常重要的。當(dāng)紙幣的一端進(jìn)入紙幣通道時,位置傳感器提示系統(tǒng),紙幣進(jìn)入預(yù)定的開始進(jìn)入位置,而后通過馬達(dá)和傳動裝置,紙幣就被卷入紙幣器中。馬達(dá)轉(zhuǎn)過相同的角度,紙幣也就移動相同的距離,而碼盤光耦電路每產(chǎn)生一個反饋信號,馬達(dá)轉(zhuǎn)過的角度是一個固定值,紙幣移動距離也就是一個固定值,則根據(jù)這個反饋信號就能實現(xiàn)固定等距離點的采集, 所以硬件的設(shè)計是能保證的。當(dāng)紙幣上的定點到達(dá)紙幣識別系統(tǒng)特殊光發(fā)光部件和接收部件中間時,通知采集程序此時數(shù)據(jù)有效。馬達(dá)轉(zhuǎn)過多少角度碼盤光耦產(chǎn)生反饋信號,是由碼盤光耦的規(guī)格決定。
數(shù)據(jù)采集系統(tǒng)的程序部分要解決的問題就是能夠及時根據(jù)碼盤光耦電路的反饋信號,實時地將特殊光傳感器中的數(shù)據(jù)讀出,而后保存。由于uClinux操作系統(tǒng)本身的限制,紙幣識別系統(tǒng)中只有一個實時任務(wù)——采集,考慮采用中斷的方式解決這個問題。
在本系統(tǒng)中,根據(jù)采樣定理,每6 ms采集一次數(shù)據(jù),選用了適合本采集系統(tǒng)規(guī)格的馬達(dá)和碼盤光耦。為了使基于S3C4510B和uClinux的紙幣識別系統(tǒng)充分發(fā)揮同時采集和處理數(shù)據(jù)的能力,可以從S3C4510B的內(nèi)存中開辟一個獨立的區(qū)域。該區(qū)域是用來提供給非實時程序和采集系統(tǒng)共享的內(nèi)存,專門用來存儲采集數(shù)據(jù),這樣非實時程序無須調(diào)用系統(tǒng)或驅(qū)動程序去訪問采集到的數(shù)據(jù),從而大大提高了將采集數(shù)據(jù)送給非實時程序的速度,提高了處理速度。由于間隔6 ms,很有可能用戶程序還沒有用到上個中斷保存的數(shù)據(jù),下個中斷就來了,那個區(qū)間需要有足夠的空間緩沖數(shù)據(jù),使未處理的數(shù)據(jù)不至于丟失。在中斷處理程序[5]中,所進(jìn)行的操作是將傳感器的數(shù)據(jù)放入共享的內(nèi)存區(qū)。
由于傳感器中的數(shù)據(jù)是動態(tài)變化的,如果中斷不能及時地響應(yīng)并取出數(shù)據(jù),則得到的數(shù)據(jù)就不是紙幣對應(yīng)點上的數(shù)據(jù),在進(jìn)行數(shù)據(jù)比對時,面額數(shù)據(jù)特征庫中的數(shù)據(jù)與實際采集得到的數(shù)據(jù)不是同一位置的數(shù)據(jù),這樣就會導(dǎo)致算法得到的結(jié)果與實際的不相符。
2實驗結(jié)果
搭建好硬件平臺,寫好采集程序,就可以進(jìn)行采集的實驗。
對某種紙幣進(jìn)行了多次實驗,實驗的結(jié)果并不是很好,誤判率比較高,不能達(dá)到實際應(yīng)用的程度。
實驗采集到的數(shù)據(jù)與面額數(shù)據(jù)特征庫中數(shù)據(jù)進(jìn)行對比,可以得到特征對比曲線圖,如圖4所示。
將采集到的數(shù)據(jù)與面額數(shù)據(jù)特征庫中數(shù)據(jù)對比發(fā)現(xiàn),一些數(shù)據(jù)有比較大的抖動,在圖中用點標(biāo)記出來。比較相似度,歐式距離如下:
計算得到的歐式距離是64.792 0,這個值對于本紙幣識別系統(tǒng)已經(jīng)是相當(dāng)大了,超出了允許的范圍。
通過分析,中斷處理程序相對比較簡單,取得數(shù)據(jù)的時間非常之小可以忽略不計,所以延遲的時間主要就用在了中斷延遲上。將每次采集的多個中斷延遲時間讀出,發(fā)現(xiàn)uClinux的中斷延遲時間[6]普遍還是比較小,只是在某些時候才比較大,而這些點也正是數(shù)據(jù)抖動比較大的點,即偏差比較大的點,所以只有通過縮短最大中斷延遲時間,才能獲得正確的數(shù)據(jù),減少偏差,達(dá)到比較好的實際效果。
3uClinux中斷延遲時間改進(jìn)方法
uClinux操作系統(tǒng)的中斷延遲時間不能完美滿足本模塊的要求。但考慮到uClinux的強(qiáng)大功能,大量可以利用的資源、可以免費使用以及發(fā)展的潛力,使用這一操作系統(tǒng)將有助于紙幣識別系統(tǒng)的開發(fā)與維護(hù),所以縮短其中斷延遲[7] (interrupt latency)很有價值。
中斷延遲時間是指從中斷發(fā)生到系統(tǒng)獲知中斷,并開始執(zhí)行中斷服務(wù)子程序所需要的最大滯后時間。
系統(tǒng)在進(jìn)入臨界區(qū)代碼段之前都要關(guān)中斷,執(zhí)行完臨界代碼之后再開中斷。關(guān)中斷的時間越長,中斷延遲就越長。中斷延遲由式(2)給出:
中斷延遲=關(guān)中斷的最長時間+開始執(zhí)行中斷服務(wù)子程序的
第一條指令的時間(2)
現(xiàn)在已經(jīng)有很多比較成熟的技術(shù)來解決uClinux的這個問題,如增加內(nèi)核搶占點、雙內(nèi)核等[8]。在眾多方案中決定使用RTAI[8]的雙內(nèi)核機(jī)制來改進(jìn)uClinux。
RTAI是由意大利米蘭理工學(xué)院航天工程系發(fā)起開發(fā)的一個遵循GPL的開源項目。
uClinux改進(jìn)方案結(jié)構(gòu)圖如圖5所示。當(dāng)RTAI沒有加載時,與普通的uClinux系統(tǒng)沒什么兩樣。當(dāng)RTAI模塊被uClinux加載時,就會將uClinux系統(tǒng)作為RTAI的一個最低優(yōu)先級的任務(wù)來執(zhí)行;只有當(dāng)沒有實時任務(wù)運行時,uClinux才能獲得執(zhí)行的時間,uClinux中的一些非實時任務(wù)才能執(zhí)行。RTAI定義了一個硬件抽象層(HAL)。硬件抽象層是用來截取硬件中斷的,提供了一個最核心部分即中斷處理機(jī)制。當(dāng)外部產(chǎn)生中斷時,它判斷中斷,將不同實時要求的中斷分派給uClinux或RTAI來處理。HAL中包括了一個關(guān)鍵組件:中斷描述符表IDT,它定義了一套指針來處理中斷例程,通過改寫指針指向的值就可以改變處理函數(shù)。RTAI還提供了細(xì)粒度的定時器管理和實時任務(wù)調(diào)動。
RTAI面對的主要是Linux操作系統(tǒng),而對uClinux和S3C4510B沒有現(xiàn)成的代碼包,所以必須遵循這個RTAI的原理,自行移植。
S3C4510B的處理器是ARM7。RTAI有針對ARM處理器上的版本,所以可以參照以前版本進(jìn)行移植。由于沒有現(xiàn)成的代碼,HAL就必須針對現(xiàn)有的S3C4510B進(jìn)行改寫。HAL主要包括指向IDT的指針。打開/關(guān)閉中斷函數(shù),控制中斷mask/unmask函數(shù)、中斷狀態(tài)的數(shù)據(jù)描述符。RTAI要為每個中斷源定義一個全局的數(shù)據(jù)結(jié)構(gòu),它的主要結(jié)構(gòu)就是鏈表指針、中斷號、用于中斷屏蔽的標(biāo)志位和用于中斷懸掛的標(biāo)志位。S3C4510B不能使用MMU(memory management unit,內(nèi)存管理單元)[6],所以在內(nèi)存方面進(jìn)行移植時要特別小心。由于uClinux的時鐘中斷是10ms,它不能適應(yīng)實時性的要求,而RTAI是需要有細(xì)粒度的時鐘,考慮到S3C4510B上有兩個定時器,定時器0已被用于uClinux的時鐘中斷,于是利用定時器1為RTAI提供時鐘。還需要對uClinux的源代碼進(jìn)行必要修改,使用函數(shù)替換uClinux的關(guān)中斷和開中斷函數(shù),這樣當(dāng)uClinux關(guān)中斷后,仍然能被需要實時處理的任務(wù)給中斷。
由于設(shè)計的采集中斷處理程序相對比較簡單,不會占用很多處理的時間,決定將采集放到RTAI的中斷處理程序中。為了使紙幣識別系統(tǒng)充分發(fā)揮同時采集和處理數(shù)據(jù)的能力,開辟一個獨立的內(nèi)存區(qū),用來提供給uClinux程序和采集系統(tǒng)共享的內(nèi)存,專門用于存儲采集數(shù)據(jù),這樣uClinux程序就可以很方便快速地訪問采集到的數(shù)據(jù),從而大大提高了并發(fā)處理速度。
4改進(jìn)后的實驗結(jié)果
通過對uClinux中斷延遲時間的改進(jìn),再次進(jìn)行了實驗。
對同一種紙幣進(jìn)行了多次實驗,采集出來的數(shù)據(jù)與面額數(shù)據(jù)特征庫中的數(shù)據(jù)吻合度比較好。特征曲線對比圖如圖6所示。
同樣計算歐式距離,得到的值為18.138 4,這個值在允許的范圍內(nèi)達(dá)到了紙幣特征實時采集系統(tǒng)的要求。
5結(jié)束語
本文設(shè)計了一種基于S3C4510B和uClinux的紙幣特征實時采集系統(tǒng),考慮到uClinux操作系統(tǒng)本身的特點,將采集的實現(xiàn)放在中斷處理子程序中。通過實驗,將得到的紙幣數(shù)據(jù)與面額特征數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行比對,采集到的數(shù)據(jù)在某些點有較大的波動,研究發(fā)現(xiàn)是由于uClinux的中斷延遲在某些時候比較長,采集系統(tǒng)在uClinux操作系統(tǒng)中的實現(xiàn)有困難。由于uClinux免費,而且操作系統(tǒng)功能強(qiáng)大,使得紙幣識別系統(tǒng)能夠支持更多功能,降低其成本,大大增強(qiáng)可擴(kuò)展性。考慮到uClinux的種種優(yōu)點,提出了改進(jìn)中斷延遲時間的方案。經(jīng)過實施RTAI雙內(nèi)核的改進(jìn)后,仍然采集中斷實現(xiàn),將采集系統(tǒng)中斷放在RTAI核中實現(xiàn),并開辟了一個獨立的內(nèi)存區(qū)用來存儲數(shù)據(jù),方便uClinux上的程序快速讀取采集的數(shù)據(jù),大大提高了紙幣識別系統(tǒng)的并發(fā)處理能力。經(jīng)過改進(jìn)后的uClinux可以滿足紙幣特征實時采集系統(tǒng)要求。
參考文獻(xiàn):
[1]李駒光.ARM應(yīng)用系統(tǒng)開發(fā)詳解——基于S3C4510B 的系統(tǒng)設(shè)計[M].北京:清華大學(xué)出版社,2004.
[2]趙明富,李太福,羅松.Linux嵌入式系統(tǒng)實時性分析與實時化改進(jìn)[J].計算機(jī)應(yīng)用研究,2004,21(4):200-203.
[3]KOSAKA T, OMATU S, FUJINAKA T. Bill classification by using the LVQ method[C]//Proc of IEEE International Conference on Systems, Man and Cybernetics. 2001:1430-1435.
[4] FROSINI A, GPRO M, PRIAMI P. A neural network-based model for paper currency recognition and verification[J]. IEEE Trans on Neural Networks, 1996,7(6):1482-1490.
[5]BOVET D P, CESATI M. Understanding the Linux kernel[M]. 3rd ed. Sebastopol: O’Reilly, 2005.
[6]LABROSSE J J.嵌入式實時操作系統(tǒng)μC/OS-Ⅱ [M].邵貝貝,譯.2版.北京:北京航空航天大學(xué)出版社,2003.
[7]LAURICH P. A comparison of hard real-time Linux alternatives[EB/OL].(2004- 11-19). [2006-12-01].http://linuxdevices.com/articles/AT3479098230.html.
[8]鄒勇,王青,李明樹.Linux內(nèi)核的實時支持的研究與實現(xiàn)[J].計算機(jī)研究與發(fā)展,2002,39(4):466-472.
第4期
“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”