當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于PXA310平臺(tái)的溫濕度傳感器設(shè)計(jì)與實(shí)現(xiàn)方法

ce="Verdana">摘要:  在嵌入式應(yīng)用領(lǐng)域,需要測(cè)量周?chē)h(huán)境的質(zhì)量對(duì)生產(chǎn)和工作進(jìn)行監(jiān)控和預(yù)警。通過(guò)比較設(shè)計(jì)方案,提出在嵌入式Linux 下,基于PXA310 平臺(tái)溫濕度傳感器的設(shè)計(jì)與實(shí)現(xiàn)方法。在Linux 操作系統(tǒng)下通過(guò)對(duì)驅(qū)動(dòng)程序接口調(diào)用,完成溫濕度數(shù)據(jù)讀取和預(yù)警,并對(duì)Linux 驅(qū)動(dòng)程序編寫(xiě)進(jìn)行比較。實(shí)驗(yàn)表明,本方案硬件和軟件設(shè)計(jì)切實(shí)可行,提高了環(huán)境測(cè)量的準(zhǔn)確度和系統(tǒng)性能的實(shí)時(shí)性。

1 引言

在工業(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í)性不太令人滿(mǎn)意。本文尋找到一套切實(shí)可行的傳感器設(shè)計(jì)方案,其利用溫濕度傳感器芯片,基于PXA310硬件平臺(tái)和Linux 操作系統(tǒng),能有效監(jiān)控現(xiàn)場(chǎng)溫濕度變化。在周?chē)h(huán)境發(fā)生變化,不能滿(mǎn)足工作要求時(shí),可以獲取監(jiān)控?cái)?shù)據(jù)并提出預(yù)警,提高生產(chǎn)和工作環(huán)境檢測(cè)的可靠性及實(shí)時(shí)性。

2 溫濕度傳感器電路設(shè)計(jì)

比較了一些傳感器應(yīng)用設(shè)計(jì)方案后,選用SHT10芯片為嵌入式溫濕度傳感器的核心部件。它外圍電路簡(jiǎn)便,相比其他傳感器芯片(DS18B20)有其獨(dú)到優(yōu)勢(shì)。

STH10 每秒可進(jìn)行3 次溫濕度測(cè)量,數(shù)據(jù)精度14 bit并且工作穩(wěn)定。其測(cè)量采用CMOSens 專(zhuān)利,所以在測(cè)量效率和精度上要好于DS18B20.DS18B20 采用單總線控制方案(1-wire),大約每秒測(cè)量一次,9 位數(shù)字式溫度數(shù)據(jù);只提供溫度測(cè)量。其在生產(chǎn)環(huán)境檢測(cè)要求嚴(yán)格時(shí),就顯得精度和功能有些不足。

2.1 sht10 簡(jiǎn)介

SHT10 是一款高度集成的溫濕度傳感器芯片,提供全量程標(biāo)定數(shù)字輸出。傳感器包括一個(gè)電容性聚合體濕度敏感元件和一個(gè)用能隙材料制成的溫度敏感元件,他們與一個(gè)14 位A/D 轉(zhuǎn)換器以及一個(gè)串行接口電路設(shè)計(jì)在同一個(gè)芯片上面。其通過(guò)標(biāo)定得到校準(zhǔn)系數(shù)以程序形式儲(chǔ)存在芯片OTP 內(nèi)存中,并利用兩線制串行接口與內(nèi)部電壓調(diào)整,使外圍系統(tǒng)集成變得快速而簡(jiǎn)單。

2.2 SHT10 工作原理

SHT10 芯片電源3.3V .傳感器上電后,等待11ms 來(lái)完成"休眠"狀態(tài)。通信復(fù)位和啟動(dòng)傳輸命令后,發(fā)送一組測(cè)量命令(‘00000101‘表示相對(duì)濕度RH,‘00000011‘表示溫度T),控制器要等待測(cè)量結(jié)束。這個(gè)過(guò)程需要大約11/55/210ms ,分別對(duì)應(yīng)8/12/14bit 測(cè)量。SHT10 通過(guò)下拉DATA 至低電平,表示測(cè)量結(jié)束??刂破饔|發(fā)SCK 時(shí)鐘前,必須等待這個(gè)"數(shù)據(jù)備妥"信號(hào)才能將測(cè)量數(shù)據(jù)正確讀入。

