《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > 便攜式土壤墑情和土壤溫度測(cè)量?jī)x的設(shè)計(jì)
便攜式土壤墑情和土壤溫度測(cè)量?jī)x的設(shè)計(jì)
來(lái)源:電子技術(shù)應(yīng)用2013年第7期
李所林,宋 威,宋良平,黃 正
中國(guó)船舶重工集團(tuán)公司第722研究所,湖北 武漢430079
摘要: 土壤含水量和土壤溫度值對(duì)土壤要素起著舉足輕重的作用,是農(nóng)業(yè)、水利等生產(chǎn)科研的一個(gè)重要指標(biāo),因此準(zhǔn)確地測(cè)量這兩個(gè)要素值顯得尤為重要。選用LPC1766為核心控制器,設(shè)計(jì)了一種便攜式測(cè)量系統(tǒng),可隨時(shí)隨地檢測(cè)土壤含水量和土壤溫度值并實(shí)時(shí)顯示。該系統(tǒng)采用ARM Cortex-M3嵌入式系統(tǒng),具有功耗低、操作簡(jiǎn)單、攜帶方便等特點(diǎn)。
中圖分類(lèi)號(hào): TP212
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2013)07-0028-03
Design of portable soil moisture and soil temperature measuring instrument
Li Suolin,Song Wei,Song Liangping,Huang Zheng
Research Institute 722,China Shipbuilding Industry,Wuhan 430079,China
Abstract: Soil moisture and soil temperature are important soil factors. It is an important indicator of the production and research, such as agriculture, water conservancy and so on. Therefore, accurate measurement of these two elements is particularly important. LPC1766 is choosen as CPU to design a portable data collection system. The soil moisture and soil temperature can be detected anywhere and be displayed real-timely. The ARM Cortex-M3 embedded systems is chosen as the processor. The portable instrument is low power consumption, easy for operation and carry.
Key words : portable;soil moisture;soil temperature;DS18B20

    土壤墑情是指土壤含水量及土壤濕度,即土壤干濕程度[1]。在水利科研、農(nóng)業(yè)生產(chǎn)、園林種植、旱情預(yù)報(bào)等方面,土壤的含水量和溫度起著不可忽略的作用,準(zhǔn)確地測(cè)量土壤含水量和溫度有助于科學(xué)指導(dǎo)生產(chǎn)科研工作,合理利用水資源,減少不必要的浪費(fèi)。傳統(tǒng)的測(cè)量土壤含水量的方法是采用烘干法,這種方法效率低,對(duì)操作者要求高,而且操作繁瑣。傳統(tǒng)的測(cè)量土壤溫度的方法則是采用溫度計(jì)來(lái)測(cè)量溫度值。隨著科學(xué)的不斷進(jìn)步,市面上也有一些多要素的自動(dòng)墑情站用于測(cè)量土壤墑情和溫度,但這些設(shè)備的不足之處就是只能測(cè)量固定位置的要素值,要測(cè)量其他沒(méi)有安裝自動(dòng)墑情站地方的要素值很不方便。而便攜式土壤墑情和土壤溫度兩要素測(cè)量?jī)x,能夠方便、準(zhǔn)確地測(cè)量待測(cè)地點(diǎn)的要素值,這樣可以減少自動(dòng)墑情站的安裝,節(jié)約成本,方便使用,并且具有功耗低、攜帶方便、穩(wěn)定可靠等優(yōu)點(diǎn)。

