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