新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于PXA310平臺的溫濕度傳感器設(shè)計

基于PXA310平臺的溫濕度傳感器設(shè)計

作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏

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

本文引用地址:http://2s4d.com/article/201612/324471.htm

▲圖3 SORH 轉(zhuǎn)換到相對濕度

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

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

▲表1 濕度轉(zhuǎn)換系數(shù)與溫度補償系數(shù)

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

▲表2 溫度轉(zhuǎn)換系數(shù)

  利用上述溫濕度轉(zhuǎn)換公式和系數(shù)可以得出溫濕度測量值。
  4.2 溫濕度傳感器測試途徑與效率驗證
  在測試程序中,考慮上述測量環(huán)境下溫濕度之間的非線性,調(diào)用驅(qū)動程序的sht10_read 函數(shù)將讀到的溫濕度數(shù)據(jù)返回上層測試程序進行浮點數(shù)運算,將計算值通過串口輸出,達到測試驗證的目的。測試程序的實現(xiàn)如下所示。
  static void calc_sht10(float *humi, float*temp)
  {
  float rh=*humi;
  float t=*temp;
  float rh_line;
  float rh_true;
  t=t*d2+d1; //溫度轉(zhuǎn)換公式
  rh_line=C3*rh*rh+C2*rh+C1; //相對濕度轉(zhuǎn)換公式
  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[]) //主函數(shù)
  {
  int fd;
  float temp,humi; //溫濕度數(shù)據(jù)
  char buffer[4]; //數(shù)據(jù)緩沖
  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); //溫濕度數(shù)值轉(zhuǎn)換
  close(fd); //關(guān)閉文件
  return 0; //退出
  }
  測試完成后,考察驅(qū)動程序運行效率,即在驅(qū)動程序的tasklet_schedule 和copy_to_user 前分別對PXA310 的OSCR 時間計數(shù)寄存器進行時間讀取,計算此次溫濕度測量所用時間。計算公式如下所示。
  Time=(OSCR2-OSCR1)/OSCR_FREQ
  OSCR2 是喚醒線程后的時間,OSCR1 是進入任務(wù)隊列前的時間。OSCR_FREQ 是PXA310 內(nèi)部時鐘頻率3.25MHz.這樣就可以計算出每次溫濕度讀取消耗的時間,以此對比SHT10 開發(fā)文檔中理論測量時間值,確定實際驅(qū)動程序運行的效率。
  5 實驗結(jié)果與分析
  超級終端中插入驅(qū)動模塊,運行測試程序,可以在終端上看到測試結(jié)果(如圖4)。

▲圖4 超級終端測試結(jié)果

  系統(tǒng)功能實現(xiàn)后,利用上述Time 計算公式計算驅(qū)動程序中溫濕度測量消耗的時間,實際測試結(jié)果如表3 所示。

▲表3 驅(qū)動程序中實際測量消耗的時間

  上表的測試結(jié)果不僅和傳感器的響應(yīng)速度有關(guān),而且還與系統(tǒng)中其他運行的線程有關(guān)。當系統(tǒng)中有高一級任務(wù)到來或其他實時事件需要處理時,實際測量時間會大于上表中的測量時間,并且隨著任務(wù)的增加測量時間也會相應(yīng)的增加,完成的時間也受到外界中斷的影響。內(nèi)核會在任務(wù)不繁忙時完成測量操作。上表測試結(jié)果并未受到系統(tǒng)中其他驅(qū)動程序和中斷的影響。對比開發(fā)手冊中理論測量時間可以看到,使用任務(wù)隊列的方法對改善系統(tǒng)處理能力與實時性效果明顯。
  此外,實現(xiàn)溫濕度傳感器驅(qū)動程序還需要清楚了解SHT10 讀寫時序,讀取溫度和濕度所需要的時間不同。如果應(yīng)用程序中得出的溫濕度值超過預(yù)期值,就可以打開GPIO 驅(qū)動模塊,觸發(fā)系統(tǒng)板上的蜂鳴器達到預(yù)警效果。
  6 結(jié)語
  此設(shè)計方案已經(jīng)應(yīng)用于嵌入式無聲交互控制系統(tǒng)的檢測,并且運行正常。實踐證明,該嵌入式Linux溫濕度傳感器設(shè)計方案可行有效,線程阻塞提高系統(tǒng)運行效率,在環(huán)境測量準確度和系統(tǒng)實時性方面得到了令人滿意的效果。由于此方案基于Linux 操作系統(tǒng)和PXA310 平臺,其在多任務(wù)、實時快速處理上具有一定的優(yōu)勢。

上一頁 1 2 3 下一頁

評論


技術(shù)專區(qū)

關(guān)閉