Sensirion  SCD41二氧化碳感測器

簡介

SCD41 是Sensirion製造的一款環境感測器,內部含有二氧化碳溫度以及濕度感測,可供電範圍是DC 2.4V~5.5V,也可以設定大氣壓而做參數調整,適合各類型的領域應用。

介面使用是I2C方式與感測器溝通,可以使用微控制器或是有I2C host 能力的裝置就可以對二氧化碳感測器做讀取/設定的動作。

目前這款SCD41是比較符合真實我們人體對於二氧化碳的真實濃度,某些廠牌所主打的大氣二氧化碳的數據確實是讓人困惑。

他們家使用PASens技術在於此SCD41感測器身上,原理是使用光和聲音的感測。

目前市面上比較微型可用於環境偵測的感測器目前是剩下他們家了,大部分都看到偏向機台。這市場其實真的就他們在做,產品我看了也是很有競爭力,可以做到如此小真的不簡單,而且又很容易讀取設定,但價格就不是很親民,那時候上Digikey購買,一顆就需要1600台幣以上,若要拿來做專題實驗,價錢就是會很考慮的一點,不過通常這種產品會用在自動化控制設備上,會用來做生產監控之類的應用使用,當時在跟這間公司的台灣業務聯絡時,他們都問會:「你們有幾百K的需求量?」,顯然不是會服務小眾maker,為了測試只能上Digikey買開發版自己回來研究。

主要這產品真的很好,寫篇文章交流交流,有任何問題可以一起討論

使用I2C介面讀取感測器數值,介面可參考NXP I2C SPEC

規格https://www.nxp.com/docs/en/user-guide/UM10204.pdf

詳細關於PASens技術在此https://www.sensirion.com/en/about-us/company/pasensr-technology/

 

性能

SCD41內部含有二氧化碳、溫度、濕度,介紹範圍與限制。

CO2

範圍

400ppm~5000ppm

每年飄移

5ppm +-0.5%

濕度

範圍

0%RH~100%RH

每年飄移

<0.25%RH

溫度

範圍

-10~60度

溫度誤差

15~35度 +-0.8度

-10~60度 +-1.5度

每年飄移

<0.003度/每年

電器特性

溫度濕度範圍

 

電路

IC內部電路:

裡面感測CO2的原理我大概看了的理解如下,若有錯誤可以互相交流。

https://www.sensirion.com/en/about-us/company/pasensr-technology/

 

IC 腳位說明

1.封裝是LGA
2.電源要注意低noise,ripple要小於30mvp-p
3.interface使用I2C(I2C "standard-mode),需要接pull high 電阻,建議為10K
4.這邊要注意I2C clock僅支援100Khz
5.上電後Reset需要等待1000ms再讀取資料

 

如果是maker最好是購買開發版,可以來這邊訂購,或者可以留言跟我聯絡購買

如果是購買開發版,只需要接四隻pin


Green cable = SDA
Red cable = VDD
Yellow cable = SCL
black cable = GND

 

通訊協定

I2C address 為0x62

有四種流程,

read I2C sequences

write I2C sequences

send I2Ccommand

send command and fetch result

 

指令

如下圖,為指令的設定表,若要設定start_periodic_measurement ,hex code是0x21b1,並且protocol為send command

指令流程

1.電源上電

2.發送start_periodic_measurement command (hex code = 0x21b1),感測器數值會五秒後開始更新

3.使用CMD取得Co2 溫度 濕度資料 read command (hex code = 0xec05)

 

start_periodic_measurement command指令說明

使用這個指令流程

Start

0x62

W

ACK

0x21

ACK

0xb1

ACK

STOP

 

讀取溫度指令說明

使用這個指令流程

Start

0x62

W

ACK

0xEC

ACK

0x05

ACK

RS

0x62

R

ACK

Data MSB

ACK

Data LSB

ACK

CRC

NACK

STOP

其它的指令有用到再補上來,目前要抓取二氧化碳這樣就可

 

CRC check

I2c封包內有CRC的地方,手冊上把算法都寫好了,我也試過ok。主要是使用CTC-8這個規格

Keil C

 

#define CRC8_POLYNOMIAL 0x31

#define CRC8_INIT 0xFF

 

uint8_t sensirion_common_generate_crc(const uint8_t* data, uint16_t count) {

    uint16_t current_byte;

    uint8_t crc = CRC8_INIT;

    uint8_t crc_bit;

    /* calculates 8-Bit checksum with given polynomial */

    for (current_byte = 0; current_byte < count; ++current_byte) {

        crc ^= (data[current_byte]);

        for (crc_bit = 8; crc_bit > 0; --crc_bit) {

            if (crc & 0x80)

                crc = (crc << 1) ^ CRC8_POLYNOMIAL;

            else

                crc = (crc << 1);

        }

    }

    return crc;

}

arrow
arrow
    文章標籤
    SCD41 SCD4X CO2 sensor
    全站熱搜
    創作者介紹
    創作者 JL8051 的頭像
    JL8051

    不會的就放這邊

    JL8051 發表在 痞客邦 留言(0) 人氣()