測(cè)量和通訊結(jié)束后,SHT10 自動(dòng)轉(zhuǎn)入休眠模式。數(shù)據(jù)傳送采用兩線制串行接口(與I2C 接口不兼容)。

2.3 SHT10 電路原理圖

SHT10 采用LCC 封裝,其DATA 和SCK 引腳分別連接到PXA310 的GPIO78 和GPIO79.PXA310通過(guò)模擬時(shí)序方式實(shí)現(xiàn)對(duì)外圍溫濕度傳感器的控制和數(shù)據(jù)讀寫(xiě)操作。由于SHT10 對(duì)于溫濕度靈敏度很高,在系統(tǒng)集成時(shí)應(yīng)盡量遠(yuǎn)離發(fā)熱源(如MCU、LCD 等),否則測(cè)量結(jié)果會(huì)有所偏離;為SHT10 布線時(shí),周?chē)鷳?yīng)盡量鋪地減少周?chē)骷?duì)其的干擾。SHT10 電路原理圖如圖1 所示。

 

 

圖1 SHT10 電路原理圖


3 Linux溫濕度傳感器驅(qū)動(dòng)程序?qū)崿F(xiàn)

單片機(jī)控制的傳感器設(shè)備中,單片機(jī)通常是單線程運(yùn)行。在進(jìn)行溫濕度測(cè)量時(shí),單片機(jī)需要等待測(cè)試結(jié)果返回,其方法阻礙了其他測(cè)試和操作的同步執(zhí)行。

在嵌入式Linux 系統(tǒng)中,驅(qū)動(dòng)程序?qū)y(cè)試任務(wù)送入任務(wù)隊(duì)列,交出CPU 控制權(quán),繼而進(jìn)行其他實(shí)時(shí)任務(wù)運(yùn)行,待內(nèi)核空閑再進(jìn)入任務(wù)隊(duì)列完成傳感器的測(cè)量,以此提高系統(tǒng)執(zhí)行的效率和實(shí)時(shí)性。

3.1 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ù)定義如下所示。

 

 

 

 

驅(qū)動(dòng)程序加載設(shè)備時(shí)將調(diào)用內(nèi)核的注冊(cè)函數(shù)。在Linux2.4 和2.6 內(nèi)核中,幾乎所有Linux 驅(qū)動(dòng)程序都依靠如下函數(shù)加載模塊。

驅(qū)動(dòng)程序初始化完成后,上層應(yīng)用程序可以調(diào)用sht10_fops 中的sht10_read 函數(shù)進(jìn)行溫濕度的讀取操作。

3.2 Linux 溫濕度傳感器設(shè)備操作

進(jìn)行數(shù)據(jù)讀取前,首先要在驅(qū)動(dòng)程序中開(kāi)辟4 個(gè)字節(jié)的數(shù)據(jù)空間,用于存放溫度和濕度測(cè)量值。這里定義全局變量數(shù)據(jù)緩沖區(qū)為unsigned char buf[4].

讀取SHT10 溫濕度數(shù)據(jù)前,需要進(jìn)行端口初始化和SHT10 復(fù)位操作,然后將任務(wù)送于任務(wù)隊(duì)列并阻塞線程,當(dāng)任務(wù)完成返回后再喚醒線程,將讀到數(shù)據(jù)傳遞給上層應(yīng)用程序做進(jìn)一步處理。程序流程圖和實(shí)現(xiàn)函數(shù)如圖2 所示。

 

 

圖2 驅(qū)動(dòng)程序流程圖。

 

 

 

 

上述函數(shù)中start_trans; write_byte; read_data; read_byte 分別利用PXA310 引腳模擬時(shí)序完成啟動(dòng)傳輸、寫(xiě)字節(jié),讀一位數(shù)據(jù)和讀字節(jié)的操作。

 

 

