色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【CW32模塊使用】SGP30氣體傳感器

CW32生態(tài)社區(qū) ? 來(lái)源:CW32生態(tài)社區(qū) ? 作者: CW32生態(tài)社區(qū) ? 2024-12-30 10:58 ? 次閱讀

SGP30是一款單一芯片上具有多個(gè)傳感元件的金屬氧化物氣體傳感器,內(nèi)集成4個(gè)氣體傳感元件,具有完全校準(zhǔn)的空氣質(zhì)量輸出信號(hào)。另外,SGP易于集成,能夠?qū)⒔饘傺趸餁怏w傳感器集成到移動(dòng)設(shè)備中,為智能家居、家電和物聯(lián)網(wǎng)應(yīng)用中的環(huán)境監(jiān)測(cè)開(kāi)辟了新的可能性。主要用于甲醛的檢測(cè)!

一、模塊來(lái)源

模塊實(shí)物展示:

wKgZPGdyDF-AHO3MAAAYLPJMsd855.webp


資料下載鏈接:
https://pan.baidu.com/s/16ITjdV34J8K2Wu24sB_iPg
資料提取碼:1vds

二、規(guī)格參數(shù)

工作電壓:3.3V

工作電流:40mA

輸出方式: IIC

管腳數(shù)量:4 Pin

以上信息見(jiàn)廠家資料文件

三、移植過(guò)程

我們的目標(biāo)是將例程移植至CW32F030C8T6開(kāi)發(fā)板上【能夠測(cè)量甲醛】。首先要獲取資料,查看數(shù)據(jù)手冊(cè)應(yīng)如何實(shí)現(xiàn)讀取數(shù)據(jù),再移植至我們的工程。

3.1查看資料

SGP30是一款單一芯片上具有多個(gè)傳感元件的金屬氧化物室內(nèi)氣體傳感器,內(nèi)部集成4個(gè)氣體傳感元件,具有完全校準(zhǔn)的空氣質(zhì)量輸出信號(hào),主要是對(duì)空氣質(zhì)量進(jìn)行檢測(cè)。可以輸出:

TVOC(Total Volatile Organic Compounds,總揮發(fā)性有機(jī)物),量程為0~60000ppb;CO2濃度,量程400~60000ppm。

wKgZO2dyDF-ATQaYAABRMh9bD1U55.webp

SGP30的傳感(MEMS)部分基于金屬氧化物(MOx)納米顆粒的加熱膜。氣敏材料——金屬氧化物顆粒上吸附的氧氣與目標(biāo)氣體發(fā)生反應(yīng),從而釋放出電子。這導(dǎo)致由傳感器測(cè)量的金屬氧化物層的電阻發(fā)生改變。簡(jiǎn)而言之,還原性氣體的出現(xiàn)造成氣敏材料表面氧濃度降低,改變了半導(dǎo)體的電阻(或電導(dǎo)率)。后續(xù)通過(guò)電路(ASIC)部分對(duì)電阻進(jìn)行檢測(cè)、信號(hào)處理與轉(zhuǎn)換等,最終獲取到氣體值。

wKgZPGdyDF-AQirJAAAfuA47lRk29.webp

I2C從機(jī)地址是0X58,由于地址只用到了7bit,最高位未使用,最低位為判斷是讀還是寫(xiě),為0是讀,為1是寫(xiě),所以:

  1. 對(duì)于寫(xiě)SGP30,地址為(0X58 << 1) = 0XB0
  2. 對(duì)于讀SGP30,地址為((0X58 << 1)) | 0X01 = 0XB1

wKgZO2dyDGCAPV_WAABfpqwVJJ084.webp

SGP30的命令都是雙字節(jié)的,先發(fā)高位。有如下命令:

wKgZPGdyDGCABaRpAABzHmZN7wo42.webp

常用的有兩個(gè),一個(gè)是0x2003為初始化SGP30命令,另一個(gè)0x2008為獲取空氣質(zhì)量值命令。

SGP30獲取的數(shù)據(jù)格式為:2位CO2數(shù)據(jù)+1位CO2的CRC校驗(yàn)+2位TVOC數(shù)據(jù)+1位TVOC的CRC校驗(yàn)。模塊上電需要15s左右初始化,在初始化階段讀取的CO2濃度為400ppm,TVOC為0ppd且恒定不變。因此上電后一直讀,直到TVOC不為0并且CO2不為400,SGP30模塊才初始化完成。