1 系統(tǒng)總體結(jié)構(gòu)
    便攜式采集器是一款輕小便捷的兩要素手持設(shè)備采集器,主要采集土壤含水量和土壤溫度值。硬件總體框圖如圖1所示。系統(tǒng)初始化完成后,GPS模塊獲取待采集位置的地理信息和時(shí)間,并將時(shí)間更新到系統(tǒng)時(shí)鐘。使用時(shí)只需將插針式墑情傳感器和溫度傳感器插入待測(cè)土壤中便可采集要素。采集的要素值可存儲(chǔ)在EEPROM中,并在LCD上顯示測(cè)量值,實(shí)現(xiàn)即用即測(cè)。同時(shí)可讀出EEPROM的數(shù)據(jù)并顯示某一段時(shí)間內(nèi)的墑情和溫度特性曲線(xiàn)圖。設(shè)備上的USB接口有兩個(gè)功能:一是通過(guò)USB可以將EEPROM中存儲(chǔ)的數(shù)據(jù)導(dǎo)入到計(jì)算機(jī)中,便于分析和比較;二是 USB接口可供系統(tǒng)充電。

2 微處理器
    ARM Cortex-M3 LPC1766是一個(gè)低成本、低功耗并且具有極高運(yùn)行能力和中斷響應(yīng)能力的處理器[2]。其操作頻率可達(dá)100 MHz,具有3級(jí)流水線(xiàn)和哈佛結(jié)構(gòu),帶獨(dú)立的本地指令和數(shù)據(jù)總線(xiàn)以及用于外設(shè)的低性能的第3條總線(xiàn),其外設(shè)組建包含512 KB的Flash存儲(chǔ)器、64 KB的數(shù)據(jù)存儲(chǔ)、以太網(wǎng)MAC、USB接口、10位DAC、內(nèi)部RTC等功能。LPC1766還有許多新的特征,包括Thumb-2指令集、低中斷延時(shí)、硬件除法、可中斷可持續(xù)的多次加載和存放指令、對(duì)中斷的自動(dòng)狀態(tài)進(jìn)行保存和恢復(fù)、緊密結(jié)合中斷控制器與喚醒中斷控制器、多條內(nèi)核總線(xiàn)可同時(shí)訪(fǎng)問(wèn)等[3]。
3 土壤墑情傳感器接口電路
    土壤墑情測(cè)量接口電路如圖2所示。微控制器通過(guò)GPIO口控制墑情傳感器的電源。當(dāng)需要進(jìn)行墑情要素采集時(shí)才給傳感器供電,這樣降低了功耗,減少了傳感器插入土壤中的探針發(fā)生電解的時(shí)間[4],延長(zhǎng)了傳感器的使用壽命。傳感器采集到的電壓信號(hào)(ΔV=VT_H-VT_L)經(jīng)過(guò)放大后由微控制器進(jìn)行A/D轉(zhuǎn)換得到采樣值,在0~50%范圍內(nèi)可通過(guò)以下三次多項(xiàng)式得到土壤含水量的轉(zhuǎn)換結(jié)果。

4 溫度傳感器接口電路
    DS18B20是單總線(xiàn)的工作方式,即在一根數(shù)據(jù)線(xiàn)上實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸,所以DS18B20的外接電路也相對(duì)簡(jiǎn)單。典型的電路有兩種:一種是采用寄生電源供電,另一種是采用外接電源供電。無(wú)論采用哪一種方式,其DQ引腳都要外接一個(gè)上拉電阻。本文選取采用外接電源供電的方式,VCC外接3 V~5.5 V電源,GND引腳接地,DQ引腳通過(guò)上拉電阻接微控制器的I/O端口,其原理圖如圖3所示。