內(nèi)核tasklet_schedule() 調(diào)度執(zhí)行指定的tasklet,在獲得運(yùn)行機(jī)會(huì)之前只會(huì)調(diào)度一次,如果在運(yùn)行時(shí)被調(diào)度, 則完成后會(huì)被再次運(yùn)行。

wait_for_completion()這個(gè)函數(shù)進(jìn)行一個(gè)不可打斷的等待,如果有代碼調(diào)用它,并且沒(méi)有完成這個(gè)任務(wù),結(jié)果會(huì)是一個(gè)不可殺死的進(jìn)程。copy_to_user()將內(nèi)核空間數(shù)據(jù)傳向上層用戶(hù)空間,并讓上層測(cè)試程序做進(jìn)一步處理。


3.3 Linux 溫濕度傳感器設(shè)備阻塞操作

由于溫濕度傳感器測(cè)量需要一定時(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ù)如下所示。

 

 

Tasklet可以使測(cè)量操作在系統(tǒng)負(fù)荷不重時(shí)被調(diào)用,或是被立即執(zhí)行,但始終不會(huì)晚于下一個(gè)CPU clock.

Tasklet 始終在中斷期間運(yùn)行,并且在調(diào)度他的同一CPU 上運(yùn)行。對(duì)比單片機(jī)系統(tǒng),在單線程情況下,一般在sht10_read()中調(diào)用2 次measure_ sht10()來(lái)等待測(cè)量完成,測(cè)量效率依賴(lài)2 次測(cè)量消耗的時(shí)間;但在Linux 驅(qū)動(dòng)程序中,使用Tasklet 方式操作,2 次測(cè)量過(guò)程不會(huì)對(duì)其他線程產(chǎn)生影響,在有其他實(shí)時(shí)事件需要及時(shí)處理時(shí)(如網(wǎng)絡(luò),視頻),可以更有效提高驅(qū)動(dòng)運(yùn)行效率,降低對(duì)其他實(shí)時(shí)處理產(chǎn)生的影響。

4 溫濕度傳感器測(cè)試與驗(yàn)證

驅(qū)動(dòng)程序完成以后,需要相應(yīng)測(cè)試程序驗(yàn)證驅(qū)動(dòng)程序編寫(xiě)的正確性。由于驅(qū)動(dòng)程序中不能對(duì)數(shù)據(jù)進(jìn)行浮點(diǎn)數(shù)運(yùn)算,所以測(cè)試程序必須將驅(qū)動(dòng)程序傳遞來(lái)的數(shù)據(jù)進(jìn)行浮點(diǎn)數(shù)運(yùn)算才能得到相應(yīng)的溫濕度值。

4.1 溫濕度傳感器測(cè)試環(huán)境

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

 

 

圖3 SORH 轉(zhuǎn)換到相對(duì)濕度。

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

 

 

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

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

 

 

由于能隙材料研發(fā)的溫度傳感器具有極好線性,14bit 溫度值參考如下公式。

Temperature = d1+d2 x SOT

溫度轉(zhuǎn)換系數(shù)取值如下表所示,SOT 是傳感器返回的溫度值。

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

 

 

利用上述溫濕度轉(zhuǎn)換公式和系數(shù)可以得出溫濕度測(cè)量值。

     

4.2 溫濕度傳感器測(cè)試途徑與效率驗(yàn)證