初始化完成后剛開(kāi)始讀出數(shù)據(jù)會(huì)波動(dòng)比較大,屬于正常現(xiàn)象,一段時(shí)間后會(huì)逐漸趨于穩(wěn)定。氣體類傳感器比較容易受環(huán)境影響,測(cè)量數(shù)據(jù)出現(xiàn)波動(dòng)是正常的,可以添加濾波函數(shù)進(jìn)行濾波。

3.2引腳選擇

wKgZO2dyDGGAV9wpAABwDObV1oQ57.webp

模塊接線圖

3.3移植至工程

移植步驟中的導(dǎo)入.c和.h文件與【CW32模塊使用】DHT11溫濕度傳感器相同,只是將.c和.h文件更改為bsp_sgp30.c與bsp_sgp30.h。這里不再過(guò)多講述,移植完成后面修改相關(guān)代碼。

在文件bsp_sgp30.c中,編寫(xiě)如下代碼。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-20     LCKFB-LP    first version
 */
#include "bsp_sgp30.h"
#include "stdio.h"

/******************************************************************
 * 函 數(shù) 名 稱:SGP30_GPIO_Init
 * 函 數(shù) 說(shuō) 明:SGP30的引腳初始化
 * 函 數(shù) 形 參:無(wú)
 * 函 數(shù) 返 回:無(wú)
 * 作       者:LC
 * 備       注:只是引腳初始化,真正初始化: SGP30_Init
******************************************************************/
void SGP30_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct; // GPIO初始化結(jié)構(gòu)體

    RCC_SGP30_ENABLE();        // 使能GPIO時(shí)鐘

    GPIO_InitStruct.Pins = GPIO_SDA|GPIO_SCL;   // GPIO引腳
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; // 開(kāi)漏輸出
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;    // 輸出速度高
    GPIO_Init(PORT_SGP30, &GPIO_InitStruct);   // 初始化
}


/******************************************************************
 * 函 數(shù) 名 稱:IIC_Start
 * 函 數(shù) 說(shuō) 明:IIC起始時(shí)序
 * 函 數(shù) 形 參:無(wú)
 * 函 數(shù) 返 回:無(wú)
 * 作       者:LC
 * 備       注:無(wú)
******************************************************************/
void IIC_Start(void)
{
        SDA_OUT();

        SCL(0);
        delay_us(1);

        SDA(1);
        SCL(1);
        delay_us(5);

        SDA(0);
        delay_us(5);
        SCL(0);
        delay_us(5);

}
/******************************************************************
 * 函 數(shù) 名 稱:IIC_Stop
 * 函 數(shù) 說(shuō) 明:IIC停止信號(hào)
 * 函 數(shù) 形 參:無(wú)
 * 函 數(shù) 返 回:無(wú)
 * 作       者:LC
 * 備       注:無(wú)
******************************************************************/
void IIC_Stop(void)
{
        SDA_OUT();

        SCL(0);
        SDA(0);

        SCL(1);
        delay_us(5);
        SDA(1);
        delay_us(5);

}

/******************************************************************
 * 函 數(shù) 名 稱:IIC_Send_Ack
 * 函 數(shù) 說(shuō) 明:主機(jī)發(fā)送應(yīng)答或者非應(yīng)答信號(hào)
 * 函 數(shù) 形 參:0發(fā)送應(yīng)答  1發(fā)送非應(yīng)答
 * 函 數(shù) 返 回:無(wú)
 * 作       者:LC
 * 備       注:無(wú)
******************************************************************/
void IIC_Send_Ack(unsigned char ack)
{
        SDA_OUT();
        SCL(0);
        SDA(0);
        delay_us(5);
        if(!ack) SDA(0);
        else     SDA(1);
        SCL(1);
        delay_us(5);
        SCL(0);
        SDA(1);
}