5 RT-Thread操作系統(tǒng)的移植
    為保證系統(tǒng)的穩(wěn)定性和實(shí)時(shí)性,選用開(kāi)源RT-Thread操作系統(tǒng)。RT-Thread 內(nèi)核大致可分為對(duì)象管理、實(shí)時(shí)調(diào)度器、線(xiàn)程管理、線(xiàn)程間通信、時(shí)鐘管理、設(shè)備驅(qū)動(dòng)6個(gè)部分[5]。移植的軟件編譯平臺(tái)為Keil MDK 4.23,具體操作步驟如下:
    (1)打開(kāi)Keil編譯環(huán)境,新建一個(gè)Keil編譯工程文件命名并保存,系統(tǒng)提示選擇具體的芯片型號(hào),選擇CPU為L(zhǎng)PC1766。
    (2)添加RT-Thread內(nèi)核組件,將Keil工程瀏覽目錄下的Target 1更名為RT-Thread LPC1766,將RT-Thread LPC1766下的文件夾Source Group1更名為Kernel,同時(shí)新建文件夾System、Cortex-M3、finsh、Driver、Lwip。在Kernel中加入RT-Thread內(nèi)核組件;在Cortex-M3中加入內(nèi)核自帶并針對(duì)LPC176x移植的匯編文件;在Driver文件中添加設(shè)備相應(yīng)的驅(qū)動(dòng)函數(shù);在System中添加相應(yīng)的啟動(dòng)文件、中斷向量表、核心板文件等;在finsh中添加finsh shell組件;在App中添加用戶(hù)編寫(xiě)的一些應(yīng)用文件;在Lwip中添加TCP/IP協(xié)議文件。同時(shí)可以根據(jù)實(shí)際需求,在Rtconfig.h中配置系統(tǒng)時(shí)鐘、最大優(yōu)先級(jí)、是否啟用finsh等。
    (3)在Project->Options for Targe′ RT-Thread LPC1766′中選擇C/C++選項(xiàng)卡,添加系統(tǒng)所需頭文件的路徑,包括內(nèi)核、驅(qū)動(dòng)以及用戶(hù)定義的所需頭文件的路徑。
    至此,RT-Thread移植基本完成,用戶(hù)可以編寫(xiě)相應(yīng)的應(yīng)用程序并執(zhí)行。
6 DS18B20在RT-Thread驅(qū)動(dòng)的實(shí)現(xiàn)
6.1 DS18B20簡(jiǎn)介

    DS18B20是一款數(shù)字式的溫度傳感器,它是一個(gè)單總線(xiàn)的器件,測(cè)量溫度范圍在-55 ℃~+125 ℃,在-10 ℃~
+85 ℃范圍內(nèi)的測(cè)量精度能夠達(dá)到±0.5 ℃,測(cè)量精度相對(duì)較高。通過(guò)編程可實(shí)現(xiàn)9~12位精度的數(shù)字讀方式,并且具有溫度上下限報(bào)警功能。在一個(gè)系統(tǒng)中可以?huà)旖佣鄠€(gè)DS18B20器件,每個(gè)器件都有一個(gè)唯一的序列號(hào)存儲(chǔ)在ROM中,DS18B20提供了5種ROM指令供識(shí)別器件,同時(shí)還提供了6種RAM指令來(lái)操作DS18B20。
6.2 DS18B20驅(qū)動(dòng)實(shí)現(xiàn)
    一般來(lái)說(shuō),在一個(gè)測(cè)溫系統(tǒng)中,DS18B20都是作為從機(jī)供主機(jī)訪(fǎng)問(wèn),微控制器通過(guò)單總線(xiàn)訪(fǎng)問(wèn)DS18B20一般需要以下3個(gè)步驟[6]:
    (1)復(fù)位初始化DS18B20。
    (2)執(zhí)行ROM指令(器件識(shí)別),對(duì)于設(shè)備上只有一個(gè)DS18B20的系統(tǒng)來(lái)說(shuō),無(wú)需讀序列號(hào)來(lái)匹配設(shè)備,可以省略讀ROM指令,直接執(zhí)行功能指令。
    (3)執(zhí)行RAM指令,包括寫(xiě)命令到DS18B20,啟動(dòng)溫度轉(zhuǎn)換,從DS18B20讀數(shù)據(jù)。
