《電子技術應用》
您所在的位置:首頁 > 測試測量 > 其他 > 教程:SHT1x系列溫濕度傳感器的驅動設計與實現

教程:SHT1x系列溫濕度傳感器的驅動設計與實現

2022-12-24
來源:木南創(chuàng)智

  在我們的產品中,經常需要檢測溫濕度數據。有很多檢測溫濕度的方法和模塊,其中SHT1x系列傳感器" target="_blank">溫濕度傳感器就是一種成本較低使用方便的溫濕度檢測模塊。下面我們就來說一說如何實現SHT1x系列溫濕度傳感器的驅動。

  1 、功能概述

  SHT1x包括 SHT10, SHT11 和 SHT15 屬于Sensirion溫濕度傳感器家族中的貼片封裝系列。傳感器將傳感元件和信號處理電路集成在一塊微型電路板上,輸出完全標定的數字信號。

  1.1 、硬件描述

  SHT1x傳感器包括一個電容性聚合體測濕敏感元件、一個用能隙材料制成的測溫元件,并在同一芯片上,與14 位的A/D 轉換器以及串行接口電路實現無縫連接。其引腳定義如下:

193.JPG

  SHT1x溫濕度傳感器使用的2線通訊,類似于I2C總線,但并不相同,使用普通的GPIO就可實現通訊。此次采用STM32F103VET6來操作SHT15,具體的連接方式如下:

191.JPG

  SCK 用于微處理器與SHT1x 之間的通訊同步。由于接口包含了完全靜態(tài)邏輯,因而不存在最小SCK 頻率。

  DATA 引腳為三態(tài)結構,用于讀取傳感器數據 . 當向傳感器發(fā)送命令時, DATA 在 SCK 上升沿有效且在 SCK 高電平時必須保持穩(wěn)定。 DATA 在 SCK 下降沿之后改變。為避免信號沖突,微處理器應驅動DATA 在低電平。需要一個外部的上拉電阻(例如:10kΩ)將信號提拉至高電平。上拉電阻通常已包含在微處理器的I/O 電路中。

  1.2 、數據通訊

  選擇供電電壓后將傳感器通電,上電速率不能低于1V/ms。通電后傳感器需要11ms 進入休眠狀態(tài),在此之前不允許對傳感器發(fā)送任何命令。

  SHT1x溫濕度傳感器采用一組“啟動傳輸”時序,來完成數據傳輸的初始化。而后續(xù)命令包含三個地址位(目前只支持000“),和五個命令位。SHT1x 會以下述方式表示已正確地接收到指令:在第8 個SCK 時鐘的下降沿之后,將DATA 下拉為低電平(ACK 位)。在第9 個SCK 時鐘的下降沿之后,釋放DATA(恢復高電平)。SHT1x溫濕度傳感器的指令表如下:

190.JPG

  后續(xù)我們開發(fā)SHT1x溫濕度傳感器的驅動時,就是通過這些操作命令來實現不同的操作。

  1.3 、數據計算

  濕度的測量數據并不是一個線性變化的過程濕度的非線性,為獲得更為精確的測量數據,我們一般要采用非線性補償公式進行信號轉換。濕度的非線性補償公式及參數如下:

189.JPG

  一般來說,傳感器濕度的校準都是在一定的參考溫度下進行的,但在我們的使用過程中,實際溫度與測試參考溫度25℃ (~77℉)明顯是不同的,所以我們需要對實際的濕度數據進行補償。濕度的溫度補償公式及系數如下:

188.JPG

  SHT1x系列溫濕度傳感器的溫度傳感器采用的能隙材料PTAT。而能隙材料PTAT一般與絕對溫度存在正比關系,因而溫度傳感器具有極好的線性。可用如下公式將數字輸出(SOT)轉換為溫度值,溫度轉換系數如下:

187.JPG

  SHT1x 并不直接進行露點測量,但露點可以通過溫度和濕度讀數計算得到。。由于溫度和濕度在同一塊集成電路上測量,SHT1x可測量露點。露點的計算方法很多,絕大多數都很復雜。 對于-40 – 50°C 溫度范圍的測量,通過下面的的公式可得到較好的精度。