在測(cè)試程序中,考慮上述測(cè)量環(huán)境下溫濕度之間的非線性,調(diào)用驅(qū)動(dòng)程序的sht10_read 函數(shù)將讀到的溫濕度數(shù)據(jù)返回上層測(cè)試程序進(jìn)行浮點(diǎn)數(shù)運(yùn)算,將計(jì)算值通過(guò)串口輸出,達(dá)到測(cè)試驗(yàn)證的目的。測(cè)試程序的實(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; //相對(duì)濕度轉(zhuǎn)換公式

rh_true=(t-25)*(t1+t2*rh)+rh_line;

//相對(duì)濕度溫度補(bǔ)償

if(rh_true>100)rh_true=100; //超出范圍

if(rh_true<0.1)rh_true=0.1;

printf("Humidity is: %.2f%RHn",rh_true);

printf("Temperature is: %.2f‘Cn",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); //打開(kāi)文件

if (fd < 0) { //打開(kāi)失敗,退出

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; //退出

}

測(cè)試完成后,考察驅(qū)動(dòng)程序運(yùn)行效率,即在驅(qū)動(dòng)程序的tasklet_schedule 和copy_to_user 前分別對(duì)PXA310 的OSCR 時(shí)間計(jì)數(shù)寄存器進(jìn)行時(shí)間讀取,計(jì)算此次溫濕度測(cè)量所用時(shí)間。計(jì)算公式如下所示。

Time=(OSCR2-OSCR1)/OSCR_FREQ

OSCR2 是喚醒線程后的時(shí)間,OSCR1 是進(jìn)入任務(wù)隊(duì)列前的時(shí)間。OSCR_FREQ 是PXA310 內(nèi)部時(shí)鐘頻率3.25MHz.這樣就可以計(jì)算出每次溫濕度讀取消耗的時(shí)間,以此對(duì)比SHT10 開(kāi)發(fā)文檔中理論測(cè)量時(shí)間值,確定實(shí)際驅(qū)動(dòng)程序運(yùn)行的效率。

5 實(shí)驗(yàn)結(jié)果與分析

超級(jí)終端中插入驅(qū)動(dòng)模塊,運(yùn)行測(cè)試程序,可以在終端上看到測(cè)試結(jié)果(如圖4)。

 

 

圖4 超級(jí)終端測(cè)試結(jié)果

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

表3 驅(qū)動(dòng)程序中實(shí)際測(cè)量消耗的時(shí)間

 

center>

 

上表的測(cè)試結(jié)果不僅和傳感器的響應(yīng)速度有關(guān),而且還與系統(tǒng)中其他運(yùn)行的線程有關(guān)。當(dāng)系統(tǒng)中有高一級(jí)任務(wù)到來(lái)或其他實(shí)時(shí)事件需要處理時(shí),實(shí)際測(cè)量時(shí)間會(huì)大于上表中的測(cè)量時(shí)間,并且隨著任務(wù)的增加測(cè)量時(shí)間也會(huì)相應(yīng)的增加,完成的時(shí)間也受到外界中斷的影響。內(nèi)核會(huì)在任務(wù)不繁忙時(shí)完成測(cè)量操作。上表測(cè)試結(jié)果并未受到系統(tǒng)中其他驅(qū)動(dòng)程序和中斷的影響。對(duì)比開(kāi)發(fā)手冊(cè)中理論測(cè)量時(shí)間可以看到,使用任務(wù)隊(duì)列的方法對(duì)改善系統(tǒng)處理能力與實(shí)時(shí)性效果明顯。

此外,實(shí)現(xiàn)溫濕度傳感器驅(qū)動(dòng)程序還需要清楚了解SHT10 讀寫(xiě)時(shí)序,讀取溫度和濕度所需要的時(shí)間不同。如果應(yīng)用程序中得出的溫濕度值超過(guò)預(yù)期值,就可以打開(kāi)GPIO 驅(qū)動(dòng)模塊,觸發(fā)系統(tǒng)板上的蜂鳴器達(dá)到預(yù)警效果。

6 結(jié)語(yǔ)

此設(shè)計(jì)方案已經(jīng)應(yīng)用于嵌入式無(wú)聲交互控制系統(tǒng)的檢測(cè),并且運(yùn)行正常。實(shí)踐證明,該嵌入式Linux溫濕度傳感器設(shè)計(jì)方案可行有效,線程阻塞提高系統(tǒng)運(yùn)行效率,在環(huán)境測(cè)量準(zhǔn)確度和系統(tǒng)實(shí)時(shí)性方面得到了令人滿(mǎn)意的效果。由于此方案基于Linux 操作系統(tǒng)和PXA310 平臺(tái),其在多任務(wù)、實(shí)時(shí)快速處理上具有一定的優(yōu)勢(shì)。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