日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

外设驱动库开发笔记12:TSEV01CL55红外温度传感器驱动

發(fā)布時(shí)間:2024/7/23 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 外设驱动库开发笔记12:TSEV01CL55红外温度传感器驱动 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有時(shí)候我們需要檢測(cè)一些無(wú)法直接接觸的器件的溫度。為了實(shí)現(xiàn)這一需求,我們通常會(huì)選擇紅外溫度傳感器來(lái)實(shí)現(xiàn)這一功能。考慮到復(fù)用的問(wèn)題,我們一般會(huì)將操作元器件的代碼抽象為驅(qū)動(dòng)函數(shù)以備調(diào)用。這里我們就來(lái)設(shè)計(jì)并實(shí)現(xiàn)TSEV01CL55紅外溫度傳感器的驅(qū)動(dòng)。

1、功能概述

TSEV01CL55是一種基于紅外輻射檢測(cè)的無(wú)接觸測(cè)溫系統(tǒng)。TSEV01CL55在前端裝有紅外傳感器(熱電堆)

1.1、硬件描述

TSEV01CL55適用于需要非接觸式溫度測(cè)量的廣泛應(yīng)用場(chǎng)合。TSEV01CL55紅外溫度傳感器測(cè)溫時(shí),熱堆傳感器必須指向所要測(cè)量的目標(biāo)對(duì)象。TSEV01CL55紅外溫度傳感器的引腳定義如下:

TSEV01CL55紅外溫度傳感器測(cè)溫基本工作原理是:用熱電堆傳感器探測(cè)紅外輻射,該傳感器將入射輻射轉(zhuǎn)換成模擬電壓;用熱敏電阻測(cè)定傳感器溫度。根據(jù)測(cè)到的目標(biāo)溫度和環(huán)境溫度數(shù)據(jù)進(jìn)一步的進(jìn)行模擬信號(hào)處理和調(diào)理,使用處理單元計(jì)算環(huán)境溫度和物體溫度。

1.2、通訊接口

TSEV01CL55紅外溫度傳感器對(duì)外通訊采用數(shù)字輸出總線(I2C)。通過(guò)I2C總線和響應(yīng)的操作命令就可以得到物體溫度和環(huán)境溫度數(shù)據(jù)。這兩個(gè)值都是以百分之一的度數(shù)傳輸?shù)摹O嚓P(guān)的操作命令如下:

TSEV01CL55紅外溫度傳感器測(cè)溫有一定的范圍限制,當(dāng)環(huán)境或物體溫度超過(guò)指定溫度范圍時(shí),溫度輸出顯示以下數(shù)據(jù):

TSEV01CL55紅外溫度傳感器的I2C硬件模塊在SCL“鎖存問(wèn)題上進(jìn)行了更改。修改后的I2C模塊不再下拉SCL命令主程序等待數(shù)據(jù)的計(jì)算。因此,主設(shè)備必須增加等待時(shí)間,以確保從設(shè)備能夠組織數(shù)據(jù)。對(duì)于標(biāo)準(zhǔn)數(shù)據(jù)傳輸(比如讀取溫度)1ms的時(shí)間足夠從設(shè)備組織數(shù)據(jù)。對(duì)于需要更多時(shí)間的操作(如讀取/寫(xiě)入EEPROM),應(yīng)該留取足夠的時(shí)間等待從設(shè)備處理數(shù)據(jù)。

TSEV01CL55紅外溫度傳感器寫(xiě)命令時(shí)序如下:

TSEV01CL55紅外溫度傳感器讀數(shù)據(jù)時(shí)序如下:

上述時(shí)序圖是讀取目標(biāo)溫度的時(shí)序圖。其它數(shù)據(jù)的讀寫(xiě)過(guò)程類似,在此不再贅述。

2、驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)

我們已經(jīng)了解了TSEV01CL55紅外溫度傳感器的基本情況。接下來(lái)我們將設(shè)計(jì)并實(shí)現(xiàn)TSEV01CL55紅外溫度傳感器的通用驅(qū)動(dòng)程序。

