• <del id="qqie6"><sup id="qqie6"></sup></del>
  • <tfoot id="qqie6"></tfoot>
  • <ul id="qqie6"></ul>
  • 產品推薦:水表|流量計|壓力變送器|熱電偶|液位計|冷熱沖擊試驗箱|水質分析|光譜儀|試驗機|試驗箱


    儀表網>技術中心>應用設計>正文

    歡迎聯系我

    有什么可以幫您? 在線咨詢

    基于PXA310平臺的溫濕度傳感器設計與實現方法

       2012年10月12日 13:25  
      摘要:在嵌入式應用領域,需要測量周圍環境的質量對生產和工作進行監控和預警。通過比較設計方案,提出在嵌入式Linux下,基于PXA310平臺溫濕度傳感器的設計與實現方法。在Linux操作系統下通過對驅動程序接口調用,完成溫濕度數據讀取和預警,并對Linux驅動程序編寫進行比較。實驗表明,本方案硬件和軟件設計切實可行,提高了環境測量的準確度和系統性能的實時性。
      
      1、引言
      
      在工業控制和工業生產領域中,傳感器對于工業控制和生產環境的監控作用不言而喻。傳統的傳感器監控系統大都采用單片機控制,其監控的準確度和實時性不太令人滿意。本文尋找到一套切實可行的傳感器設計方案,其利用溫濕度傳感器芯片,基于PXA310硬件平臺和Linux操作系統,能有效監控現場溫濕度變化。在周圍環境發生變化,不能滿足工作要求時,可以獲取監控數據并提出預警,提高生產和工作環境檢測的可靠性及實時性。
      
      2、溫濕度傳感器電路設計
      
      比較了一些傳感器應用設計方案后,選用SHT10芯片為嵌入式溫濕度傳感器的核心部件。它外圍電路簡便,相比其他傳感器芯片(DS18B20)有其獨到優勢。
      
      STH10每秒可進行3次溫濕度測量,數據精度14bit并且工作穩定。其測量采用CMOSens,所以在測量效率和精度上要好于DS18B20.DS18B20采用單總線控制方案(1-wire),大約每秒測量一次,9位數字式溫度數據;只提供溫度測量。其在生產環境檢測要求嚴格時,就顯得精度和功能有些不足。
      
      2.1sht10簡介
      
      SHT10是一款高度集成的溫濕度傳感器芯片,提供全量程標定數字輸出。傳感器包括一個電容性聚合體濕度敏感元件和一個用能隙材料制成的溫度敏感元件,他們與一個14位A/D轉換器以及一個串行接口電路設計在同一個芯片上面。其通過標定得到校準系數以程序形式儲存在芯片OTP內存中,并利用兩線制串行接口與內部電壓調整,使外圍系統集成變得快速而簡單。
      
      2.2SHT10工作原理
      
      SHT10芯片電源3.3V.傳感器上電后,等待11ms來完成"休眠"狀態。通信復位和啟動傳輸命令后,發送一組測量命令('00000101'表示相對濕度RH,'00000011'表示溫度T),控制器要等待測量結束。這個過程需要大約11/55/210ms,分別對應8/12/14bit測量。SHT10通過下拉DATA至低電平,表示測量結束。控制器觸發SCK時鐘前,必須等待這個"數據備妥"信號才能將測量數據正確讀入。
      
      測量和通訊結束后,SHT10自動轉入休眠模式。數據傳送采用兩線制串行接口(與I2C接口不兼容)。
      
      2.3SHT10電路原理圖
      
      SHT10采用LCC封裝,其DATA和SCK引腳分別連接到PXA310的GPIO78和GPIO79.PXA310通過模擬時序方式實現對外圍溫濕度傳感器的控制和數據讀寫操作。由于SHT10對于溫濕度靈敏度很高,在系統集成時應盡量遠離發熱源(如MCU、LCD等),否則測量結果會有所偏離;為SHT10布線時,周圍應盡量鋪地減少周圍器件對其的干擾。SHT10電路原理圖如圖1所示。
      
      圖1SHT10電路原理圖
      
      3、Linux溫濕度傳感器驅動程序實現
      
      單片機控制的傳感器設備中,單片機通常是單線程運行。在進行溫濕度測量時,單片機需要等待測試結果返回,其方法阻礙了其他測試和操作的同步執行。
      
      在嵌入式Linux系統中,驅動程序將測試任務送入任務隊列,交出CPU控制權,繼而進行其他實時任務運行,待內核空閑再進入任務隊列完成傳感器的測量,以此提高系統執行的效率和實時性。
      
      3.1Linux溫濕度傳感器設備加載
      
      溫濕度傳感器使用Linux內核的Miscdevice數據結構在驅動程序初始化時將設備注冊到內核。
      
      Miscdevice是字符設備,其主設備號為10,設備及設備接口函數定義如下所示。


      
      驅動程序加載設備時將調用內核的注冊函數。在Linux2.4和2.6內核中,幾乎所有Linux驅動程序都依靠如下函數加載模塊。
      
      驅動程序初始化完成后,上層應用程序可以調用sht10_fops中的sht10_read函數進行溫濕度的讀取操作。
      
      3.2Linux溫濕度傳感器設備操作
      
      進行數據讀取前,首先要在驅動程序中開辟4個字節的數據空間,用于存放溫度和濕度測量值。這里定義全局變量數據緩沖區為unsignedcharbuf[4].
      
      讀取SHT10溫濕度數據前,需要進行端口初始化和SHT10復位操作,然后將任務送于任務隊列并阻塞線程,當任務完成返回后再喚醒線程,將讀到數據傳遞給上層應用程序做進一步處理。程序流程圖和實現函數如圖2所示。
      
      圖2驅動程序流程圖。
      
      上述函數中start_trans;write_byte;read_data;read_byte分別利用PXA310引腳模擬時序完成啟動傳輸、寫字節,讀一位數據和讀字節的操作。
      
      內核tasklet_schedule()調度執行的tasklet,在獲得運行機會之前只會調度一次,如果在運行時被調度,則完成后會被再次運行。
      
      wait_for_completion()這個函數進行一個不可打斷的等待,如果有代碼調用它,并且沒有完成這個任務,結果會是一個不可殺死的進程。copy_to_user()將內核空間數據傳向上層用戶空間,并讓上層測試程序做進一步處理。
      
      3.3Linux溫濕度傳感器設備阻塞操作
      
      由于溫濕度傳感器測量需要一定時間,為提高系統運行效率和實時性,在驅動程序中阻塞線程,交出內核控制權,等待操作完成后喚醒線程,提高系統利用率。complete()在函數中就是喚醒一個等待的讀取線程。任務隊列實現函數如下所示。
      
      Tasklet可以使測量操作在系統負荷不重時被調用,或是被立即執行,但始終不會晚于下一個CPUclock.
      
      Tasklet始終在中斷期間運行,并且在調度他的同一CPU上運行。對比單片機系統,在單線程情況下,一般在sht10_read()中調用2次measure_sht10()來等待測量完成,測量效率依賴2次測量消耗的時間;但在Linux驅動程序中,使用Tasklet方式操作,2次測量過程不會對其他線程產生影響,在有其他實時事件需要及時處理時(如網絡,視頻),可以更有效提高驅動運行效率,降低對其他實時處理產生的影響。
      
      4、溫濕度傳感器測試與驗證
      
      驅動程序完成以后,需要相應測試程序驗證驅動程序編寫的正確性。由于驅動程序中不能對數據進行浮點數運算,所以測試程序必須將驅動程序傳遞來的數據進行浮點數運算才能得到相應的溫濕度值。
      
      4.1溫濕度傳感器測試環境
      
      在實驗室常溫下,測試程序多次調用驅動程序中讀溫濕度的函數接口獲得測試數據,來驗證設計的正確和可靠。并考慮實驗室內常溫下,相對濕度與溫度具有非線性關系,計算濕度值時需要考慮溫度的補償關系,其關系如圖3所示。
      
      圖3SORH轉換到相對濕度。
      
      為補償濕度傳感器的非線性以獲取準確數據,并考慮實際溫度與測試參考溫度(25℃)不同,使用如下公式修正讀數。
      
      RHlinear是溫度修正系數,RHtrue是相對濕度,SORH是傳感器返回的濕度值。進行12bit濕度檢測時,參數取值如下表所示。
      
      表1濕度轉換系數與溫度補償系數
      
      由于能隙材料研發的溫度傳感器具有*線性,14bit溫度值參考如下公式。
      
      Temperature=d1+d2xSOT
      
      溫度轉換系數取值如下表所示,SOT是傳感器返回的溫度值。
      
      表2溫度轉換系數
      
      利用上述溫濕度轉換公式和系數可以得出溫濕度測量值。
      
      4.2溫濕度傳感器測試途徑與效率驗證
      
      在測試程序中,考慮上述測量環境下溫濕度之間的非線性,調用驅動程序的sht10_read函數將讀到的溫濕度數據返回上層測試程序進行浮點數運算,將計算值通過串口輸出,達到測試驗證的目的。測試程序的實現如下所示。
      
      staticvoidcalc_sht10(float*humi,float*temp)
      
      {
      
      floatrh=*humi;
      
      floatt=*temp;
      
      floatrh_line;
      
      floatrh_true;
      
      t=t*d2+d1;//溫度轉換公式
      
      rh_line=C3*rh*rh+C2*rh+C1;//相對濕度轉換公式
      
      rh_true=(t-25)*(t1+t2*rh)+rh_line;
      
      //相對濕度溫度補償
      
      if(rh_true>100)rh_true=100;//超出范圍
      
      if(rh_true<0.1)rh_true=0.1;
      
      printf("Humidityis:%.2f%RHn",rh_true);
      
      printf("Temperatureis:%.2f'Cn",t);
      
      }
      
      intmain(intargc,char*argv[])//主函數
      
      {
      
      intfd;
      
      floattemp,humi;//溫濕度數據
      
      charbuffer[4];//數據緩沖
      
      fd=open("/dev/sht10",0);//打開文件
      
      if(fd<0){//打開失敗,退出
      
      perror("opendevice/dev/sht10");
      
      exit(1);
      
      }
      
      read(fd,buffer,sizeof(buffer));//讀取溫濕度值
      
      temp=(float)((buffer[0]《8)|buffer[1]);
      
      humi=(float)((buffer[2]《8)|buffer[3]);
      
      calc_sht10(&humi,&temp);//溫濕度數值轉換
      
      close(fd);//關閉文件
      
      return0;//退出
      
      }
      
      測試完成后,考察驅動程序運行效率,即在驅動程序的tasklet_schedule和copy_to_user前分別對PXA310的OSCR時間計數寄存器進行時間讀取,計算此次溫濕度測量所用時間。計算公式如下所示。
      
      Time=(OSCR2-OSCR1)/OSCR_FREQ
      
      OSCR2是喚醒線程后的時間,OSCR1是進入任務隊列前的時間。OSCR_FREQ是PXA310內部時鐘頻率3.25MHz.這樣就可以計算出每次溫濕度讀取消耗的時間,以此對比SHT10開發文檔中理論測量時間值,確定實際驅動程序運行的效率。
      
      5、實驗結果與分析
      
      超級終端中插入驅動模塊,運行測試程序,可以在終端上看到測試結果(如圖4)。
      
      圖4超級終端測試結果
      
      系統功能實現后,利用上述Time計算公式計算驅動程序中溫濕度測量消耗的時間,實際測試結果如表3所示。
      
      表3驅動程序中實際測量消耗的時間
      
      上表的測試結果不僅和傳感器的響應速度有關,而且還與系統中其他運行的線程有關。當系統中有高一級任務到來或其他實時事件需要處理時,實際測量時間會大于上表中的測量時間,并且隨著任務的增加測量時間也會相應的增加,完成的時間也受到外界中斷的影響。內核會在任務不繁忙時完成測量操作。上表測試結果并未受到系統中其他驅動程序和中斷的影響。對比開發手冊中理論測量時間可以看到,使用任務隊列的方法對改善系統處理能力與實時性效果明顯。
      
      此外,實現溫濕度傳感器驅動程序還需要清楚了解SHT10讀寫時序,讀取溫度和濕度所需要的時間不同。如果應用程序中得出的溫濕度值超過預期值,就可以打開GPIO驅動模塊,觸發系統板上的蜂鳴器達到預警效果。
      
      6、結語
      
      此設計方案已經應用于嵌入式無聲交互控制系統的檢測,并且運行正常。實踐證明,該嵌入式Linux溫濕度傳感器設計方案可行有效,線程阻塞提高系統運行效率,在環境測量準確度和系統實時性方面得到了令人滿意的效果。由于此方案基于Linux操作系統和PXA310平臺,其在多任務、實時快速處理上具有一定的優勢。

    免責聲明

    • 凡本網注明“來源:儀表網”的所有作品,均為浙江興旺寶明通網絡有限公司-儀表網合法擁有版權或有權使用的作品,未經本網授權不得轉載、摘編或利用其它方式使用上述作品。已經本網授權使用作品的,應在授權范圍內使用,并注明“來源:儀表網”。違反上述聲明者,本網將追究其相關法律責任。
    • 本網轉載并注明自其它來源(非儀表網)的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或和對其真實性負責,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品第一來源,并自負版權等法律責任。
    • 如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系,否則視為放棄相關權利。
    聯系我們

    客服熱線: 15267989561

    加盟熱線: 15267989561

    媒體合作: 0571-87759945

    投訴熱線: 0571-87759942

    關注我們
    • 下載儀表站APP

    • Ybzhan手機版

    • Ybzhan公眾號

    • Ybzhan小程序

    企業未開通此功能
    詳詢客服 : 0571-87759942
    主站蜘蛛池模板: 国产成人av一区二区三区在线| 女性成人毛片a级| 3d动漫精品成人一区二区三| 亚洲av成人一区二区三区在线观看| 国产成人av一区二区三区在线观看 | 性欧美成人免费观看视| 国产成人精品久久综合| 亚洲欧美日韩成人| 在线成人播放毛片| 97久久精品国产成人影院| 国产成人综合在线视频| 色偷偷成人网免费视频男人的天堂| 国产成人综合亚洲| 日本成人在线播放| 中文国产成人精品久久app| 国产精品成人网| 成人啪精品视频免费网站| 麻豆亚洲AV成人无码久久精品| 国产成人刺激视频在线观看| 成人免费看吃奶视频网站| 成人黄色小说网站| 亚洲成人免费网站| 国产成人影院在线观看| 成人无码WWW免费视频| 国产成人午夜精华液| 久久亚洲国产精品成人AV秋霞 | www.国产成人| 亚洲AV成人无码天堂| 国产成人综合亚洲欧美在| 成人国产在线观看高清不卡| 色欲欲WWW成人网站| 免费国产成人手机在线观看| 国产成人h片视频在线观看| 国产成人精品免费视频动漫| 国产成人麻豆亚洲综合无码精品| 成人深夜福利视频| 成人a视频高清在线观看| 成人h动漫精品一区二区无码| 国产成人精品综合在线观看| 国产成人在线观看免费网站| 四虎成人精品一区二区免费网站|