《電子技術應用》
您所在的位置:首頁 > 測試測量 > 設計應用 > 便攜式土壤墑情和土壤溫度測量儀的設計
便攜式土壤墑情和土壤溫度測量儀的設計
來源:電子技術應用2013年第7期
李所林,宋 威,宋良平,黃 正
中國船舶重工集團公司第722研究所,湖北 武漢430079
摘要: 土壤含水量和土壤溫度值對土壤要素起著舉足輕重的作用,是農業、水利等生產科研的一個重要指標,因此準確地測量這兩個要素值顯得尤為重要。選用LPC1766為核心控制器,設計了一種便攜式測量系統,可隨時隨地檢測土壤含水量和土壤溫度值并實時顯示。該系統采用ARM Cortex-M3嵌入式系統,具有功耗低、操作簡單、攜帶方便等特點。
中圖分類號: TP212
文獻標識碼: A
文章編號: 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]。在水利科研、農業生產、園林種植、旱情預報等方面,土壤的含水量和溫度起著不可忽略的作用,準確地測量土壤含水量和溫度有助于科學指導生產科研工作,合理利用水資源,減少不必要的浪費。傳統的測量土壤含水量的方法是采用烘干法,這種方法效率低,對操作者要求高,而且操作繁瑣。傳統的測量土壤溫度的方法則是采用溫度計來測量溫度值。隨著科學的不斷進步,市面上也有一些多要素的自動墑情站用于測量土壤墑情和溫度,但這些設備的不足之處就是只能測量固定位置的要素值,要測量其他沒有安裝自動墑情站地方的要素值很不方便。而便攜式土壤墑情和土壤溫度兩要素測量儀,能夠方便、準確地測量待測地點的要素值,這樣可以減少自動墑情站的安裝,節約成本,方便使用,并且具有功耗低、攜帶方便、穩定可靠等優點。

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

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

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

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

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

 


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

    干燥土壤的介電常數一般在2~4之間,而水的介電常數一般為80。可以把含水的土壤看作為一種由干燥土壤和水混合在一起的介質,因此介電常數就會隨含水量的變化而變化。本文選用的土壤傳感器為ASW100F,它由一個100 MHz的信號源、探針以及電纜組成。根據傳輸線原理,電纜和探頭連接處的阻抗用下式表示:

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

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 美女视频免费黄色 | 在线黄网 | 性欧美另类老妇高清 | 色综合色狠狠天天久久婷婷基地 | 黄色三级视频 | 久久精品综合 | 美女张开腿给男人桶 | 国内一区| 一区二区不卡视频在线观看 | 免费观看日本高清a毛片 | 97精品国产91久久久久久 | cekc欧美| 三级亚洲| 国产精品日本一区二区不卡视频 | jul-179在线中文字幕 | 91免费国产高清观看 | 欧美一级大片在线观看 | 亚洲aⅴ在线 | 中文字幕一区中文亚洲 | a级片在线免费观看 | 日韩中文字幕一在线 | 亚洲手机在线 | 美女视频黄a视频免费全过程 | 黄色网址网站在线观看 | 久久99亚洲精品久久久久网站 | 国产一区二区三区四区五区tv | 国产猛烈无遮掩视频免费网站男女 | 国产精品日本一区二区不卡视频 | 日韩在线一区二区三区免费视频 | 日韩精品中文字幕一区三区 | 欧美日韩视频精品一区二区 | 国产一区二区三区在线观看影院 | 亚洲免费播放 | 美国一级毛片在线 | 日韩一级片免费在线观看 | 又摸又揉又黄又爽的视频 | 欧美一级特黄高清免费 | 久久久久久久免费视频 | 色综合视频一区二区观看 | 久久久国产精品视频 | www.99精品视频在线播放 |