/******************************************************************
 * 函 數(shù) 名 稱:I2C_WaitAck
 * 函 數(shù) 說(shuō) 明:等待從機(jī)應(yīng)答
 * 函 數(shù) 形 參:無(wú)
 * 函 數(shù) 返 回:0有應(yīng)答  1超時(shí)無(wú)應(yīng)答
 * 作       者:LC
 * 備       注:無(wú)
******************************************************************/
unsigned char I2C_WaitAck(void)
{

        char ack = 0;
        unsigned char ack_flag = 10;
        SCL(0);
        SDA(1);
        SDA_IN();
        delay_us(5);
        SCL(1);
        delay_us(5);

        while( (SDA_GET()==1) && ( ack_flag ) )
        {
                ack_flag--;
                delay_us(5);
        }

        if( ack_flag <= 0 )
        {
                IIC_Stop();
                return 1;
        }
        else
        {
                SCL(0);
                SDA_OUT();
        }
        return ack;
}

/******************************************************************
 * 函 數(shù) 名 稱:Send_Byte
 * 函 數(shù) 說(shuō) 明:寫(xiě)入一個(gè)字節(jié)
 * 函 數(shù) 形 參:dat要寫(xiě)人的數(shù)據(jù)
 * 函 數(shù) 返 回:無(wú)
 * 作       者:LC
 * 備       注:無(wú)
******************************************************************/
void Send_Byte(uint8_t dat)
{
        int i = 0;
        SDA_OUT();
        SCL(0);//拉低時(shí)鐘開(kāi)始數(shù)據(jù)傳輸

        for( i = 0; i < 8; i++ )
        {
                SDA( (dat & 0x80) >> 7 );
                delay_us(1);
                SCL(1);
                delay_us(5);
                SCL(0);
                delay_us(5);
                dat

在文件bsp_sgp30.h中,編寫(xiě)如下代碼。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-20     LCKFB-LP    first version
 */
#ifndef _BSP_SGP30_H_
#define _BSP_SGP30_H_

#include "board.h"


//端口移植
#define RCC_SGP30_ENABLE()      __RCC_GPIOB_CLK_ENABLE()
#define PORT_SGP30              CW_GPIOB

#define GPIO_SDA                GPIO_PIN_8
#define GPIO_SCL                GPIO_PIN_9

//設(shè)置SDA輸出模式
#define SDA_OUT()   {        
                        GPIO_InitTypeDef GPIO_InitStruct;                
                        GPIO_InitStruct.Pins = GPIO_SDA;                 
                        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;      
                        GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;         
                        GPIO_Init(PORT_SGP30, &GPIO_InitStruct);       
                     }
//設(shè)置SDA輸入模式
#define SDA_IN()    {        
                        GPIO_InitTypeDef GPIO_InitStruct;                
                        GPIO_InitStruct.Pins = GPIO_SDA;                 
                        GPIO_InitStruct.Mode = GPIO_MODE_INPUT;         
                        GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;         
                        GPIO_Init(PORT_SGP30, &GPIO_InitStruct);       
                    }
//獲取SDA引腳的電平變化
#define SDA_GET()       GPIO_ReadPin(PORT_SGP30, GPIO_SDA)
//SDA與SCL輸出
#define SDA(x)          GPIO_WritePin(PORT_SGP30, GPIO_SDA, (x?GPIO_Pin_SET:GPIO_Pin_RESET) )
#define SCL(x)          GPIO_WritePin(PORT_SGP30, GPIO_SCL, (x?GPIO_Pin_SET:GPIO_Pin_RESET) )

void SGP30_Init(void);
uint32_t SGP30_Read(void);
void SGP30_Write_cmd(uint8_t a, uint8_t b);

#endif

四、移植驗(yàn)證

在自己工程中的main主函數(shù)中,編寫(xiě)如下。

/*
 * Change Logs:
 * Date           Author       Notes
 * 2024-06-20     LCKFB-LP    first version
 */
#include "board.h"
#include "stdio.h"
#include "bsp_uart.h"
#include "bsp_sgp30.h"

int32_t main(void)
{
    board_init();        // 開(kāi)發(fā)板初始化

    uart1_init(115200);        // 串口1波特率115200

    SGP30_Init();
    delay_ms(100);

    while (1)
    {
        uint32_t CO2Data, TVOCData;  //定義CO2濃度變量與TVOC濃度變量
        uint32_t sgp30_dat;          //定義SGP30讀取到的數(shù)據(jù)

        SGP30_Write_cmd(0x20,0x08);
        sgp30_dat = SGP30_Read();                  //讀取SGP30的值
        CO2Data = (sgp30_dat & 0xffff0000) >> 16;  //獲取CO2的值
        TVOCData = sgp30_dat & 0x0000ffff;         //獲取TVOC的值
        printf("CO2 : %0.2drnTVOC : %0.2drn",CO2Data,TVOCData);
        delay_ms(1000);
    }
}