186.JPG

  通過上述幾個公式就可以計算出SHT1x監(jiān)測的溫度、濕度及露點數據。

  2 、驅動設計與實現

  我們已經了解了SHT1x系列溫濕度傳感器基本技術特性,接下來我們進一步考慮如何設計并實現SHT1x系列溫濕度傳感器的驅動。

  2.1 、對象定義

  在使用一個對象之前我們需要獲得一個對象。同樣的我們想要SHT1x系列溫濕度傳感器就需要先定義SHT1x系列溫濕度傳感器的對象。

  2.1.1 、對象的抽象

  我們要得到SHT1x系列溫濕度傳感器對象,需要先分析其基本特性。一般來說,一個對象至少包含兩方面的特性:屬性與操作。接下來我們就來從這兩個方面思考一下SHT1x系列溫濕度傳感器的對象。

  先來考慮屬性,作為屬性肯定是用于標識或記錄對象特征的東西。我們來考慮SHT1x系列溫濕度傳感器對象屬性。首先SHT1x系列溫濕度傳感器有一個狀態(tài)寄存器,用于表示狀態(tài)和配置操作特性,所以我們將讀取的狀態(tài)寄存器的數據作為標識SHT1x系列溫濕度傳感器對象的一個屬性。我們根據前面SHT1x系列溫濕度傳感器的數據計算公式可知,溫度單位和工作電壓對溫度測量結果的計算有直接影響,所以我們將溫度單位和工作電壓也作為SHT1x系列溫濕度傳感器對象的屬性,用于區(qū)別計算過程。此外溫度、濕度、露點的數據我們將其作為屬性用于記錄當前狀態(tài)。

  接著我們還需要考慮SHT1x系列溫濕度傳感器對象的操作問題。我們是使用GPIO來模擬數字通訊,所以SCK引腳和DATA引腳都需要控制輸出,而控制函數的實現與具體的硬件相關,所以我們將控制這兩個引腳輸出的函數作為對象的操作。對于DATA引腳還有可能需要控制方向和讀取輸入,同樣的原因我們也將其作為對象的操作。此外,我們在與SHT1X通訊時需要控制時鐘,以及操作等待都是與硬件有關系的時間操作,所以我們也將其作為對象的操作。

  根據上述我們對SHT1x溫濕度傳感器的分析,我們可以定義SHT1x溫濕度傳感器的對象類型如下:

185.JPG

  2.1.2 、對象初始化

  我們知道,一個對象僅作聲明是不能使用的,我們需要先對其進行初始化,所以這里我們來考慮SHT1x系列溫濕度傳感器對象的初始化函數。一般來說,初始化函數需要處理幾個方面的問題。一是檢查輸入參數是否合理;二是為對象的屬性賦初值;三是對對象作必要的初始化配置。據此我們設計SHT1x系列溫濕度傳感器對象的初始化函數如下:

183.JPG

 184.JPG


  2.2 、對象操作

  我們已經完成了SHT1x系列溫濕度傳感器對象類型的定義和對象初始化函數的設計。但我們的主要目標是獲取對象的信息,接下來我們還要實現面向SHT1x溫濕度傳感器的各類操作。

  2.2.1 、啟動通訊

  每次發(fā)起與SHT1x溫濕度傳感器的通訊都需要用一組”啟動傳輸“時序,來完成數據傳輸的初始化。它包括:當SCK時鐘高電平時DATA翻轉為低電平,緊接著SCK變?yōu)榈碗娖?,隨后是在SCK時鐘高電平時DATA翻轉為高電平。啟動通訊時序如下圖:

182.JPG

  根據上述時序圖我們可以實現啟動通訊的操作函數如下:

  181.JPG

  2.2.2 、復位通訊

  如果與SHT1x通訊中斷,可通過下列信號時序復位:當DATA保持高電平時,觸發(fā)SCK時鐘9 次或更多。接著發(fā)送一個”傳輸啟動“時序。這些時序只復位串口,狀態(tài)寄存器內容仍然保留。具體的時序圖如下:

180.JPG

  根據上述的時序圖,我們設計通訊復位操作函數如下:

  179.JPG

  2.2.3 、數據獲取

  在前面我們已經了解了SHT1x通訊命令,根據命令定義,我們發(fā)送命令”00000101“就表示相對濕度RH測量,發(fā)送命令”00000011“就表示溫度T的測量。測量過程需要大約20/80/320ms,分別對應8/12/14bit分辨率。SHT1x通過下拉DATA至低電平并進入空閑模式,表示測量的結束。控制器在再次觸發(fā)SCK時鐘前,必須等待這個”數據備妥“信號來讀出數據。檢測數據可以先被存儲,這樣控制器可以繼續(xù)執(zhí)行其它任務在需要時再讀出數據。

  接著傳輸2個字節(jié)的測量數據和1個字節(jié)的CRC奇偶校驗(可選擇讀?。?。控制器需要通過下拉DATA為低電平,以確認每個字節(jié)。所有的數據從MSB 開,右值有效(例如:對于12bit 數據,從第5個SCK時鐘起算作MSB;而對于8bit 數據,首字節(jié)則無意始義)。

  在收到CRC的確認位之后,表明通訊結束。如果不使用CRC-8 校驗,控制器可以在測量值LSB后,通過保持ACK高電平終止通訊。在測量和通訊完成后,SHT1x自動轉入休眠模式。數據測量時序圖如下所示:

178.JPG

  根據上述描述和時序圖,我們可以實現溫濕度數據的獲取函數如下:

 177.JPG

  2.2.4 、狀態(tài)寄存器操作

  SHT1x的某些高級功能可以通過給狀態(tài)寄存器發(fā)送指令來實現,如選擇測量分辨率,電量不足提醒,使用OTP加載或啟動加熱功能等。SHT1x的狀態(tài)寄存器可以讀或者寫。其實寫狀態(tài)寄存器就是配置設備的一些特性,一般情況下在初始化時完成即可。讀寫狀態(tài)寄存器的格式如下:

176.JPG

  175.JPG

  3 、驅動的使用

  我們已經設計并實現了SHT1x溫濕度傳感器驅動,接下來我們還需要對這一驅動進行驗證,所以我們要基于此驅動設計一個簡單的應用。

  3.1 、聲明并初始化對象

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

  Sht1xObjectType sht1x;

  聲明了這個對象變量并不能立即使用,我們還需要使用驅動中定義的初始化函數對這個變量進行初始化。這個初始化函數所需要的輸入參數如下:

  Sht1xObjectType *sht,SHT1X對象變量

  uint32_t sck,SCK時鐘頻率

  float vdd,工作電壓

  SHT1xTempUnitType uint,溫度單位

  SHT1xHeaterType heater,是否啟用加熱器設置

  SHT1xOTPType otp,是否加在OTP設置

  SHT1xResolutionType resolution,測量分辨率設置

  SHT1xSetBusPin setSckPin,SCK引腳操作函數

  SHT1xSetBusPin setDataPin,DATA引腳操作函數

  SHT1xReadSDABit readSDA,讀DATA引腳函數

  SHT1xSDADirection direction,DATA引腳方向配置函數

  SHT1xDelay delayus,微秒延時函數

  SHT1xDelay delayms,毫秒延時函數

  對于這些參數,對象變量我們已經定義了。時鐘頻率根據實際輸入,以k為單位,默認為100k。工作電壓根據實際情況輸入。溫度單位、加熱設置、OTP配置、分辨率配置均為枚舉,根據實際情況選擇就好了。主要的是我們需要定義幾個函數,并將函數指針作為參數。這幾個函數的類型如下:

  174.JPG

  對于這幾個函數我們根據樣式定義就可以了,具體的操作可能與使用的硬件平臺有關系。片選操作函數用于多設備需要軟件操作時,如采用硬件片選可以傳入NULL即可。具體函數定義如下:

  173.JPG

  對于延時函數我們可以采用各種方法實現。我們采用的STM32平臺和HAL庫則可以直接使用HAL_Delay()函數。于是我們可以調用初始化函數如下:

  SHT1xInitialization(&sht1x,100,3.3,DegreeCentigrade,SHT1xHeaterDisable,SHT1xOTPEbable,SHT1xHighResolution,OperationSckPin,OperationDataPin,ReadDataPinBit,SetDataPineDirection,Delayus,HAL_Delay);

  這里我們將SHT1x對象初始化為速度100k,3.3伏工作電壓,采用攝氏溫度單位,禁用片上加熱器,加載OTP并使用高分辨率。

  3.2 、基于對象進行操作

  我們定義了對象變量并使用初始化函數給其作了初始化。接著我們就來考慮操作這一對象獲取我們想要的數據。我們在驅動中已經將獲取數據并轉換為轉換值的比例值,接下來我們使用這一驅動開發(fā)我們的應用實例。

  這里我們設計一個簡單應用,使用SHT1X溫濕度傳感器獲取溫度、濕度及露點數據,具體實現如下:

  172.JPG

  4 、應用總結

  我們實現了SHT1X溫濕度傳感器的驅動,并使用這一驅動開發(fā)了簡單的驗證應用。所得到的結果與我們預期的結果是一致的,這說明我們的驅動開發(fā)沒有問題。

  在使用驅動程序時需要注意一點,對象有一個控制DATA總線引腳輸入輸出方向的操作。對于一般情況下我們編寫引腳的輸入輸出方向控制函數,在初始化函數中將函數指針作為參數傳入即可。如果硬件上可以配置為開漏輸出,則可以不用單獨控制引腳的輸入輸出方向。在初始化函數中以NULL作為參數輸入。

  關于通訊速率問題需要注意。在不同工作電壓時所支持的最大通訊速率是不同的,但不論如何我都能支持到1MHz,所以沒有特殊要求,電壓的影響可以不用考慮。在我們的驅動中,最多能支持到500kHz,這主要是考慮到SHT1X的典型速度只有100k,而且大多數應用中不會有高速要求。

  完整的源代碼可在GitHub下載:https://github.com/foxclever/ExPeriphDriver



更多信息可以來這里獲取==>>電子技術應用-AET<<

mmexport1621241704608.jpg

本站內容除特別聲明的原創(chuàng)文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美日韩一本到| 亚洲国产成人久久综合| 免费在线成人av| 久久精品国亚洲| 亚洲欧美激情视频在线观看一区二区三区| 亚洲日韩欧美视频| 亚洲国产成人不卡| 亚洲第一天堂无码专区| 午夜亚洲伦理| 欧美一区二区精品久久911| 亚洲亚洲精品在线观看 | 欧美大片第1页| 免费一区视频| 欧美a级大片| 欧美大片免费观看| 欧美成人精品在线观看| 欧美成人激情视频| 欧美成人精品一区| 欧美精品久久久久久久| 欧美日韩国产一级片| 欧美日韩久久不卡| 欧美三级在线视频| 国产精品久久久999| 国产精品羞羞答答| 国产午夜精品久久| 红桃视频一区| 亚洲激情在线观看视频免费| 亚洲精品婷婷| 亚洲午夜激情网页| 午夜日本精品| 亚洲国产aⅴ天堂久久| 亚洲精品国产拍免费91在线| 一本一本久久a久久精品综合妖精| 一区二区av在线| 亚洲制服丝袜在线| 欧美在线免费一级片| 久久视频在线看| 欧美精品日本| 国产精品男gay被猛男狂揉视频| 国产精品尤物| 一区在线观看视频| 亚洲毛片网站| 亚洲欧美日韩一区二区| 久久精品女人的天堂av| 日韩视频亚洲视频| 午夜天堂精品久久久久| 久久精品亚洲乱码伦伦中文 | 久久综合久久综合久久综合| 欧美国产一区二区| 国产精品护士白丝一区av| 国产日韩欧美在线| 亚洲国产经典视频| 亚洲午夜精品网| 亚洲高清不卡一区| 亚洲一区二区三区在线播放| 久久久国产精品一区二区三区| 欧美黄色一区二区| 国产精品一区二区在线观看网站| 激情国产一区二区| 亚洲乱码国产乱码精品精98午夜| 亚洲欧洲av一区二区| 亚洲人体一区| 欧美影院一区| 欧美激情二区三区| 国产精品永久免费视频| 亚洲国产天堂久久综合网| 亚洲淫性视频| 亚洲精品孕妇| 久久国产精品一区二区三区四区 | 久久久亚洲成人| 欧美麻豆久久久久久中文| 国产精品午夜在线| 最新日韩av| 欧美一级片久久久久久久| 亚洲卡通欧美制服中文| 欧美在线电影| 欧美日韩国产影院| 激情一区二区三区| 亚洲一区国产视频| 日韩亚洲成人av在线| 久久久久成人网| 国产精品久久久久久妇女6080| 亚洲第一页中文字幕| 午夜精品理论片| 在线综合视频| 欧美成人午夜免费视在线看片| 国产欧美一区二区精品性色| 亚洲另类一区二区| 91久久精品国产91久久性色tv | 亚洲欧美精品一区| 这里只有精品视频在线| 男女视频一区二区| 国产一二三精品| 亚洲综合欧美日韩| 亚洲午夜三级在线| 欧美极品色图| 狠狠综合久久av一区二区小说 | 在线欧美电影| 欧美影院视频| 欧美一区二区三区在线播放| 欧美三级电影网| 亚洲人成在线播放| 亚洲激情第一区| 久久偷窥视频| 国产亚洲综合性久久久影院| 亚洲欧美日本日韩| 亚洲欧美乱综合| 欧美视频中文字幕| 亚洲乱亚洲高清| 99在线|亚洲一区二区| 欧美成人精品在线观看| 在线观看日韩精品| 亚洲国产精品国自产拍av秋霞| 久久国产夜色精品鲁鲁99| 国产精品入口夜色视频大尺度 | 一本色道久久综合亚洲二区三区| 欧美波霸影院| 在线观看福利一区| 亚洲国产裸拍裸体视频在线观看乱了| 久久riav二区三区| 国产欧美精品一区aⅴ影院| 亚洲一区二区视频在线观看| 亚洲已满18点击进入久久| 欧美日韩免费观看一区三区 | 亚洲欧美日韩高清| 国产精品成av人在线视午夜片| 99国产欧美久久久精品| 一区二区日韩| 欧美性色综合| 亚洲影院一区| 欧美影院午夜播放| 国产一区二区三区在线免费观看 | 亚洲精品国产精品国产自| 亚洲免费黄色| 欧美日韩免费看| 一区二区久久久久久| 亚洲无线一线二线三线区别av| 欧美午夜视频| 亚洲在线视频免费观看| 久久激情久久| 在线高清一区| 日韩亚洲欧美综合| 欧美日韩亚洲91| 亚洲一区免费视频| 久久国内精品自在自线400部| 国内精品久久久久久久97牛牛| 久久精品国产欧美激情| 欧美xxxx在线观看| 日韩一区二区福利| 性欧美长视频| 激情丁香综合| 一区二区三区黄色| 国产精品毛片a∨一区二区三区|国| 亚洲欧美日韩综合| 久久免费少妇高潮久久精品99| 在线成人欧美| 制服丝袜亚洲播放| 国产九九精品| 亚洲片在线观看| 欧美午夜精品理论片a级大开眼界| 亚洲欧美日韩在线一区| 免费观看久久久4p| 一区二区三区欧美在线观看| 久久国产66| 91久久国产综合久久蜜月精品| 亚洲欧美国产制服动漫| 激情欧美日韩| 亚洲午夜激情免费视频| 国产人久久人人人人爽| 91久久久久久国产精品| 欧美调教视频| 亚洲高清不卡在线| 欧美网站在线观看| 久久不见久久见免费视频1| 欧美另类高清视频在线| 亚洲欧美中文字幕| 欧美老女人xx| 欧美亚洲一区在线| 欧美伦理91| 欧美伊人久久久久久午夜久久久久 | 欧美成人精品在线观看| 亚洲午夜视频在线| 男女精品网站| 国产一区视频在线观看免费| 亚洲一区视频| 亚洲私人影院| 久久九九热re6这里有精品| 亚洲黄色一区二区三区| 欧美中文字幕在线播放| 亚洲国产日韩欧美在线99| 午夜电影亚洲| 一区二区三区久久久| 亚洲电影av| 亚洲综合视频网| 精品91久久久久| 亚洲综合三区| 亚洲国产高清一区二区三区| 久久er99精品| 亚洲无线一线二线三线区别av| 欧美99久久|