6.2.1 DS18B20復(fù)位流程
    在對(duì)DS18B20進(jìn)行初始化時(shí),最主要的一點(diǎn)就是對(duì)時(shí)序的控制,若延時(shí)控制不當(dāng),DS18B20將不能工作或不能正確測(cè)量溫度值。DS18B20初始化流程如下:
    (1)設(shè)置總線(xiàn)為輸入狀態(tài)。
    (2)拉低總線(xiàn)約480 ?滋s~960 ?滋s。
    (3)釋放總線(xiàn),外部上拉電阻拉高總線(xiàn)15 ?滋s~60 ?滋s,隨后DS18B20會(huì)拉低總線(xiàn)約60 ?滋s~240 ?滋s來(lái)應(yīng)答主控制器。
    (4)設(shè)置總線(xiàn)狀態(tài)為輸出,主控制器讀取總線(xiàn)電平,如果為低電平則表示初始化完成。
    (5)釋放總線(xiàn),初始化完成之后控制器就可對(duì)DS18B20進(jìn)行操作訪(fǎng)問(wèn)。
6.2.2 DS18B20寫(xiě)流程
    寫(xiě)一個(gè)操作命令字節(jié)到DS18B20需循環(huán)8次,因?yàn)镈S18B20是一個(gè)單總線(xiàn)的設(shè)備,所以只能逐位操作。DS18B20的寫(xiě)操作流程如下:
    (1)設(shè)置總線(xiàn)為輸入狀態(tài)。
    (2)拉低總線(xiàn)并延時(shí)約10 ?滋s~15 ?滋s。
    (3)寫(xiě)入數(shù)據(jù),寫(xiě)入的是“1”,則拉高總線(xiàn)約15 ?滋s~40 ?滋s;寫(xiě)入的是“0”,則拉低總線(xiàn)約15 ?滋s~40 ?滋s。
    (4)字節(jié)數(shù)寫(xiě)入完成后釋放總線(xiàn),等待約3 ?滋s。
6.2.3 DS18B20讀流程
    讀DS18B20與寫(xiě)操作類(lèi)似,也是要循環(huán)8次。若檢測(cè)到DQ的狀態(tài)為高電平,則將數(shù)據(jù)data的最高位置1,通過(guò)逐次向右移位來(lái)獲得DS18B20檢測(cè)的溫度值。DS18B20的讀數(shù)據(jù)流程如下:

 


    (1)拉低總線(xiàn)約1 ?滋s。
    (2)釋放總線(xiàn),讀取總線(xiàn)電平狀態(tài)。
    (3)如果讀到的是低電平,則表示讀到的是“0”;如果讀到的是高電平,則讀到的是“1”。
    (4)延時(shí)約30 ?滋s~45 ?滋s。
    完成以上步驟后,將驅(qū)動(dòng)移植到RT-Thread驅(qū)動(dòng)中,其公共接口的實(shí)現(xiàn)代碼如下:
void rt_hw_ds18b20_init(void)
{
    ……
    ds18b20->parent.init        = rt_ds18b20_init;
    ds18b20->parent.open        = rt_ds18b20_open;
    ds18b20->parent.close        = rt_ds18b20_close;
    ds18b20->parent.read        = rt_ds18b20_read;
    ds18b20->parent.write        = RT_NULL;
    ds18b20->parent.control        = RT_NULL;
    ds18b20->parent.user_data    = RT_NULL;
    rt_device_register(&ds18b20->parent,  "ds18b20",
RT_DEVICE_FLAG_RDWR );
}
    上述函數(shù)中,在rt_ds18b20_read函數(shù)中讀取DS18B20的溫度值的過(guò)程中就包含初始化設(shè)備,而獲取總線(xiàn)、釋放總線(xiàn)的功能與打開(kāi)設(shè)備、關(guān)閉設(shè)備類(lèi)似,因此rt_ds18b20_