上電效果:

wKgZPGdyDGKAM6cCAACJ0qqGX_g72.webp

模塊移植成功案例代碼:

鏈接:https://pan.baidu.com/s/1oAz63Y8tBthuKPTtWsNcxw?pwd=LCKF

提取碼:LCKF

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 氣體傳感器
    +關(guān)注

    關(guān)注

    14

    文章

    546

    瀏覽量

    37711
  • CW32
    +關(guān)注

    關(guān)注

    1

    文章

    210

    瀏覽量

    664
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    CW32移植Free-RTOS】CW32開(kāi)發(fā)者扶持計(jì)劃

    CW32配置Free-RTOS全過(guò)程,CW32開(kāi)發(fā)者扶持計(jì)劃
    的頭像 發(fā)表于 04-18 09:38 ?6167次閱讀
    【<b class='flag-5'>CW32</b>移植Free-RTOS】<b class='flag-5'>CW32</b>開(kāi)發(fā)者扶持計(jì)劃

    SGP30芯片的開(kāi)發(fā)例程

    給大家講解以下SGP30這款芯片的開(kāi)發(fā)例程。我們首先看一下芯片手冊(cè)。我們可以從電氣屬性看到供電信息。各個(gè)引腳的功能圖。芯片手冊(cè)還給出了推薦電路圖,這樣我們就可以將芯片電路設(shè)計(jì)出來(lái)了。典型的IIC總線
    發(fā)表于 08-18 08:25

    萌新求助,求SGP30芯片的開(kāi)發(fā)例程

    萌新求助,求SGP30芯片的開(kāi)發(fā)例程
    發(fā)表于 11-23 07:18

    如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外設(shè)讀取環(huán)境光強(qiáng)度傳感器數(shù)據(jù)

    的是STM32L4的開(kāi)發(fā)板(BearPi)。SGP30傳感器模塊SGP30是一款單一芯片上具有多個(gè)傳感元件的金屬氧化物室內(nèi)
    發(fā)表于 02-14 06:07

    求教SGP30模塊

    各位大神誰(shuí)有淘寶上賣(mài)的SGP30模塊的原理圖啊,寫(xiě)論文用,商家說(shuō)必須下單好評(píng)才給
    發(fā)表于 05-07 16:55

    最新款氣體傳感器SGP30逆向分析

    氣體的探測(cè)能力以及更低的單位成本。氣體傳感未來(lái)將無(wú)處不在,這為采用MEMS技術(shù)的微型化氣體傳感器件創(chuàng)造了無(wú)限商機(jī)。 Se
    的頭像 發(fā)表于 04-17 11:44 ?5w次閱讀

    盛思銳即將推出一款多氣體溫濕度傳感模塊SVM30

    據(jù)麥姆斯咨詢報(bào)道,環(huán)境傳感器專家盛思銳即將推出一款多氣體溫濕度傳感模塊SVM30,包含一個(gè)SGP30
    發(fā)表于 05-21 08:48 ?1455次閱讀

    基于STM32的SGP30芯片開(kāi)發(fā)例程

    給大家講解以下SGP30這款芯片的開(kāi)發(fā)例程。我們首先看一下芯片手冊(cè)。我們可以從電氣屬性看到供電信息。各個(gè)引腳的功能圖。芯片手冊(cè)還給出了推薦電路圖,這樣我們就可以將芯片電路設(shè)計(jì)出來(lái)了。典型的IIC總線
    發(fā)表于 12-02 17:51 ?44次下載
    基于STM32的<b class='flag-5'>SGP30</b>芯片開(kāi)發(fā)例程

    STM32CubeMX | 29-使用硬件I2C讀取甲醛傳感器SGP30

    的是STM32L4的開(kāi)發(fā)板(BearPi)。SGP30傳感器模塊SGP30是一款單一芯片上具有多個(gè)傳感元件的金屬氧化物室內(nèi)
    發(fā)表于 12-09 10:06 ?22次下載
    STM32CubeMX | 29-使用硬件I2C讀取甲醛<b class='flag-5'>傳感器</b><b class='flag-5'>SGP30</b>

    基于STM32的空氣質(zhì)量傳感器SGP30開(kāi)源分享

    Python用于監(jiān)控PC上的傳感器數(shù)據(jù)。帶 SGP30 傳感器的 STM32F401RE Nucleo 板
    發(fā)表于 07-07 16:02 ?5次下載
    基于STM32的空氣質(zhì)量<b class='flag-5'>傳感器</b><b class='flag-5'>SGP30</b>開(kāi)源分享

    cw32和gd32的區(qū)別

    推出的一款32位微控制,它是WCH唯一以ARM Cortex-M3內(nèi)核為基礎(chǔ)的產(chǎn)品系列,Cortex-M3內(nèi)核是ARM公司的經(jīng)典內(nèi)核之一,性能穩(wěn)定,功耗低。CW32系列的主頻高達(dá)72MHz,內(nèi)置了
    的頭像 發(fā)表于 08-16 11:15 ?2005次閱讀

    基于CW32的RC522刷卡模塊的應(yīng)用

    基于CW32的RC522刷卡模塊的應(yīng)用
    的頭像 發(fā)表于 11-02 14:53 ?1140次閱讀
    基于<b class='flag-5'>CW32</b>的RC522刷卡<b class='flag-5'>模塊</b>的應(yīng)用

    基于CW32的物聯(lián)網(wǎng)應(yīng)用

    CW32】基于CW32的物聯(lián)網(wǎng)應(yīng)用
    的頭像 發(fā)表于 11-02 15:55 ?812次閱讀
    基于<b class='flag-5'>CW32</b>的物聯(lián)網(wǎng)應(yīng)用

    CW32單片機(jī)在智能馬桶的應(yīng)用介紹

    和調(diào)節(jié)。本文將介紹CW32單片機(jī)在智能馬桶的詳細(xì)應(yīng)用。圖:CW32的智能馬桶控制板CW32單片機(jī)在智能馬桶的應(yīng)用介紹1.溫度感應(yīng)與控制智能馬桶內(nèi)設(shè)有溫度傳感器,通
    的頭像 發(fā)表于 12-20 10:09 ?632次閱讀
    <b class='flag-5'>CW32</b>單片機(jī)在智能馬桶的應(yīng)用介紹

    CW32模塊使用】MQ-4甲烷檢測(cè)傳感器

    轉(zhuǎn)換為與該氣體濃度相對(duì)應(yīng)的輸出信號(hào)。MQ-4氣體傳感器中對(duì)甲烷的靈敏度高,對(duì)丙烷,丁烷也有較好的靈敏度。這種傳感器可檢測(cè)多種可燃性氣體,特別
    的頭像 發(fā)表于 12-30 11:36 ?100次閱讀
    【<b class='flag-5'>CW32</b><b class='flag-5'>模塊</b>使用】MQ-4甲烷檢測(cè)<b class='flag-5'>傳感器</b>
    主站蜘蛛池模板: 亚洲乱码国产一区三区| 久久精品国产eeuss| 护士被老头边摸边吃奶的视频| 美国caopo超碰在线视频| 色欲天天天综合网免费| 在线观看qvod| 高中生被C到爽哭视频免费| 久久 这里只精品 免费| 日本欧美久久久久免费播放网| 一二三四在线视频社区8| 国产成人精品系列在线观看| 美女扒开尿口直播| 亚洲精品无码国产爽快A片百度| 被老总按在办公桌吸奶头| 久久精品日本免费线| 无限资源日本2019版免费| a圾片目录大全| 精品一区二区三区高清免费观看 | 国产亚洲tv在线观看| 欧美 日韩 无码 有码 在线| 亚洲中文字幕乱码熟女在线| 国产成人免费在线观看| 嗯啊不要老师| 在线观看成人免费| 国产偷国产偷亚洲高清人乐享| 日本另类z0zxhd| 91popny蜜桃臀| 久久精品热线免费| 亚洲免费人成 久久| 国产精品女上位在线观看| 秋霞影院福利电影| 99久久免费视频6| 快播dvd吧| 伊人久久大香线蕉资源| 国语自产一区第二页| 无码天堂亚洲内射精品课堂| 纯肉高H种马艳遇风流多| 欧美人与动牲交A精品| 97国产精品人妻无码免费| 久久综合久久伊人| 伊人久久中文大香线蕉综合|