linux課程設計溫度傳感器_第1頁
linux課程設計溫度傳感器_第2頁
linux課程設計溫度傳感器_第3頁
linux課程設計溫度傳感器_第4頁
linux課程設計溫度傳感器_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、江西理工大學應用科學學院嵌入式系統開發(fā)技術課程設計專 業(yè): 電子信息工程 班 級: 電信121 學 號: 姓 名: 賀佳 設計題目:Linux溫度傳感器驅動程序 2015年11月24日姓 名賀佳班 級電信121學 號課設題目基于嵌入式Linux溫濕度傳感器驅動程序指導教師王蘇敏評分項目滿分分值得分設計文檔(30分)文檔格式封面2頁面布局4目錄格式3圖表質量2頁眉頁腳2文檔內容內容完整性6內容邏輯性5內容正確性6程序代碼(30分)程序功能15編程規(guī)范7編程文檔8答辯(20分)課題陳述7問題答辯10是否超時3考勤(20分)20總評成績指導教師評語簽名: 年 月 日教研室意見簽名: 年 月 日基于嵌

2、入式Linux溫濕度傳感器驅動程序2.需求分析在工業(yè)控制和工業(yè)生產領域中, 傳感器對于工業(yè)控制和生產環(huán)境的監(jiān)控作用不言而喻。傳統的傳感器監(jiān)控系統大都采用單片機控制, 其監(jiān)控的準確度和實時性不太令人滿意。本文尋找到一套切實可行的傳感器設計方案,其利用溫濕度傳感器芯片,基于PXA310硬件平臺和操作系統,能有效監(jiān)控現場溫濕度Linux變化。在周圍環(huán)境發(fā)生變化, 不能滿足工作要求時,可以獲取監(jiān)控數據并提出預警, 提高生產和工作環(huán)境檢測的可靠性及實時性。溫度設計傳感器電路設計比較了一些傳感器應用設計方案后 ,選用SHTl O 芯片為嵌入式溫濕度傳感器的 核心部件。它外圍電路簡 便,相比其他傳感器芯片(

3、DSl 8820)有其獨到優(yōu)勢1。 STHlO 每秒可進行 3 次溫濕度測量 ,數據精度 14 bit 并且工作穩(wěn)定。其測量采用 CMOSens 專利2 ,所以在 測量效率和精度上要好于 。 采用 單單、線控制方案( l-wire) ,大約每秒測量一次,9 位數 字式溫度數據;只提供溫度測量需求概述SHTlO 是一款高度集成的溫濕度傳感器芯片 ,提供全量程標定數字輸出 。傳感器包括一個電窯 性聚合 體濕度敏感元件和一個用能隙材料制成的溫度 敏感元 件,他們與 個 14 位 AI D 轉換器以及一個串行接 口電路設計在同一個芯片上面。其通過標定得到校 準 系數以程序形式儲存在芯片 OTP 內存中

4、,并利用兩 線制串行接口與 內部電壓調整 ,使外國系統集成變得 快速而簡單。其在生產環(huán)境檢測要 求嚴格時,就顯得精度和功能有些不足.SHTl O 芯片 電源 3.3V 。傳感器上 電后,等待 門ms 來完成 “休眠” 狀態(tài)。通信復位和啟動傳輸命 令后,發(fā)送 組測量命令( 表示相對濕 度 RH, 門 表示溫度 T) ,控制器要等待測 量結束。這個過程需要大約 ll/5 5 / 210ms ,分別對 應 8/12 /14bit 測量。SHTlO 通過下拉 DATA 至低 電平,表示測量結束。控制器觸發(fā) SCK 時鐘前,必須等待這個 “數據備妥” 信號才能將測量數據正確讀 入。 測量和通訊結束后 ,

