文獻標識碼: A
文章編號: 0258-7998(2012)10-0034-03
隨著我國工業(yè)發(fā)展,,水污染問題日益突出,對水質進行監(jiān)測越來越重要,。2000年我國自主生產(chǎn)的“長江水環(huán)檢測2000”[1],,因其檢測船造價昂貴,難以在全國推廣,。電子技術的發(fā)展,,使得以更微型、更廉價的方式制造出類似“長江2000”監(jiān)測船功能的在線水質監(jiān)測平臺成為可能,。因此,,本文提出了以德州儀器2012年最新發(fā)布的以低功耗且價格敏感的工業(yè)用芯片AM3359為核心處理器的移動在線水質監(jiān)測平臺。該平臺可以實現(xiàn)水域中的任意移動,、平臺的經(jīng)緯度實時監(jiān)測,、水樣本的自動獲取及各項水質指標的檢測、圖像數(shù)據(jù)及被檢水質數(shù)據(jù)的無線傳輸,。平臺配備了柔性太陽能電池板,、12 V蓄電池以及相應的電源控制電路,可實現(xiàn)蓄電池的自動充電。
1 系統(tǒng)構成
整個系統(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,。功能模塊包括水質測量模塊、圖像采集模塊,、電源模塊,、電機控制模塊、GPS定位模塊,、GPRS無線傳輸模塊,、電子羅盤方向導航模塊、超聲波測障模塊,。
水質監(jiān)測平臺系統(tǒng)構成圖如圖1所示,。
2 硬件設計
在圖1中,電子羅盤模塊采用霍尼韋爾公司推出的3軸數(shù)字羅盤HMC5883,;GPS模塊和GPRS模塊采用SIMCom公司最新推出的sim908模塊,,該模塊把GPS和GPRS集成到一起,由AT指令控制,;水質采樣模塊使用2個小型水泵,,通過I/O口控制繼電器實現(xiàn)水泵的抽水和排水;太陽能充電模塊采用CN3063太陽能充電管理芯片,。這些模塊在應用時十分簡單,,本文不詳細闡述。本文將重點介紹運動控制模塊的改進和基于Linux操作系統(tǒng)的圖像采集與傳輸,。
2.1 運動控制模塊設計
本設計選用無刷直流電機作為運動控制模塊的核心部件,,選用IR21365和GIB10B60KD1構成無刷電機的驅動電路。無刷電機由于沒有電刷,,壽命比有刷電機提高了6倍,同時還具有結構簡單、性能可靠,、永無磨損,、空載電流小、過載能力大等優(yōu)點[2-3],。運動控制模塊結構框圖如圖2所示,。
2.2 硬件邏輯防短路電路設計
軟件邏輯上的錯誤可能導致與電機某相連接的上下兩只IGBT管同時導通,使電路出現(xiàn)短路[4],,引起電流過大而燒壞IGBT管,。對此,本文通過“與非門”搭建一個電路,,使得當與上下兩只IGBT管柵極相連的PWM波引腳都為高電平時,,與電機相連的相不導通。由于電機三相存在對稱性,,這里僅取電機的A相來分析硬件上如何防止上下兩只IGBT管同時導通,,其原理圖如圖3所示。
由于IR2136S只是增強信號的驅動能力,,不改變信號邏輯上的值,,因此從邏輯上說Q1′和Q1、Q2′和Q2是一樣的,。根據(jù)本文的設計,,當Q1′、Q2′為低電平時,,相應的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ù)為相應寄存器的設定值,。本文設置OV7620為連續(xù)掃描、RGB原始數(shù)據(jù)16位方式輸出,。用如下的函數(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卡中,,當收到相應命令時,通過GPRS無線模塊把圖像發(fā)送給監(jiān)控中心,。
3 系統(tǒng)軟件設計
3.1 操作系統(tǒng)
本文采用具有可靠性高,、源代碼開放等優(yōu)點的Linux操作系統(tǒng)。在為系統(tǒng)移植Linux操作系統(tǒng)之后,,將為OV7620添加驅動程序,。
整個系統(tǒng)流程為:系統(tǒng)開機后進行初始化并創(chuàng)建各個任務,任務創(chuàng)建成功后系統(tǒng)檢測GPRS緩沖區(qū)中的數(shù)據(jù)并判斷是自主導航還是手動導航,。如果是手動導航,,則系統(tǒng)直接接收遠程遙控到目的地采集水樣;如果是自動導航,,則系統(tǒng)通過GPS獲取目標位置和當前位置并計算運動路線,。運動過程中通過超聲波不斷探測前方是否有障礙物,如果有障礙則系統(tǒng)進行避障運動,。避障后系統(tǒng)重新確定運動路線和運動方向,。當系統(tǒng)到達指定位置時便開始水質采樣和分析以及水質的影像采集。最后數(shù)據(jù)通過無線模塊傳輸回監(jiān)控中心,。這樣就完成了一次水質采樣,。
3.2 驅動程序的編寫
攝像頭設備屬于字符設備,它能夠像字節(jié)流一樣被訪問,,并且只能夠順序讀寫[6],。添加一個設備驅動程序的標準流程如圖5所示。
當調(diào)用驅動程序時,,操作系統(tǒng)會自動調(diào)用module_
init()函數(shù),;退出驅動程序時,操作系統(tǒng)會自動調(diào)用module_exit()函數(shù)以釋放系統(tǒng)資源,。
關鍵的函數(shù)如下:
register_chrdev_region(devno,1,″ov7620″);
/*申請設備號*/
cdev_init(&dev.cdev,&ov7620_fops);
/*初始化cdev結構體*/
dev.cdev.owner=THIS_MODULE;
dev.cdev.ops=&ov7620_fops;
/*關聯(lián)cdev結構體和file_operations結構體*/
cdev_add(&dev.cdev,devno,1);
/*添加cdev結構體*/
其中有一個非常重要的結構體(即file_operations結構體)是Linux系統(tǒng)中為應用程序提供各種操作接口的核心結構體,,編寫驅動的大部分工作實際上就是填充file_operations結構體中的各個子函數(shù)。在本文中,,攝像頭的file_operations結構體如下:
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接口設置OV7620攝像頭
中的各個寄存器,,使攝像頭處于合適的工作模式*/
}
當應用程序調(diào)用open函數(shù)時,程序最終會調(diào)用到驅動程序里的OV7620_open()函數(shù),,從而操作硬件,。其他的應用程序的函數(shù)調(diào)用,,最終也會尋找到file_operations結構體中對應的鉤子函數(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微處理器為核心的移動在線水質監(jiān)測平臺的開發(fā)和系統(tǒng)的軟,、硬件組成,并且對一些不足提出了改進,。實踐證明,,該系統(tǒng)可長期在水域中監(jiān)測水質,并可順暢地傳輸回所在位置的水質圖像,,具有一定的應用價值,。
參考文獻
[1] 李飛飛,楊江.遙控式移動水質快速監(jiān)測系統(tǒng)[DB].中國優(yōu)秀碩士學位論文全文數(shù)據(jù)庫,,2011:6-7.
[2] 韋鯤,,任軍軍.三次諧波檢測無刷直流電機轉子位置的研究[J].中國電機工程學報,2004,,24(5):163-167.
[3] 黃小莉,,何毅.三相直流無刷電機驅動板設計[J].機械設計與制造,2011,,5(5):60-62.
[4] 讓余奇,,曹彥.采用IGBT的無刷直流電動機保護技術[J]. 微特電機,2004,,5(5):38-40.
[5] 雷霏霖,,梁志毅.基于CMOS傳感器OV7620采集系統(tǒng)設計[J].電子測量技術,,2008,31(12):110-112.
[6] 樊國棟,,石紅瑞.嵌入式Linux下CMOS攝像頭驅動的設計與實現(xiàn)[J].工業(yè)儀表與自動化裝置,,2010,3(3):68-70.
[7] 鄭凱華,,章旭東.基于S3C2440的圖像采集與顯示系[J].計算機系統(tǒng)應用,,2011,20(8):225-228.