init、rt_ds18b20_open、rt_ds18b20_close 3個(gè)函數(shù)的函數(shù)體可以直接返回RT_EOK。而其他函數(shù)在采樣時(shí)沒(méi)有涉及到這些功能,因此可以為RT_NULL。rt_device_register函數(shù)用于注冊(cè)設(shè)備并設(shè)置相應(yīng)的屬性,注冊(cè)的設(shè)備可以通過(guò)查找設(shè)備名稱(chēng)來(lái)找到設(shè)備,并獲得相應(yīng)的設(shè)備控制塊。整個(gè)DS18B20驅(qū)動(dòng)中,所有對(duì)DS18B20的操作都是在rt_ds18b20_read函數(shù)中完成的。rt_ds18b20_read函數(shù)中進(jìn)行了設(shè)備的初始化、執(zhí)行相應(yīng)的ROM指令和執(zhí)行相應(yīng)的RAM指令操作來(lái)實(shí)現(xiàn)DS18B20的溫度測(cè)量,rt_ds18b20_read函數(shù)的主要功能如下:
static rt_size_t rt_ds18b20_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size)
{
    ........
    rt_enter_critical();        //調(diào)度器上鎖,僅響應(yīng)中斷
    InitDS18B20 ();        //設(shè)備初始化
    WriteOneChar(0xCC);    //跳過(guò)讀序列號(hào)操作
    WriteOneChar(0x44);    //啟動(dòng)溫度轉(zhuǎn)換
    InitDS18B20 ();
    WriteOneChar(0xCC);
    WriteOneChar(0xBE);    //讀取溫度寄存器操作
    lsb = ReadOneChar();    //讀低字節(jié)
    msb = ReadOneChar();    //讀高字節(jié)
    rt_exit_critical();        //調(diào)度器解鎖
    Temperature = ((msb << 8) | lsb) * 6.25;
//DS18B20 的溫度操作的分辨率是0.062 5
    &hellip;&hellip;
}
    t/100為溫度值的整數(shù)部分,而(t % 100)/10為溫度值的小數(shù)部分。在上層的應(yīng)用中,軟件只需調(diào)用rt_device_read函數(shù)就能獲取相應(yīng)的溫度值,該函數(shù)的返回值是讀到數(shù)據(jù)的大小(以字節(jié)為單位),如果返回值是0,則需要讀取當(dāng)前線(xiàn)程的errno來(lái)判斷錯(cuò)誤狀態(tài)。
7 土壤墑情測(cè)量
7.1 傳感器原理[4]

    干燥土壤的介電常數(shù)一般在2~4之間,而水的介電常數(shù)一般為80??梢园押耐寥揽醋鳛橐环N由干燥土壤和水混合在一起的介質(zhì),因此介電常數(shù)就會(huì)隨含水量的變化而變化。本文選用的土壤傳感器為ASW100F,它由一個(gè)100 MHz的信號(hào)源、探針以及電纜組成。根據(jù)傳輸線(xiàn)原理,電纜和探頭連接處的阻抗用下式表示:

 
式中,Zc為探頭在空氣中的特征阻抗;l為探針的長(zhǎng)度;?姿o為正弦波在空氣中的波長(zhǎng);?著為探針周?chē)寥赖慕殡姵?shù);j為虛數(shù)部分的表示因子。由式(2)可知,阻抗Zi與探針周?chē)寥赖慕殡姵?shù)?著有關(guān),阻抗Zi隨著土壤介電常數(shù)的不斷變化而變化,導(dǎo)致探針和電纜的阻抗不匹配,這會(huì)在電纜中產(chǎn)生駐波,而駐波的波峰和波谷也會(huì)隨著土壤介電常數(shù)的變化而變化。因此,駐波包絡(luò)的電壓就反應(yīng)了土壤含水量的情況,因此可以通過(guò)測(cè)量電纜上的電壓差得出土壤的含水量情況。
7.2 土壤墑情的采樣
    土壤墑情的采樣主要是將采集的電壓信號(hào)放大,然后通過(guò)微控制器的A/D轉(zhuǎn)換來(lái)實(shí)現(xiàn)的。A/D讀取的數(shù)據(jù)通過(guò)式(1)得到土壤墑情值,具體的采樣流程為:(1)微控制器通過(guò)控制GPIO口為墑情傳感器供電。(2)墑情傳感器進(jìn)行數(shù)據(jù)采樣。(3)采樣的電壓信號(hào)經(jīng)過(guò)放大器進(jìn)行放大。(4)將放大器放大的電壓信號(hào)通過(guò)微控制器進(jìn)行A/D轉(zhuǎn)換。(5)A/D轉(zhuǎn)后的值經(jīng)過(guò)軟件運(yùn)算處理后得到土壤含水量的值。
    在測(cè)量的過(guò)程中,難免會(huì)出現(xiàn)測(cè)量偏差。為此在采樣時(shí)連續(xù)測(cè)量3次,比較兩個(gè)測(cè)量值之間的差值。如果兩次測(cè)量誤差大于1%,則認(rèn)為測(cè)量失敗,反之則認(rèn)為測(cè)量值有效。然后將測(cè)量的3次有效值求平均來(lái)獲取本次測(cè)量值。軟件過(guò)濾無(wú)效值的代碼如下:
