文獻標識碼: A
文章編號: 0258-7998(2012)10-0034-03
隨著我國工業(yè)發(fā)展,水污染問題日益突出,,對水質(zhì)進行監(jiān)測越來越重要,。2000年我國自主生產(chǎn)的“長江水環(huán)檢測2000”[1],因其檢測船造價昂貴,,難以在全國推廣,。電子技術(shù)的發(fā)展,使得以更微型,、更廉價的方式制造出類似“長江2000”監(jiān)測船功能的在線水質(zhì)監(jiān)測平臺成為可能,。因此,本文提出了以德州儀器2012年最新發(fā)布的以低功耗且價格敏感的工業(yè)用芯片AM3359為核心處理器的移動在線水質(zhì)監(jiān)測平臺,。該平臺可以實現(xiàn)水域中的任意移動,、平臺的經(jīng)緯度實時監(jiān)測、水樣本的自動獲取及各項水質(zhì)指標的檢測,、圖像數(shù)據(jù)及被檢水質(zhì)數(shù)據(jù)的無線傳輸,。平臺配備了柔性太陽能電池板、12 V蓄電池以及相應(yīng)的電源控制電路,,可實現(xiàn)蓄電池的自動充電,。
1 系統(tǒng)構(gòu)成
整個系統(tǒng)主要由移動平臺和監(jiān)控中心兩部分組成。監(jiān)控中心主要由基于PC機的上位機軟件和算法組成。移動平臺包括核心處理器,、電源模塊以及各種功能模塊,。核心處理器采用AM3359低功耗芯片,它是一款基于Cortex-A8內(nèi)核的高性能低價格(約5美元一片)工業(yè)型芯片,,具有720 MHz的主頻,,采用32 bit RISC精簡指令,具有12 bit高精度ADC,、3路增強型的PWM通道,、SGX530圖像引擎,支持ddr2和ddr3內(nèi)存,,支持最新的Linux和Wince操作系統(tǒng),,功耗低至7 mW。功能模塊包括水質(zhì)測量模塊,、圖像采集模塊,、電源模塊,、電機控制模塊,、GPS定位模塊、GPRS無線傳輸模塊,、電子羅盤方向?qū)Ш侥K,、超聲波測障模塊。
水質(zhì)監(jiān)測平臺系統(tǒng)構(gòu)成圖如圖1所示,。
2 硬件設(shè)計
在圖1中,,電子羅盤模塊采用霍尼韋爾公司推出的3軸數(shù)字羅盤HMC5883;GPS模塊和GPRS模塊采用SIMCom公司最新推出的sim908模塊,,該模塊把GPS和GPRS集成到一起,,由AT指令控制;水質(zhì)采樣模塊使用2個小型水泵,,通過I/O口控制繼電器實現(xiàn)水泵的抽水和排水,;太陽能充電模塊采用CN3063太陽能充電管理芯片。這些模塊在應(yīng)用時十分簡單,,本文不詳細闡述,。本文將重點介紹運動控制模塊的改進和基于Linux操作系統(tǒng)的圖像采集與傳輸。
2.1 運動控制模塊設(shè)計
本設(shè)計選用無刷直流電機作為運動控制模塊的核心部件,,選用IR21365和GIB10B60KD1構(gòu)成無刷電機的驅(qū)動電路,。無刷電機由于沒有電刷,壽命比有刷電機提高了6倍,,同時還具有結(jié)構(gòu)簡單,、性能可靠、永無磨損、空載電流小,、過載能力大等優(yōu)點[2-3],。運動控制模塊結(jié)構(gòu)框圖如圖2所示。
2.2 硬件邏輯防短路電路設(shè)計
軟件邏輯上的錯誤可能導致與電機某相連接的上下兩只IGBT管同時導通,,使電路出現(xiàn)短路[4],,引起電流過大而燒壞IGBT管。對此,,本文通過“與非門”搭建一個電路,,使得當與上下兩只IGBT管柵極相連的PWM波引腳都為高電平時,與電機相連的相不導通,。由于電機三相存在對稱性,,這里僅取電機的A相來分析硬件上如何防止上下兩只IGBT管同時導通,其原理圖如圖3所示,。
由于IR2136S只是增強信號的驅(qū)動能力,,不改變信號邏輯上的值,因此從邏輯上說Q1′和Q1,、Q2′和Q2是一樣的,。根據(jù)本文的設(shè)計,當Q1′,、Q2′為低電平時,,相應(yīng)的IGBT管為導通狀態(tài),其真值表如表1所示,。
由表1可知,,當由于軟件誤操作導致PWM1和PWM2同時高電平或者同時低電平時,與之相連的兩個IGBT管都是截止狀態(tài),,防止了短路的發(fā)生,,從硬件上有效地保護了電機。
2.3 圖像采集模塊
本文采用OV7620 COMS攝像頭,,其分辨率達到640×480,,支持 RGB和YUV圖像數(shù)據(jù)格式。5 V電源供電,工作時功耗<120 mW,,待機時功耗<10 μW[5],。該模塊與微處理器的連接框圖如圖4所示。
OV7620的控制符合SCCB(Serial Camera Control Bus)協(xié)議,,它是一種簡化了的I2C協(xié)議,,本文采用I/O模擬SCCB總線的方式來控制OV7620。編寫一個I2CSendByte()函數(shù)來寫寄存,,該函數(shù)的第一個參數(shù)為OV7620的芯片地址0x42,,第二個參數(shù)為片內(nèi)寄存器地址,,第三個參數(shù)為相應(yīng)寄存器的設(shè)定值。本文設(shè)置OV7620為連續(xù)掃描,、RGB原始數(shù)據(jù)16位方式輸出,。用如下的函數(shù)可以完成設(shè)置:
Void Camera_Setup()
{
I2CSendByte(0x42,0x12,0x2d);
I2CSendByte(0x42,0x13,0x01);
I2CSendByte(0x42,0x28,0x20);
I2CSendByte(0x42,0x20,0x02);
}
處理器把OV7620采集到的RGB格式的圖像數(shù)據(jù)壓縮成JPEG格式并存儲于SD卡中,當收到相應(yīng)命令時,,通過GPRS無線模塊把圖像發(fā)送給監(jiān)控中心,。
3 系統(tǒng)軟件設(shè)計
3.1 操作系統(tǒng)
本文采用具有可靠性高、源代碼開放等優(yōu)點的Linux操作系統(tǒng),。在為系統(tǒng)移植Linux操作系統(tǒng)之后,,將為OV7620添加驅(qū)動程序。
整個系統(tǒng)流程為:系統(tǒng)開機后進行初始化并創(chuàng)建各個任務(wù),,任務(wù)創(chuàng)建成功后系統(tǒng)檢測GPRS緩沖區(qū)中的數(shù)據(jù)并判斷是自主導航還是手動導航,。如果是手動導航,則系統(tǒng)直接接收遠程遙控到目的地采集水樣,;如果是自動導航,,則系統(tǒng)通過GPS獲取目標位置和當前位置并計算運動路線。運動過程中通過超聲波不斷探測前方是否有障礙物,,如果有障礙則系統(tǒng)進行避障運動,。避障后系統(tǒng)重新確定運動路線和運動方向。當系統(tǒng)到達指定位置時便開始水質(zhì)采樣和分析以及水質(zhì)的影像采集,。最后數(shù)據(jù)通過無線模塊傳輸回監(jiān)控中心,。這樣就完成了一次水質(zhì)采樣。
3.2 驅(qū)動程序的編寫
攝像頭設(shè)備屬于字符設(shè)備,,它能夠像字節(jié)流一樣被訪問,并且只能夠順序讀寫[6],。添加一個設(shè)備驅(qū)動程序的標準流程如圖5所示,。
當調(diào)用驅(qū)動程序時,操作系統(tǒng)會自動調(diào)用module_
init()函數(shù),;退出驅(qū)動程序時,,操作系統(tǒng)會自動調(diào)用module_exit()函數(shù)以釋放系統(tǒng)資源。
關(guān)鍵的函數(shù)如下:
register_chrdev_region(devno,1,″ov7620″);
/*申請設(shè)備號*/
cdev_init(&dev.cdev,&ov7620_fops);
/*初始化cdev結(jié)構(gòu)體*/
dev.cdev.owner=THIS_MODULE;
dev.cdev.ops=&ov7620_fops;
/*關(guān)聯(lián)cdev結(jié)構(gòu)體和file_operations結(jié)構(gòu)體*/
cdev_add(&dev.cdev,devno,1);
/*添加cdev結(jié)構(gòu)體*/
其中有一個非常重要的結(jié)構(gòu)體(即file_operations結(jié)構(gòu)體)是Linux系統(tǒng)中為應(yīng)用程序提供各種操作接口的核心結(jié)構(gòu)體,,編寫驅(qū)動的大部分工作實際上就是填充file_operations結(jié)構(gòu)體中的各個子函數(shù),。在本文中,攝像頭的file_operations結(jié)構(gòu)體如下:
static const struct file_operations ov7620_fops=
{
.owner=THIS_MODULE,
.open=ov7620_open,
.read=ov7620_read,
.write=ov7620_write,
.ioctl=ov7620_ioctl,
};
如填充ov7620_open子函數(shù)如下:
static void ov7620_open(struct inode *inode,struct file *filp)
{
GPIO_Init();/*初始化IO口*/
Camera_Setup();/*通過SCCB接口設(shè)置OV7620攝像頭
中的各個寄存器,,使攝像頭處于合適的工作模式*/
}
當應(yīng)用程序調(diào)用open函數(shù)時,,程序最終會調(diào)用到驅(qū)動程序里的OV7620_open()函數(shù),從而操作硬件,。其他的應(yīng)用程序的函數(shù)調(diào)用,,最終也會尋找到file_operations結(jié)構(gòu)體中對應(yīng)的鉤子函數(shù),,在此不再贅述。
3.3 圖像的壓縮傳輸
為加快圖像傳輸?shù)乃俣群凸?jié)省流量,,本文采用JPEG的圖像壓縮方式,。在JPEG算法中,通常是將圖像分成一個個8×8的圖像子塊,,對每一個圖像子塊進行離散余弦變換,。所使用的二維離散余弦變換(DCT)公式如下[7]:
JPEG圖像壓縮在Linux操作系統(tǒng)中的具體實現(xiàn)方式為:在工程文件夾下一次拷貝libjpeg.lib、jconfig,、jmorecfg.h,、jpeglib.h這4個文件;然后在主程序所在的#include “jpeglib.h”源文件中,,調(diào)用jpeg_start_compress()函數(shù)進行壓縮,;壓縮完成后需調(diào)用jpeg_finish_compress()函數(shù)來完成壓縮;最后需要調(diào)用jpeg_destroy_compress()函數(shù)來釋放壓縮過程中申請的資源,。壓縮效果如圖6所示,,壓縮(上接第36頁)
前圖片大小為850 KB,壓縮后圖片大小為45 KB,,可見采用JPEG壓縮效果十分明顯,。
本文介紹了以高性能Cortex-A8微處理器為核心的移動在線水質(zhì)監(jiān)測平臺的開發(fā)和系統(tǒng)的軟、硬件組成,,并且對一些不足提出了改進,。實踐證明,該系統(tǒng)可長期在水域中監(jiān)測水質(zhì),,并可順暢地傳輸回所在位置的水質(zhì)圖像,,具有一定的應(yīng)用價值。
參考文獻
[1] 李飛飛,,楊江.遙控式移動水質(zhì)快速監(jiān)測系統(tǒng)[DB].中國優(yōu)秀碩士學位論文全文數(shù)據(jù)庫,,2011:6-7.
[2] 韋鯤,任軍軍.三次諧波檢測無刷直流電機轉(zhuǎn)子位置的研究[J].中國電機工程學報,,2004,,24(5):163-167.
[3] 黃小莉,何毅.三相直流無刷電機驅(qū)動板設(shè)計[J].機械設(shè)計與制造,,2011,,5(5):60-62.
[4] 讓余奇,曹彥.采用IGBT的無刷直流電動機保護技術(shù)[J]. 微特電機,,2004,,5(5):38-40.
[5] 雷霏霖,梁志毅.基于CMOS傳感器OV7620采集系統(tǒng)設(shè)計[J].電子測量技術(shù),,2008,,31(12):110-112.
[6] 樊國棟,,石紅瑞.嵌入式Linux下CMOS攝像頭驅(qū)動的設(shè)計與實現(xiàn)[J].工業(yè)儀表與自動化裝置,2010,,3(3):68-70.
[7] 鄭凱華,,章旭東.基于S3C2440的圖像采集與顯示系[J].計算機系統(tǒng)應(yīng)用,2011,,20(8):225-228.