2.1、對(duì)象定義

在使用一個(gè)對(duì)象之前我們需要獲得一個(gè)對(duì)象。同樣的我們想要TSEV01CL55紅外溫度傳感器對(duì)象就需要先定義TSEV01CL55紅外溫度傳感器的對(duì)象。如何得到TSEV01CL55紅外溫度傳感器的對(duì)象呢?接下來(lái)我們就來(lái)考慮這個(gè)問(wèn)題。

2.1.1、對(duì)象的抽象

我們要得到TSEV01CL55紅外溫度傳感器對(duì)象,需要先分析器基本特性。一般來(lái)說(shuō),一個(gè)對(duì)象至少包含兩方面的特性:屬性與操作。接下來(lái)我們就來(lái)從這兩個(gè)方面思考一下TSEV01CL55紅外溫度傳感器的對(duì)象。

先來(lái)考慮屬性,作為屬性肯定是用于標(biāo)識(shí)或記錄對(duì)象特征的東西。我們來(lái)考慮TSEV01CL55紅外溫度傳感器對(duì)象屬性。作為I2C通訊從設(shè)備,在總線上唯一區(qū)別不同設(shè)備的就是設(shè)備地址。所以我們將I2C設(shè)備地址作為對(duì)象的一個(gè)屬性。TSEV01CL55紅外溫度傳感器所檢測(cè)的環(huán)境溫度和目標(biāo)溫度雖然不能唯一標(biāo)識(shí)TSEV01CL55紅外溫度傳感器對(duì)象,但可以記錄當(dāng)前的狀態(tài)所以我們將其作為對(duì)象的屬性。

接著我們還需要考慮TSEV01CL55紅外溫度傳感器對(duì)象的操作問(wèn)題。對(duì)于I2C通訊設(shè)備,我們需要向設(shè)備寫(xiě)命令,同時(shí)也要從設(shè)備接收數(shù)據(jù),但不論是接收數(shù)據(jù)還是發(fā)送命令都依賴于硬件接口和相關(guān)的硬件平臺(tái),所以我們將寫(xiě)命令和收數(shù)據(jù)作為TSEV01CL55紅外溫度傳感器對(duì)象的兩個(gè)操作。此外,操作過(guò)程中我們需要時(shí)序操作,而延時(shí)操作都依賴于具體的平臺(tái),所以我們將延時(shí)操作作為TSEV01CL55紅外溫度傳感器對(duì)象的一個(gè)操作。

根據(jù)上述我們對(duì)TSEV01CL55紅外溫度傳感器的分析,我們可以定義TSEV01CL55紅外溫度傳感器的對(duì)象類型如下:

//定義TSEV01CL55紅外溫度傳感器對(duì)象類型 typedef struct HLPTObject{uint8_t devAddress;?????????? //對(duì)象的地址float tempObject;???????????? //對(duì)象溫度值float tempAmbient;??????????? //環(huán)境溫度void (*Delayms)(volatile uint32_t nTime);?????? //延時(shí)操作指針void (*Receive)(struct HLPTObject *hlpt,uint8_t *rData,uint16_t rSize);????????? //接收數(shù)據(jù)操作指針void (*Transmit)(struct HLPTObject *hlpt,uint8_t *wData,uint16_t wSize);??????? //發(fā)送數(shù)據(jù)操作指針 }HLPTObjectType;

2.1.2、對(duì)象初始化

我們知道,一個(gè)對(duì)象僅作聲明是不能使用的,我們需要先對(duì)其進(jìn)行初始化,所以這里我們來(lái)考慮TSEV01CL55紅外溫度傳感器對(duì)象的初始化函數(shù)。一般來(lái)說(shuō),初始化函數(shù)需要處理幾個(gè)方面的問(wèn)題。一是檢查輸入?yún)?shù)是否合理;二是為對(duì)象的屬性賦初值;三是對(duì)對(duì)象作必要的初始化配置。據(jù)此我們?cè)O(shè)計(jì)TSEV01CL55紅外溫度傳感器對(duì)象的初始化函數(shù)如下:

/* 紅外溫度傳感器對(duì)象初始化 */ void HLPTInitialization(HLPTObjectType *hlpt,???????? //初始化的對(duì)象變量uint8_t address,??????????????//設(shè)備I2C地址HLPTReceive receive,??????????//接收函數(shù)指針HLPTTransmit transmit,? //發(fā)送函數(shù)指針HLPTDelayms delayms????????????//毫秒延時(shí)函數(shù)指針) {if((hlpt==NULL)||(receive==NULL)||(transmit==NULL)||(delayms==NULL)){return;}hlpt->Receive=receive;hlpt->Transmit=transmit;hlpt->Delayms=delayms;hlpt->tempObject=0.0;hlpt->tempAmbient=0.0;if(address>0x00){hlpt->devAddress=address;}else{hlpt->devAddress=HLPTSlaveAddress;} }

2.2、對(duì)象操作

我們已經(jīng)完成了TSEV01CL55紅外溫度傳感器對(duì)象類型的定義和對(duì)象初始化函數(shù)的設(shè)計(jì)。但我們的主要目標(biāo)是獲取對(duì)象的信息,接下來(lái)我們還要實(shí)現(xiàn)面向TSEV01CL55紅外溫度傳感器的各類操作。

面向TSEV01CL55紅外溫度傳感器的操作比較簡(jiǎn)單,最主要的就是讀取溫度數(shù)據(jù),包括環(huán)境溫度和目標(biāo)溫度。所以我們開(kāi)發(fā)獲取面向TSEV01CL55紅外溫度傳感器數(shù)據(jù)的操作如下:

/* 讀取數(shù)據(jù) */ static uint16_t ReadDataFromHLPT(HLPTObjectType *hlpt,uint8_t cmd) {uint8_t data[2];uint16_t tempCode;hlpt->Transmit(hlpt,cmd,1);hlpt->Delayms(1);hlpt->Receive(hlpt,data,2);tempCode=(data[0]<<8)+data[1];return tempCode; }

3、驅(qū)動(dòng)的使用

我們已經(jīng)設(shè)計(jì)并實(shí)現(xiàn)了TSEV01CL55紅外溫度傳感器的驅(qū)動(dòng)程序,接下來(lái)我們將考慮設(shè)計(jì)一個(gè)簡(jiǎn)單的應(yīng)用來(lái)驗(yàn)證這一驅(qū)動(dòng)。

3.1、聲明并初始化對(duì)象

使用基于對(duì)象的操作我們需要先得到這個(gè)對(duì)象,所以我們先要使用前面定義的TSEV01CL55紅外溫度傳感器對(duì)象類型聲明一個(gè)TSEV01CL55紅外溫度傳感器對(duì)象變量,具體操作格式如下:

HLPTObjectType hlpt;

聲明了這個(gè)對(duì)象變量并不能立即使用,我們還需要使用驅(qū)動(dòng)中定義的初始化函數(shù)對(duì)這個(gè)變量進(jìn)行初始化。這個(gè)初始化函數(shù)所需要的輸入?yún)?shù)如下:

HLPTObjectType *hlpt,初始化的對(duì)象變量

uint8_t address,設(shè)備I2C地址

HLPTReceive receive,接收函數(shù)指針

HLPTTransmit transmit,發(fā)送函數(shù)指針

HLPTDelayms delayms,毫秒延時(shí)函數(shù)指針

對(duì)于這些參數(shù),對(duì)象變量我們已經(jīng)定義了。而設(shè)備地址,根據(jù)實(shí)際情況輸入就好了。主要的是我們需要定義幾個(gè)函數(shù),并將函數(shù)指針作為參數(shù)。這幾個(gè)函數(shù)的類型如下:

/*延時(shí)操作指針類型*/ typedef void (*HLPTDelayms)(volatile uint32_t nTime);/*接收數(shù)據(jù)操作指針類型*/ typedef void (*HLPTReceive)(struct HLPTObject *hlpt,uint8_t *rData,uint16_t rSize);/*發(fā)送數(shù)據(jù)操作指針類型*/ typedef void (*HLPTTransmit)(struct HLPTObject *hlpt,uint8_t *wData,uint16_t wSize);

對(duì)于這幾個(gè)函數(shù)我們根據(jù)樣式定義就可以了,具體的操作可能與使用的硬件平臺(tái)有關(guān)系。具體函數(shù)定義如下:

/*從TSEV01CL55接收數(shù)據(jù)*/ static void ReceiveFromHLPT(HLPTObjectType *sht,uint8_t *rData,uint16_t rSize) {HAL_I2C_Master_Receive(&hlpti2c, sht->devAddress,rData, rSize, 1000); }/*向TSEV01CL55傳送數(shù)據(jù)*/ static void TransmitToHLPT(HLPTObjectType *sht,uint8_t *tData,uint16_t tSize) {HAL_I2C_Master_Transmit(&hlpti2c,sht->devAddress,tData,tSize,1000); }

對(duì)于延時(shí)函數(shù)我們可以采用各種方法實(shí)現(xiàn)。我們采用的STM32平臺(tái)和HAL庫(kù)則可以直接使用HAL_Delay()函數(shù)。于是我們可以調(diào)用初始化函數(shù)如下:

HLPTInitialization(&hlpt0x54ReceiveFromHLPTTransmitToHLPTHAL_Delay);

3.2、基于對(duì)象進(jìn)行操作

我們定義了對(duì)象變量并使用初始化函數(shù)給其作了初始化。接著我們就來(lái)考慮操作這一對(duì)象獲取我們想要的數(shù)據(jù)。我們?cè)隍?qū)動(dòng)中已經(jīng)將獲取數(shù)據(jù)并轉(zhuǎn)換為轉(zhuǎn)換值的比例值,接下來(lái)我們使用這一驅(qū)動(dòng)開(kāi)發(fā)我們的應(yīng)用實(shí)例。

/*讀取溫度值*/ void GetTemperatureData(void) {float tempObject;float tempAmbient;GetHLPTemperature(&hlpt);tempObject=hlpt.tempObject;tempAmbient=hlpt.tempAmbient; }

4、應(yīng)用總結(jié)

我們實(shí)現(xiàn)了TSEV01CL55紅外溫度傳感器的驅(qū)動(dòng),并再次基礎(chǔ)上設(shè)計(jì)了一個(gè)簡(jiǎn)單的驗(yàn)證應(yīng)用。我們得到了目標(biāo)溫度和環(huán)境溫度。這說(shuō)明我們的驅(qū)動(dòng)設(shè)計(jì)是成功的。

在使用驅(qū)動(dòng)時(shí)我們需要注意,與TSEV01CL55紅外溫度傳感器的I2C通訊會(huì)出現(xiàn)鎖死的情況,特別是使用硬件I2C收發(fā)器的時(shí)候。而且TSEV01CL55紅外溫度傳感器不會(huì)在數(shù)據(jù)準(zhǔn)備好后下拉SCL電平,所以讀取數(shù)據(jù)時(shí),需要給以足夠的延時(shí)來(lái)保證數(shù)據(jù)準(zhǔn)備就緒。

在使用TSEV01CL55紅外溫度傳感器的驅(qū)動(dòng)時(shí)還應(yīng)注意,TSEV01CL55紅外溫度傳感器有一個(gè)固定的地址0x54,在初始化時(shí)輸入此地址,若不給定這個(gè)地址就會(huì)以廣播的方式通訊。

歡迎關(guān)注:

?

總結(jié)

以上是生活随笔為你收集整理的外设驱动库开发笔记12:TSEV01CL55红外温度传感器驱动的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。