文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2012)10-0034-03
隨著我國工業(yè)發(fā)展,水污染問題日益突出,對水質(zhì)進(jìn)行監(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ì)指標(biāo)的檢測、圖像數(shù)據(jù)及被檢水質(zhì)數(shù)據(jù)的無線傳輸。平臺配備了柔性太陽能電池板、12 V蓄電池以及相應(yīng)的電源控制電路,可實現(xiàn)蓄電池的自動充電。
1 系統(tǒng)構(gòu)成
整個系統(tǒng)主要由移動平臺和監(jiān)控中心兩部分組成。監(jiān)控中心主要由基于PC機(jī)的上位機(jī)軟件和算法組成。移動平臺包括核心處理器、電源模塊以及各種功能模塊。核心處理器采用AM3359低功耗芯片,它是一款基于Cortex-A8內(nèi)核的高性能低價格(約5美元一片)工業(yè)型芯片,具有720 MHz的主頻,采用32 bit RISC精簡指令,具有12 bit高精度ADC、3路增強(qiáng)型的PWM通道、SGX530圖像引擎,支持ddr2和ddr3內(nèi)存,支持最新的Linux和Wince操作系統(tǒng),功耗低至7 mW。功能模塊包括水質(zhì)測量模塊、圖像采集模塊、電源模塊、電機(jī)控制模塊、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)用時十分簡單,本文不詳細(xì)闡述。本文將重點介紹運動控制模塊的改進(jìn)和基于Linux操作系統(tǒng)的圖像采集與傳輸。
2.1 運動控制模塊設(shè)計
本設(shè)計選用無刷直流電機(jī)作為運動控制模塊的核心部件,選用IR21365和GIB10B60KD1構(gòu)成無刷電機(jī)的驅(qū)動電路。無刷電機(jī)由于沒有電刷,壽命比有刷電機(jī)提高了6倍,同時還具有結(jié)構(gòu)簡單、性能可靠、永無磨損、空載電流小、過載能力大等優(yōu)點[2-3]。運動控制模塊結(jié)構(gòu)框圖如圖2所示。
2.2 硬件邏輯防短路電路設(shè)計
軟件邏輯上的錯誤可能導(dǎo)致與電機(jī)某相連接的上下兩只IGBT管同時導(dǎo)通,使電路出現(xiàn)短路[4],引起電流過大而燒壞IGBT管。對此,本文通過“與非門”搭建一個電路,使得當(dāng)與上下兩只IGBT管柵極相連的PWM波引腳都為高電平時,與電機(jī)相連的相不導(dǎo)通。由于電機(jī)三相存在對稱性,這里僅取電機(jī)的A相來分析硬件上如何防止上下兩只IGBT管同時導(dǎo)通,其原理圖如圖3所示。
由于IR2136S只是增強(qiáng)信號的驅(qū)動能力,不改變信號邏輯上的值,因此從邏輯上說Q1′和Q1、Q2′和Q2是一樣的。根據(jù)本文的設(shè)計,當(dāng)Q1′、Q2′為低電平時,相應(yīng)的IGBT管為導(dǎo)通狀態(tài),其真值表如表1所示。
由表1可知,當(dāng)由于軟件誤操作導(dǎo)致PWM1和PWM2同時高電平或者同時低電平時,與之相連的兩個IGBT管都是截止?fàn)顟B(tài),防止了短路的發(fā)生,從硬件上有效地保護(hù)了電機(jī)。
2.3 圖像采集模塊
本文采用OV7620 COMS攝像頭,其分辨率達(dá)到640×480,支持 RGB和YUV圖像數(shù)據(jù)格式。5 V電源供電,工作時功耗<120 mW,待機(jī)時功耗<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卡中,當(dāng)收到相應(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)開機(jī)后進(jìn)行初始化并創(chuàng)建各個任務(wù),任務(wù)創(chuàng)建成功后系統(tǒng)檢測GPRS緩沖區(qū)中的數(shù)據(jù)并判斷是自主導(dǎo)航還是手動導(dǎo)航。如果是手動導(dǎo)航,則系統(tǒng)直接接收遠(yuǎn)程遙控到目的地采集水樣;如果是自動導(dǎo)航,則系統(tǒng)通過GPS獲取目標(biāo)位置和當(dāng)前位置并計算運動路線。運動過程中通過超聲波不斷探測前方是否有障礙物,如果有障礙則系統(tǒng)進(jìn)行避障運動。避障后系統(tǒng)重新確定運動路線和運動方向。當(dāng)系統(tǒng)到達(dá)指定位置時便開始水質(zhì)采樣和分析以及水質(zhì)的影像采集。最后數(shù)據(jù)通過無線模塊傳輸回監(jiān)控中心。這樣就完成了一次水質(zhì)采樣。
3.2 驅(qū)動程序的編寫
攝像頭設(shè)備屬于字符設(shè)備,它能夠像字節(jié)流一樣被訪問,并且只能夠順序讀寫[6]。添加一個設(shè)備驅(qū)動程序的標(biāo)準(zhǔn)流程如圖5所示。
當(dāng)調(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攝像頭
中的各個寄存器,使攝像頭處于合適的工作模式*/
}
當(dāng)應(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的圖像子塊,對每一個圖像子塊進(jìn)行離散余弦變換。所使用的二維離散余弦變換(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ù)進(jìn)行壓縮;壓縮完成后需調(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)的軟、硬件組成,并且對一些不足提出了改進(jìn)。實踐證明,該系統(tǒng)可長期在水域中監(jiān)測水質(zhì),并可順暢地傳輸回所在位置的水質(zhì)圖像,具有一定的應(yīng)用價值。
參考文獻(xiàn)
[1] 李飛飛,楊江.遙控式移動水質(zhì)快速監(jiān)測系統(tǒng)[DB].中國優(yōu)秀碩士學(xué)位論文全文數(shù)據(jù)庫,2011:6-7.
[2] 韋鯤,任軍軍.三次諧波檢測無刷直流電機(jī)轉(zhuǎn)子位置的研究[J].中國電機(jī)工程學(xué)報,2004,24(5):163-167.
[3] 黃小莉,何毅.三相直流無刷電機(jī)驅(qū)動板設(shè)計[J].機(jī)械設(shè)計與制造,2011,5(5):60-62.
[4] 讓余奇,曹彥.采用IGBT的無刷直流電動機(jī)保護(hù)技術(shù)[J]. 微特電機(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].計算機(jī)系統(tǒng)應(yīng)用,2011,20(8):225-228.