新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于PXA310平臺的溫濕度傳感器設計

        基于PXA310平臺的溫濕度傳感器設計

        作者: 時間:2016-12-01 來源:網絡 收藏

          4.1 溫濕度傳感器測試環境
          在實驗室常溫下,測試程序多次調用驅動程序中讀溫濕度的函數接口獲得測試數據,來驗證設計的正確和可靠。并考慮實驗室內常溫下,相對濕度與溫度具有非線性關系,計算濕度值時需要考慮溫度的補償關系,其關系如圖3 所示。

        本文引用地址:http://www.104case.com/article/201612/324471.htm

        ▲圖3 SORH 轉換到相對濕度

          為補償濕度傳感器的非線性以獲取準確數據,并考慮實際溫度與測試參考溫度(25℃)不同,使用如下公式修正讀數。

          RHlinear 是溫度修正系數,RHtrue 是相對濕度,SORH是傳感器返回的濕度值。進行12bit 濕度檢測時,參數取值如下表所示。

        ▲表1 濕度轉換系數與溫度補償系數

          由于能隙材料研發的溫度傳感器具有極好線性,14bit 溫度值參考如下公式。
          Temperature = d1+d2 x SOT
          溫度轉換系數取值如下表所示,SOT 是傳感器返回的溫度值。

        ▲表2 溫度轉換系數

          利用上述溫濕度轉換公式和系數可以得出溫濕度測量值。
          4.2 溫濕度傳感器測試途徑與效率驗證
          在測試程序中,考慮上述測量環境下溫濕度之間的非線性,調用驅動程序的sht10_read 函數將讀到的溫濕度數據返回上層測試程序進行浮點數運算,將計算值通過串口輸出,達到測試驗證的目的。測試程序的實現如下所示。
          static void calc_sht10(float *humi, float*temp)
          {
          float rh=*humi;
          float t=*temp;
          float rh_line;
          float rh_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("Humidity is: %.2f%RH",rh_true);
          printf("Temperature is: %.2fC",t);
          }
          int main(int argc, char *argv[]) //主函數
          {
          int fd;
          float temp,humi; //溫濕度數據
          char buffer[4]; //數據緩沖
          fd = open("/dev/sht10", 0); //打開文件
          if (fd < 0) { //打開失敗,退出
          perror("open device /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); //關閉文件
          return 0; //退出
          }
          測試完成后,考察驅動程序運行效率,即在驅動程序的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 平臺,其在多任務、實時快速處理上具有一定的優勢。

        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 衡阳市| 东丰县| 蒙阴县| 新龙县| 辽中县| 台中县| 密山市| 黔西县| 南汇区| 洛川县| 盐山县| 彰武县| 桂林市| 宜昌市| 上虞市| 蓬安县| 凤凰县| 宿迁市| 金湖县| 怀仁县| 卓尼县| 海口市| 泗洪县| 青田县| 二连浩特市| 汝阳县| 太康县| 赤城县| 仁怀市| 沭阳县| 新源县| 乾安县| 礼泉县| 报价| 项城市| 盐亭县| 蛟河市| 虹口区| 南城县| 南江县| 思南县|