void SoilDataDetec(void)
{
    &hellip;&hellip;
    for (j = 0; j < 3; j++) {
        value = Multi_Detect();  //從A/D讀出采樣值
        &hellip;&hellip;
        value = 0.111 * pow(value, 3) - 0.2338 * pow
(value, 2)+ 0.2756 * value - 0.0211;
        &hellip;&hellip;//依據(jù)式(1)計(jì)算
        temp[cnt++] =value;
    }
    if (cnt == 3) {
//3次測(cè)得的值都有效,兩兩測(cè)量值之間不大于1% 則
//認(rèn)為有效
    if ((fabs(temp[0] - temp[1]) > 0.01f) || (fabs(temp[0]
- temp[2]) > 0.01f) ||
(fabs(temp[1] - temp[2]) > 0.01f) )  {
        SoilValue = Pre_SoilValue;
//無(wú)效值,則選用前一次采集到的值
    } else {
        avgvalue = (temp[0] + temp[1] + temp[2]) / cnt;
//取平均值
        SoilValue = avgvalue;
        &hellip;&hellip;
    }
    &hellip;&hellip;
  }
    本文所設(shè)計(jì)的基于ARM Cortex-M3的嵌入式便攜機(jī)能夠?qū)崿F(xiàn)土壤墑情和土壤溫度兩要素的實(shí)時(shí)采集,采集的數(shù)據(jù)存儲(chǔ)到EEPROM并在LCD界面上實(shí)時(shí)顯示,同時(shí)可以顯示一段時(shí)間內(nèi)的墑情和溫度曲線(xiàn)圖??赏ㄟ^(guò)USB將存儲(chǔ)的數(shù)據(jù)導(dǎo)入計(jì)算機(jī)中進(jìn)行分析和比較。實(shí)踐結(jié)果表明,該設(shè)備具有操作簡(jiǎn)單、攜帶方便、功耗較低等特點(diǎn)。
參考文獻(xiàn)
[1] 陳天華,唐海弢,鄭文剛.基于S3C2410的土壤墑情檢測(cè)系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2011,37(7):89-92.
[2] 周立功.深入淺出Cortex-M3&mdash;&mdash;LPC1700[M].廣州:廣州致遠(yuǎn)電子有限公司,2010.
[3] 廣州周立功單片機(jī)發(fā)展有限公司.LPC1766使用手冊(cè)[Z].2010.
[4] 彭曾愉,趙燕東.基于&mu;C/OS-II操作系統(tǒng)的土壤水分實(shí)時(shí)監(jiān)測(cè)系統(tǒng)[J].北京林業(yè)大學(xué)學(xué)報(bào),2010,32(11):114-119.
[5] 朱志國(guó).RT-Thread操作系統(tǒng)在STM32中移植的研究[J].計(jì)算機(jī)光盤(pán)軟件與應(yīng)用,2012(22):119-120.
[6] 鄭宏軍,黎昕,孟祥國(guó).1-Wire單總線(xiàn)器件技術(shù)規(guī)范及應(yīng)用研究[J].電子技術(shù),2004(9):39-42.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。