




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、江西理工大學(xué)應(yīng)用科學(xué)學(xué)院嵌入式系統(tǒng)開發(fā)技術(shù)課程設(shè)計(jì)專 業(yè): 電子信息工程 班 級(jí): 電信121 學(xué) 號(hào): 姓 名: 賀佳 設(shè)計(jì)題目:Linux溫度傳感器驅(qū)動(dòng)程序 2015年11月24日姓 名賀佳班 級(jí)電信121學(xué) 號(hào)課設(shè)題目基于嵌入式Linux溫濕度傳感器驅(qū)動(dòng)程序指導(dǎo)教師王蘇敏評(píng)分項(xiàng)目滿分分值得分設(shè)計(jì)文檔(30分)文檔格式封面2頁面布局4目錄格式3圖表質(zhì)量2頁眉頁腳2文檔內(nèi)容內(nèi)容完整性6內(nèi)容邏輯性5內(nèi)容正確性6程序代碼(30分)程序功能15編程規(guī)范7編程文檔8答辯(20分)課題陳述7問題答辯10是否超時(shí)3考勤(20分)20總評(píng)成績指導(dǎo)教師評(píng)語簽名: 年 月 日教研室意見簽名: 年 月 日基于嵌
2、入式Linux溫濕度傳感器驅(qū)動(dòng)程序2.需求分析在工業(yè)控制和工業(yè)生產(chǎn)領(lǐng)域中, 傳感器對(duì)于工業(yè)控制和生產(chǎn)環(huán)境的監(jiān)控作用不言而喻。傳統(tǒng)的傳感器監(jiān)控系統(tǒng)大都采用單片機(jī)控制, 其監(jiān)控的準(zhǔn)確度和實(shí)時(shí)性不太令人滿意。本文尋找到一套切實(shí)可行的傳感器設(shè)計(jì)方案,其利用溫濕度傳感器芯片,基于PXA310硬件平臺(tái)和操作系統(tǒng),能有效監(jiān)控現(xiàn)場溫濕度Linux變化。在周圍環(huán)境發(fā)生變化, 不能滿足工作要求時(shí),可以獲取監(jiān)控?cái)?shù)據(jù)并提出預(yù)警, 提高生產(chǎn)和工作環(huán)境檢測的可靠性及實(shí)時(shí)性。溫度設(shè)計(jì)傳感器電路設(shè)計(jì)比較了一些傳感器應(yīng)用設(shè)計(jì)方案后 ,選用SHTl O 芯片為嵌入式溫濕度傳感器的 核心部件。它外圍電路簡 便,相比其他傳感器芯片(
3、DSl 8820)有其獨(dú)到優(yōu)勢1。 STHlO 每秒可進(jìn)行 3 次溫濕度測量 ,數(shù)據(jù)精度 14 bit 并且工作穩(wěn)定。其測量采用 CMOSens 專利2 ,所以在 測量效率和精度上要好于 。 采用 單單、線控制方案( l-wire) ,大約每秒測量一次,9 位數(shù) 字式溫度數(shù)據(jù);只提供溫度測量需求概述SHTlO 是一款高度集成的溫濕度傳感器芯片 ,提供全量程標(biāo)定數(shù)字輸出 。傳感器包括一個(gè)電窯 性聚合 體濕度敏感元件和一個(gè)用能隙材料制成的溫度 敏感元 件,他們與 個(gè) 14 位 AI D 轉(zhuǎn)換器以及一個(gè)串行接 口電路設(shè)計(jì)在同一個(gè)芯片上面。其通過標(biāo)定得到校 準(zhǔn) 系數(shù)以程序形式儲(chǔ)存在芯片 OTP 內(nèi)存中
4、,并利用兩 線制串行接口與 內(nèi)部電壓調(diào)整 ,使外國系統(tǒng)集成變得 快速而簡單。其在生產(chǎn)環(huán)境檢測要 求嚴(yán)格時(shí),就顯得精度和功能有些不足.SHTl O 芯片 電源 3.3V 。傳感器上 電后,等待 門ms 來完成 “休眠” 狀態(tài)。通信復(fù)位和啟動(dòng)傳輸命 令后,發(fā)送 組測量命令( 表示相對(duì)濕 度 RH, 門 表示溫度 T) ,控制器要等待測 量結(jié)束。這個(gè)過程需要大約 ll/5 5 / 210ms ,分別對(duì) 應(yīng) 8/12 /14bit 測量。SHTlO 通過下拉 DATA 至低 電平,表示測量結(jié)束??刂破饔|發(fā) SCK 時(shí)鐘前,必須等待這個(gè) “數(shù)據(jù)備妥” 信號(hào)才能將測量數(shù)據(jù)正確讀 入。 測量和通訊結(jié)束后 ,
5、SHTlO 自動(dòng)轉(zhuǎn)入休眠模式。數(shù)據(jù) 傳送采用兩線制串行接 口(與 12( 接口不兼容)。3.總體設(shè)計(jì)SHTl O 采用 LCC 封裝,其DATA 和 SCK 號(hào) 腳分別連接到 PXA310 的 GP1078 和 GP.氣 79。PXA3 lO通過模擬時(shí)序方式實(shí)現(xiàn)對(duì)外 國溫濕度傳感器的控制和 數(shù)據(jù)讀寫操作。由于 SHTl O 對(duì)于溫濕度靈敏度很高 ,在系統(tǒng)集成時(shí)應(yīng)盡量遠(yuǎn)離發(fā)熱源(如 MCU、LCD 等), 否則測量結(jié)果會(huì)有所偏離 ;為 SHTlO 布線時(shí),周圍應(yīng) 盡量鋪地減少周圍器件對(duì)其 的干擾。SHTlO 電路原理 圖如圖 1 所示。d三KSOP.豆雨雨4”tJV、iF G圖 1 SHTl O
6、 電路原理圖Linux溫濕度傳感器驅(qū)動(dòng)程序 實(shí)現(xiàn)單片機(jī)控制的傳感器設(shè)備中 ,單片機(jī)通常是單線 程運(yùn)行。在進(jìn)行溫濕度測量時(shí) ,單片機(jī)需要等待測試 結(jié)果返回,其方法阻礙了其他測試和操作的罔步執(zhí)行。 在嵌入式 LimX 系統(tǒng)中,驅(qū)動(dòng)程序?qū)y試任務(wù)送入任 務(wù)隊(duì)列,交出CPU 控制權(quán),繼而進(jìn)行其他實(shí)時(shí)任務(wù)運(yùn) 行,待內(nèi)核空閑再進(jìn)任務(wù)隊(duì)列完成傳感器的測量 , 以此提高系統(tǒng)執(zhí)行的效率和實(shí)時(shí)性。Linux 溫濕度傳感器設(shè)備加載 溫濕度傳感器使用Linux 內(nèi)核的 Miscdevice 數(shù)據(jù)結(jié)構(gòu)在驅(qū)動(dòng)程序初始化時(shí)將設(shè)備注冊(cè)到內(nèi)核 。 Miscdevice 是字符設(shè)備 ,其主設(shè)備號(hào)為 10,設(shè)備及 設(shè)備接口函數(shù)定義
7、如下所示。static struct file_operations shtl O_fops = owner:THIS_MODULE,/ 所 屬 的 設(shè) 備 模塊read: shtl O_ read, /數(shù)據(jù)讀取操作static struct miscdevice my_shtl O =.minor=4, /設(shè)備號(hào)為4 .name=SHTl O /設(shè)備名稱為SHTl O.fops=&shtl O_fops, /設(shè)備可用相關(guān)操作驅(qū)動(dòng)程序加載設(shè)備時(shí)將調(diào)用 內(nèi)核的注冊(cè)函數(shù)。在Linux2.4 和 2.6 內(nèi)核申,幾乎所有 Linux 驅(qū)動(dòng)程序都依靠如下函數(shù)加載模塊.static int init s
8、htl O_init(void)misc_register(&my_shtl O); /注冊(cè)設(shè)備SHTl Oreturn O; /返回成功操作0驅(qū)動(dòng)程序初始化完成后 ,上層應(yīng)用程序可以調(diào)用 shtl O_fops 中的 shtl O_read 函數(shù)進(jìn)行溫濕度的讀 取操作。Linux 溫濕度傳感器設(shè)備操作進(jìn)行數(shù)據(jù)讀取前,首先要在驅(qū)動(dòng)程序 甲開辟 4 個(gè) 字節(jié)的數(shù)據(jù)空間,用于存放溫度和濕度測量值 。這里 定義全局變量數(shù)據(jù)緩沖區(qū)為 unsigned char bu例。讀取 SHTl O 溫濕度數(shù)據(jù)前 ,需要進(jìn)行端 口初始化 和 SHTlO 復(fù)位操作,然后將任務(wù)送于任務(wù)隊(duì)列 并阻塞 線程SJ ,當(dāng)任務(wù)
9、完成返回后再喚醒線 程,將讀到數(shù)據(jù) 傳遞給上層應(yīng)用程序做進(jìn)一步處理 。程序流程圖和實(shí) 現(xiàn)函數(shù)如圖 2 所示。 進(jìn)入任務(wù)隊(duì)列完成傳 感器測量,喚醒線程 內(nèi)核空間數(shù)據(jù)送往用戶空間處理 圖 2驅(qū)動(dòng)程序流程圖static int measure_ shtl O(u8 checksum,u8 mode)unsigned char error=O; 設(shè)備無應(yīng)答 ,標(biāo)識(shí)清 Oint i=O; 用來指示數(shù)據(jù)存放位置start_trans(); 模擬時(shí)序,啟動(dòng)傳輸switch(mode) 選擇 測 量 方式case TEMP:error+ =write_ byte(MEASURE_ TEMP);i= l;bre
10、ak; 測量溫度 ,指示存放位置caseHUMl:error+=wite_byte(MEASURE_ HUMI);break; 測量濕度while() 等待 SHTlO 應(yīng)答 ,退出if(read_data0=0) break;if(i) 查看 i,存放數(shù)據(jù)bufO=read_byte(ACK); 將測量溫度數(shù)據(jù) 存放于bufl =read_byte(ACK); / /bufO和 buf1,并應(yīng)答elsebuf2=read_byte(ACK); 將測量濕度數(shù)據(jù) 存放于buf3=read_byte(ACK); / / buf2矛日 buf3并應(yīng)答 最后讀效驗(yàn) ,無應(yīng)答checksum= read
11、_byte(noACK);return error; 返回錯(cuò)誤標(biāo)識(shí)上 述函數(shù)中 start_trans; write_byte; read_data;read_byte 分別利用 PXA310 sl腳模擬時(shí)序 完成啟動(dòng)傳輸、寫字節(jié),讀一位數(shù)據(jù)和讀字節(jié)的操作。staticssize_tsht lO_read(structfile吁ile,char *buffer,size_t count,loff_t *ppos)porUnit(); 初始化 PXA310 端口reset_sht100; 復(fù)位 SHTl Otasklet_schedule(&shtl O_tasklet); 將任務(wù)送于任務(wù)隊(duì)列w
12、ait_for_completion(&comp); 阻塞線程 ,等待完成copy_to_user(buffer, (char *)&buf,sizeof(buf); 將讀到的數(shù)據(jù)返 回用戶return O; 空間,退出內(nèi) 核 tasklet_sched ule() 調(diào) 度 執(zhí) 行 指 定 的tasklet ,在獲得運(yùn)行機(jī)會(huì)之前 只會(huì)調(diào)度一次 ,如果在 運(yùn) 行 時(shí)被 調(diào) 度 ,則 完 成 后 會(huì) 被 再 次 運(yùn) 行 6) 0 wait_for_completion ()這個(gè)函數(shù)進(jìn)行個(gè)不可打斷 的等待,如果有代碼調(diào)用它 ,并且沒有完成這個(gè)任務(wù) , 結(jié)果會(huì)是一個(gè)不可殺死的進(jìn)程 。copy_to_u
13、ser ()將內(nèi) 核空間數(shù)據(jù)傳向上層用戶空間 ,并讓上層測試程序做 進(jìn)一步處理。 Linux 溫濕度傳感器設(shè)備阻塞操作 由于溫濕度傳感器測量需要一 定時(shí)間 ,為提高系統(tǒng)運(yùn)行效率和實(shí)時(shí)性 ,在驅(qū)動(dòng)程序中阻塞線程 ,交出 內(nèi)核控制權(quán) ,等待操作完成后喚醒線程 ,提高系統(tǒng)利 用率。complete()在函數(shù)申就是喚醒一個(gè)等待 的讀取 線程。任務(wù)隊(duì)列實(shí)現(xiàn)函數(shù)如下所示 。static int shtl O_dotasklet(void)unsigned int eror=O; 無應(yīng)答 ,標(biāo)識(shí)清 O unsigned char checksum=O; 效驗(yàn)清 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; 返回錯(cuò)誤標(biāo)識(shí)Tasklet 可以使測量操作在系統(tǒng)負(fù)荷不重時(shí)被調(diào)用,或是被立即執(zhí)行,但始終不會(huì)晚于下一個(gè) CPU clock。 Tasklet 始終在中斷期間運(yùn)行 ,并且在調(diào)度他的同 CPU 上運(yùn)行。對(duì)比單
15、片機(jī)系統(tǒng),在單線程情況下,一般在 shtl O_read()中調(diào)用 2 次 measure_shtl 0()來等 待測量完成 ,測量效率依賴 2 次測量消耗的時(shí)間;但在Linux 驅(qū)動(dòng)程序中,使用 Tasklet 方式操作,2 次測量過程不會(huì)對(duì)其他線程產(chǎn)生影響,在有其他實(shí)時(shí)事件需要 及時(shí)處理時(shí)(如網(wǎng)絡(luò),視頻),可以更有效提高驅(qū)動(dòng)運(yùn)行效率,降低對(duì)其他實(shí)時(shí)處理產(chǎn)生的影響。溫濕度傳感器測試途徑與效率驗(yàn)證 在測試程序中 ,考慮上述測量環(huán)境下溫濕度之間的非線性,調(diào)用驅(qū)動(dòng)程序 的 shtl O_read 函數(shù)將讀到 的溫濕度數(shù)據(jù)返回上層測試程序進(jìn)行浮點(diǎn)數(shù)運(yùn)算 ,將 計(jì)算值通過串 口輸出,達(dá)到測試驗(yàn)證的 目
16、的。測試程 序的實(shí)現(xiàn)如下所示 。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 ; /溫度轉(zhuǎn)換公式rh _li ne=C3*rh*rh +C2*rh +Cl ; /相對(duì)濕度轉(zhuǎn) 換公式rh_t rue =(t甲2 5)*(t l +t2*rh)+ rh_l ine /相對(duì)濕度溫度補(bǔ)償 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) /主函數(shù)i nt fd;float tem p, h u mi; /溫濕度數(shù)據(jù)char buffer4; /數(shù)據(jù)緩沖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; 返回錯(cuò)誤標(biāo)識(shí)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 ; /溫度轉(zhuǎn)換公式rh _li ne=C3*rh*rh +C2*rh +Cl ; /相對(duì)濕度轉(zhuǎn) 換公式rh_t rue =(t甲2 5)*(t l +t2*rh)+ rh_l ine /相對(duì)濕度溫度補(bǔ)償 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) /主函數(shù)i nt fd;float tem p, h u mi; /溫濕度數(shù)據(jù)ch
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC 62148-11:2024 EN-FR Fibre optic active components and devices - Package and interface standards - Part 11: 14-pin modulator integrated laser diode modules and pump laser
- 【正版授權(quán)】 ISO 18935:2025 EN Imaging materials - Colour images - Determination of water resistance of printed colour images
- 2025年建筑安全員知識(shí)題庫及答案
- 2025-2030年中國采血器市場發(fā)展?fàn)顩r及前景趨勢分析報(bào)告
- 2025-2030年中國薯片市場運(yùn)行態(tài)勢與投資戰(zhàn)略研究報(bào)告
- 2025-2030年中國營養(yǎng)碘鹽市場發(fā)展?fàn)顩r及營銷戰(zhàn)略研究報(bào)告
- 2025-2030年中國自動(dòng)光學(xué)檢測儀(AOI)市場運(yùn)營狀況及前景趨勢分析報(bào)告
- 2025-2030年中國絕熱隔音材料產(chǎn)業(yè)運(yùn)行狀況與投資策略研究報(bào)告
- 2025-2030年中國電解金屬錳行業(yè)前景展望規(guī)劃研究報(bào)告
- 2025-2030年中國電站設(shè)備行業(yè)運(yùn)行態(tài)勢及發(fā)展趨勢分析報(bào)告
- 《齊桓晉文之事》+課件+2023-2024學(xué)年統(tǒng)編版必修下冊(cè)+
- 《創(chuàng)傷失血性休克中國急診專家共識(shí)(2023)》解讀課件
- 八年級(jí)美術(shù)下冊(cè)第1課文明之光省公開課一等獎(jiǎng)新名師課獲獎(jiǎng)?wù)n件
- 2024年全國體育單招英語考卷和答案
- 食品安全管理制度可打印【7】
- 河北省邯鄲市磁縣2024屆中考數(shù)學(xué)模試卷含解析
- 2024年四川省南充市中考物理試卷真題(含官方答案)
- 2024年學(xué)位法學(xué)習(xí)解讀課件
- 2024年江蘇農(nóng)牧科技職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫帶答案
- 【基于PLC的停車場車位控制系統(tǒng)設(shè)計(jì)11000字(論文)】
- GB/T 43947-2024低速線控底盤通用技術(shù)要求
評(píng)論
0/150
提交評(píng)論