5、SHTlO 自動轉入休眠模式。數據 傳送采用兩線制串行接 口(與 12( 接口不兼容)。3.總體設計SHTl O 采用 LCC 封裝,其DATA 和 SCK 號 腳分別連接到 PXA310 的 GP1078 和 GP.氣 79。PXA3 lO通過模擬時序方式實現對外 國溫濕度傳感器的控制和 數據讀寫操作。由于 SHTl O 對于溫濕度靈敏度很高 ,在系統集成時應盡量遠離發(fā)熱源(如 MCU、LCD 等), 否則測量結果會有所偏離 ;為 SHTlO 布線時,周圍應 盡量鋪地減少周圍器件對其 的干擾。SHTlO 電路原理 圖如圖 1 所示。d三KSOP.豆雨雨4”tJV、iF G圖 1 SHTl O

6、 電路原理圖Linux溫濕度傳感器驅動程序 實現單片機控制的傳感器設備中 ,單片機通常是單線 程運行。在進行溫濕度測量時 ,單片機需要等待測試 結果返回,其方法阻礙了其他測試和操作的罔步執(zhí)行。 在嵌入式 LimX 系統中,驅動程序將測試任務送入任 務隊列,交出CPU 控制權,繼而進行其他實時任務運 行,待內核空閑再進任務隊列完成傳感器的測量 , 以此提高系統執(zhí)行的效率和實時性。Linux 溫濕度傳感器設備加載 溫濕度傳感器使用Linux 內核的 Miscdevice 數據結構在驅動程序初始化時將設備注冊到內核 。 Miscdevice 是字符設備 ,其主設備號為 10,設備及 設備接口函數定義

7、如下所示。static struct file_operations shtl O_fops = owner:THIS_MODULE,/ 所 屬 的 設 備 模塊read: shtl O_ read, /數據讀取操作static struct miscdevice my_shtl O =.minor=4, /設備號為4 .name=SHTl O /設備名稱為SHTl O.fops=&shtl O_fops, /設備可用相關操作驅動程序加載設備時將調用 內核的注冊函數。在Linux2.4 和 2.6 內核申,幾乎所有 Linux 驅動程序都依靠如下函數加載模塊.static int init s

8、htl O_init(void)misc_register(&my_shtl O); /注冊設備SHTl Oreturn O; /返回成功操作0驅動程序初始化完成后 ,上層應用程序可以調用 shtl O_fops 中的 shtl O_read 函數進行溫濕度的讀 取操作。Linux 溫濕度傳感器設備操作進行數據讀取前,首先要在驅動程序 甲開辟 4 個 字節(jié)的數據空間,用于存放溫度和濕度測量值 。這里 定義全局變量數據緩沖區(qū)為 unsigned char bu例。讀取 SHTl O 溫濕度數據前 ,需要進行端 口初始化 和 SHTlO 復位操作,然后將任務送于任務隊列 并阻塞 線程SJ ,當任務

9、完成返回后再喚醒線 程,將讀到數據 傳遞給上層應用程序做進一步處理 。程序流程圖和實 現函數如圖 2 所示。 進入任務隊列完成傳 感器測量,喚醒線程 內核空間數據送往用戶空間處理 圖 2驅動程序流程圖static int measure_ shtl O(u8 checksum,u8 mode)unsigned char error=O; 設備無應答 ,標識清 Oint i=O; 用來指示數據存放位置start_trans(); 模擬時序,啟動傳輸switch(mode) 選擇 測 量 方式case TEMP:error+ =write_ byte(MEASURE_ TEMP);i= l;bre

10、ak; 測量溫度 ,指示存放位置caseHUMl:error+=wite_byte(MEASURE_ HUMI);break; 測量濕度while() 等待 SHTlO 應答 ,退出if(read_data0=0) break;if(i) 查看 i,存放數據bufO=read_byte(ACK); 將測量溫度數據 存放于bufl =read_byte(ACK); / /bufO和 buf1,并應答elsebuf2=read_byte(ACK); 將測量濕度數據 存放于buf3=read_byte(ACK); / / buf2矛日 buf3并應答 最后讀效驗 ,無應答checksum= read

11、_byte(noACK);return error; 返回錯誤標識上 述函數中 start_trans; write_byte; read_data;read_byte 分別利用 PXA310 sl腳模擬時序 完成啟動傳輸、寫字節(jié),讀一位數據和讀字節(jié)的操作。staticssize_tsht lO_read(structfile吁ile,char *buffer,size_t count,loff_t *ppos)porUnit(); 初始化 PXA310 端口reset_sht100; 復位 SHTl Otasklet_schedule(&shtl O_tasklet); 將任務送于任務隊列w

12、ait_for_completion(&comp); 阻塞線程 ,等待完成copy_to_user(buffer, (char *)&buf,sizeof(buf); 將讀到的數據返 回用戶return O; 空間,退出內 核 tasklet_sched ule() 調 度 執(zhí) 行 指 定 的tasklet ,在獲得運行機會之前 只會調度一次 ,如果在 運 行 時被 調 度 ,則 完 成 后 會 被 再 次 運 行 6) 0 wait_for_completion ()這個函數進行個不可打斷 的等待,如果有代碼調用它 ,并且沒有完成這個任務 , 結果會是一個不可殺死的進程 。copy_to_u

13、ser ()將內 核空間數據傳向上層用戶空間 ,并讓上層測試程序做 進一步處理。 Linux 溫濕度傳感器設備阻塞操作 由于溫濕度傳感器測量需要一 定時間 ,為提高系統運行效率和實時性 ,在驅動程序中阻塞線程 ,交出 內核控制權 ,等待操作完成后喚醒線程 ,提高系統利 用率。complete()在函數申就是喚醒一個等待 的讀取 線程。任務隊列實現函數如下所示 。static int shtl O_dotasklet(void)unsigned int eror=O; 無應答 ,標識清 O unsigned char checksum=O; 效驗清 O error+=measure_shtl O

14、(checksum,TEMP);error+=measure_shtl O(checksum, HUMI); complete(&comp); 完成測量,喚醒線程if(error! =0) 測量有誤 ,提示 printk(”wrong in 1easureerror=%dn”,error);elseprintk(”data correct!n”); 測量無誤輸出提示return error; 返回錯誤標識Tasklet 可以使測量操作在系統負荷不重時被調用,或是被立即執(zhí)行,但始終不會晚于下一個 CPU clock。 Tasklet 始終在中斷期間運行 ,并且在調度他的同 CPU 上運行。對比單

15、片機系統,在單線程情況下,一般在 shtl O_read()中調用 2 次 measure_shtl 0()來等 待測量完成 ,測量效率依賴 2 次測量消耗的時間;但在Linux 驅動程序中,使用 Tasklet 方式操作,2 次測量過程不會對其他線程產生影響,在有其他實時事件需要 及時處理時(如網絡,視頻),可以更有效提高驅動運行效率,降低對其他實時處理產生的影響。溫濕度傳感器測試途徑與效率驗證 在測試程序中 ,考慮上述測量環(huán)境下溫濕度之間的非線性,調用驅動程序 的 shtl O_read 函數將讀到 的溫濕度數據返回上層測試程序進行浮點數運算 ,將 計算值通過串 口輸出,達到測試驗證的 目

16、的。測試程 序的實現如下所示 。static void calc_sht l O(float*temp)float rh =*h u mi: float t=*tem p; float rh _l ine float rh_truet=t*d 2 +d l ; /溫度轉換公式rh _li ne=C3*rh*rh +C2*rh +Cl ; /相對濕度轉 換公式rh_t rue =(t甲2 5)*(t l +t2*rh)+ rh_l ine /相對濕度溫度補償 if(rh_true 1OO)rh_tru e= l 00; /超出范圍 if(rh_trueO. l )rh_true=0.1 ;pri

17、ntf (” Hu mid ityis: %.2 RH n,rh _true); pri ntf(”Tem peratu re is: %.2f C n”,t);i nt mai n(i nt argc, char *argv) /主函數i nt fd;float tem p, h u mi; /溫濕度數據char buffer4; /數據緩沖fd = open(” /dev/ sht l O, O);/打開文件if (fd 0) /打開失敗 ,退出perror(pen device / dev/ sht l O); exit( l );read(fd,buffer,sizeof(buffer

18、); /讀取 溫 濕 度值tem p=(float)(bufferO 8)1 bufferl ); h u mi =(float)(buffer2 %dn”,error);elseprintk(”data correct!n”); 測量無誤輸出提示return error; 返回錯誤標識static void calc_sht l O(float*temp)float rh =*h u mi: float t=*tem p; float rh _l ine float rh_truet=t*d 2 +d l ; /溫度轉換公式rh _li ne=C3*rh*rh +C2*rh +Cl ; /相對濕度轉 換公式rh_t rue =(t甲2 5)*(t l +t2*rh)+ rh_l ine /相對濕度溫度補償 if(rh_true 1OO)rh_tru e= l 00; /超出范圍 if(rh_trueO. l )rh_true=0.1 ;printf (” Hu mid ityis: %.2 RH n,rh _true); pri ntf(”Tem peratu re is: %.2f C n”,t);i nt mai n(i nt argc, char *argv) /主函數i nt fd;float tem p, h u mi; /溫濕度數據ch

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論