国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MQ2煙霧傳感器 - STM32F103C8T6-HAL庫

這篇具有很好參考價值的文章主要介紹了MQ2煙霧傳感器 - STM32F103C8T6-HAL庫。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

具體原理參考說明書,代碼依據(jù)正點原子

ADC.c 文件

/**
 ****************************************************************************************************
 * @file        adc.c
 * @author      正點原子團隊(ALIENTEK)
 * @version     V1.0
 * @date        2020-04-23
 * @brief       ADC 驅(qū)動代碼
 * @license     Copyright (c) 2020-2032, 廣州市星翼電子科技有限公司
 ****************************************************************************************************
 * @attention
 *
 * 實驗平臺:正點原子 STM32F103開發(fā)板
 * 在線視頻:www.yuanzige.com
 * 技術(shù)論壇:www.openedv.com
 * 公司網(wǎng)址:www.alientek.com
 * 購買地址:openedv.taobao.com
 *
 * 修改說明
 * V1.0 20200423
 * 第一次發(fā)布
 *
 ****************************************************************************************************
 */

#include "adc.h"
#include "./SYSTEM/delay/delay.h"


ADC_HandleTypeDef g_adc_handle;   /* ADC句柄 */

/**
 * @brief       ADC初始化函數(shù)
 *   @note      本函數(shù)支持ADC1/ADC2任意通道, 但是不支持ADC3
 *              我們使用12位精度, ADC采樣時鐘=12M, 轉(zhuǎn)換時間為: 采樣周期 + 12.5個ADC周期
 *              設(shè)置最大采樣周期: 239.5, 則轉(zhuǎn)換時間 = 252 個ADC周期 = 21us
 * @param       無
 * @retval      無
 */
void adc_init(void)
{
    g_adc_handle.Instance = ADC_ADCX;                        /* 選擇哪個ADC */
    g_adc_handle.Init.DataAlign = ADC_DATAALIGN_RIGHT;       /* 數(shù)據(jù)對齊方式:右對齊 */
    g_adc_handle.Init.ScanConvMode = ADC_SCAN_DISABLE;       /* 非掃描模式,僅用到一個通道 */
    g_adc_handle.Init.ContinuousConvMode = DISABLE;          /* 關(guān)閉連續(xù)轉(zhuǎn)換模式 */
    g_adc_handle.Init.NbrOfConversion = 1;                   /* 賦值范圍是1~16,本實驗用到1個規(guī)則通道序列 */
    g_adc_handle.Init.DiscontinuousConvMode = DISABLE;       /* 禁止規(guī)則通道組間斷模式 */
    g_adc_handle.Init.NbrOfDiscConversion = 0;               /* 配置間斷模式的規(guī)則通道個數(shù),禁止規(guī)則通道組間斷模式后,此參數(shù)忽略 */
    g_adc_handle.Init.ExternalTrigConv = ADC_SOFTWARE_START; /* 觸發(fā)轉(zhuǎn)換方式:軟件觸發(fā) */
    HAL_ADC_Init(&g_adc_handle);                             /* 初始化 */

    HAL_ADCEx_Calibration_Start(&g_adc_handle);              /* 校準(zhǔn)ADC */
}

/**
 * @brief       ADC底層驅(qū)動,引腳配置,時鐘使能
                此函數(shù)會被HAL_ADC_Init()調(diào)用
 * @param       hadc:ADC句柄
 * @retval      無
 */
void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc)
{
    if(hadc->Instance == ADC_ADCX)
    {
        GPIO_InitTypeDef gpio_init_struct;
        RCC_PeriphCLKInitTypeDef adc_clk_init = {0};
        
        ADC_ADCX_CHY_CLK_ENABLE();                                /* 使能ADCx時鐘 */
        ADC_ADCX_CHY_GPIO_CLK_ENABLE();                           /* 開啟GPIO時鐘 */

        /* 設(shè)置ADC時鐘 */
        adc_clk_init.PeriphClockSelection = RCC_PERIPHCLK_ADC;    /* ADC外設(shè)時鐘 */
        adc_clk_init.AdcClockSelection = RCC_ADCPCLK2_DIV6;       /* 分頻因子6時鐘為72M/6=12MHz */
        HAL_RCCEx_PeriphCLKConfig(&adc_clk_init);                 /* 設(shè)置ADC時鐘 */

        /* 設(shè)置AD采集通道對應(yīng)IO引腳工作模式 */
        gpio_init_struct.Pin = ADC_ADCX_CHY_GPIO_PIN;             /* ADC通道IO引腳 */
        gpio_init_struct.Mode = GPIO_MODE_ANALOG;                 /* 模擬 */
        HAL_GPIO_Init(ADC_ADCX_CHY_GPIO_PORT, &gpio_init_struct);
    }
}

/**
 * @brief       設(shè)置ADC通道采樣時間
 * @param       adcx : adc句柄指針,ADC_HandleTypeDef
 * @param       ch   : 通道號, ADC_CHANNEL_0~ADC_CHANNEL_17
 * @param       stime: 采樣時間  0~7, 對應(yīng)關(guān)系為:
 *   @arg       ADC_SAMPLETIME_1CYCLE_5, 1.5個ADC時鐘周期        ADC_SAMPLETIME_7CYCLES_5, 7.5個ADC時鐘周期
 *   @arg       ADC_SAMPLETIME_13CYCLES_5, 13.5個ADC時鐘周期     ADC_SAMPLETIME_28CYCLES_5, 28.5個ADC時鐘周期
 *   @arg       ADC_SAMPLETIME_41CYCLES_5, 41.5個ADC時鐘周期     ADC_SAMPLETIME_55CYCLES_5, 55.5個ADC時鐘周期
 *   @arg       ADC_SAMPLETIME_71CYCLES_5, 71.5個ADC時鐘周期     ADC_SAMPLETIME_239CYCLES_5, 239.5個ADC時鐘周期
 * @param       rank: 多通道采集時需要設(shè)置的采集編號,
                假設(shè)你定義channle1的rank=1,channle2 的rank=2,
                那么對應(yīng)你在DMA緩存空間的變量數(shù)組AdcDMA[0] 就i是channle1的轉(zhuǎn)換結(jié)果,AdcDMA[1]就是通道2的轉(zhuǎn)換結(jié)果。 
                單通道DMA設(shè)置為 ADC_REGULAR_RANK_1
 *   @arg       編號1~16:ADC_REGULAR_RANK_1~ADC_REGULAR_RANK_16
 * @retval      無
 */
void adc_channel_set(ADC_HandleTypeDef *adc_handle, uint32_t ch, uint32_t rank, uint32_t stime)
{
    ADC_ChannelConfTypeDef adc_ch_conf;
    
    adc_ch_conf.Channel = ch;                            /* 通道 */
    adc_ch_conf.Rank = rank;                             /* 序列 */
    adc_ch_conf.SamplingTime = stime;                    /* 采樣時間 */
    HAL_ADC_ConfigChannel(adc_handle, &adc_ch_conf);     /* 通道配置 */
}

/**
 * @brief       獲得ADC轉(zhuǎn)換后的結(jié)果
 * @param       ch: 通道值 0~17,取值范圍為:ADC_CHANNEL_0~ADC_CHANNEL_17
 * @retval      無
 */
uint32_t adc_get_result(uint32_t ch)
{
    adc_channel_set(&g_adc_handle , ch, ADC_REGULAR_RANK_1, ADC_SAMPLETIME_239CYCLES_5);    /* 設(shè)置通道,序列和采樣時間 */

    HAL_ADC_Start(&g_adc_handle);                            /* 開啟ADC */
    HAL_ADC_PollForConversion(&g_adc_handle, 10);            /* 輪詢轉(zhuǎn)換 */
    return (uint16_t)HAL_ADC_GetValue(&g_adc_handle);        /* 返回最近一次ADC1規(guī)則組的轉(zhuǎn)換結(jié)果 */
}

/**
 * @brief       獲取通道ch的轉(zhuǎn)換值,取times次,然后平均
 * @param       ch      : 通道號, 0~17
 * @param       times   : 獲取次數(shù)
 * @retval      通道ch的times次轉(zhuǎn)換結(jié)果平均值
 */
uint32_t adc_get_result_average(uint32_t ch, uint8_t times)
{
    uint32_t temp_val = 0;
	uint32_t i = 0;
    uint8_t t;

    for (t = 0; t < times; t++)     /* 獲取times次數(shù)據(jù) */
    {
        temp_val += adc_get_result(ch);
        HAL_Delay(5);
    }
	i = temp_val / times;        /* 返回平均值 */
    return i;

}









ADC.h文件

/**
 ****************************************************************************************************
 * @file        adc.h
 * @author      正點原子團隊(ALIENTEK)
 * @version     V1.0
 * @date        2020-04-23
 * @brief       ADC 驅(qū)動代碼
 * @license     Copyright (c) 2020-2032, 廣州市星翼電子科技有限公司
 ****************************************************************************************************
 * @attention
 *
 * 實驗平臺:正點原子 STM32F103開發(fā)板
 * 在線視頻:www.yuanzige.com
 * 技術(shù)論壇:www.openedv.com
 * 公司網(wǎng)址:www.alientek.com
 * 購買地址:openedv.taobao.com
 *
 * 修改說明
 * V1.0 20200423
 * 第一次發(fā)布
 *
 ****************************************************************************************************
 */

#ifndef __ADC_H
#define __ADC_H

#include "stm32f1xx.h"             // Device header


/******************************************************************************************/
/* ADC及引腳 定義 */

#define ADC_ADCX_CHY_GPIO_PORT              GPIOA
#define ADC_ADCX_CHY_GPIO_PIN               GPIO_PIN_1 
#define ADC_ADCX_CHY_GPIO_CLK_ENABLE()      do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0)  /* PA口時鐘使能 */

#define ADC_ADCX                            ADC1 
#define ADC_ADCX_CHY                        ADC_CHANNEL_1                                /* 通道Y,  0 <= Y <= 17 */ 
#define ADC_ADCX_CHY_CLK_ENABLE()           do{ __HAL_RCC_ADC1_CLK_ENABLE(); }while(0)   /* ADC1 時鐘使能 */

/******************************************************************************************/

void adc_init(void);                                                /* ADC初始化 */
void adc_channel_set(ADC_HandleTypeDef *adc_handle, uint32_t ch,uint32_t rank, uint32_t stime); /* ADC通道設(shè)置 */
uint32_t adc_get_result(uint32_t ch);                               /* 獲得某個通道值  */
uint32_t adc_get_result_average(uint32_t ch, uint8_t times);        /* 得到某個通道給定次數(shù)采樣的平均值 */

#endif 















main函數(shù)中的調(diào)用文章來源地址http://www.zghlxwxcb.cn/news/detail-858511.html

adc_init();  	/* 初始化ADC */


while(1)
{
    adcx = adc_get_result_average(ADC_ADCX_CHY, 10);    /* 獲取通道5的轉(zhuǎn)換值,10次取平均 */
    temp = (float)adcx * (3.3 / 4096);       /* 獲取計算后的帶小數(shù)的實際電壓值,比如3.1111 */
    // 整數(shù)部分
    adcx = temp;                             /* 賦值整數(shù)部分給adcx變量,因為adcx為u16整形 */

    // 小數(shù)部分
    temp -= adcx;         /* 把已經(jīng)顯示的整數(shù)部分去掉,留下小數(shù)部分,比如3.1111-3=0.1111 */
    temp *= 1000;      /* 小數(shù)部分乘以1000,例如:0.1111就轉(zhuǎn)換為111.1,相當(dāng)于保留三位小數(shù)。 */
}

到了這里,關(guān)于MQ2煙霧傳感器 - STM32F103C8T6-HAL庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • STM32 F103C8T6學(xué)習(xí)筆記13:IIC通信—AHT10溫濕度傳感器模塊

    STM32 F103C8T6學(xué)習(xí)筆記13:IIC通信—AHT10溫濕度傳感器模塊

    今日學(xué)習(xí)一下這款A(yù)HT10 溫濕度傳感器模塊,給我的OLED手環(huán)添加上測溫濕度的功能。 文章提供源碼、測試工程下載、測試效果圖。 目錄 AHT10溫濕度傳感器: 特性: 連接方式: 適用場所范圍: 程序設(shè)計: 設(shè)計目標(biāo): ?程序設(shè)計注意點: AHT10代碼: ?主函數(shù)代碼: 測試效果:

    2024年02月11日
    瀏覽(26)
  • 51單片機 DHT11溫濕度傳感器 MQ2傳感器

    51單片機 DHT11溫濕度傳感器 MQ2傳感器

    目錄 前言 程序思路 DHT11 一、DHT11基礎(chǔ)儲備 ?二、接口說明 三、協(xié)議及數(shù)據(jù)格式 ?編輯 四、DHT11代碼 MQ-2煙霧傳感器 一、MQ-2煙霧傳感器介紹 二、工作原理 三、時序配置 四、指令配置 ?編輯 五、代碼 LCD1602 一、LCD1602介紹 二、LCD1602指令介紹??編輯 三、LCD1602代碼 ?HC-05 一

    2024年02月04日
    瀏覽(19)
  • STM32開發(fā)——ADC(煙霧傳感器)

    STM32開發(fā)——ADC(煙霧傳感器)

    目錄 1.ADC簡介 2.項目簡介 3.CubeMX設(shè)置 4.函數(shù)代碼 作用:用于讀取電壓值,然后轉(zhuǎn)換為數(shù)字量傳給單片機,單片機再通過計算,可以得到電壓值。 ?ADC的性能指標(biāo) 量程:能測量的電壓范圍 分辨率:ADC能辨別的最小模擬量,通常以輸出二進制數(shù)的位數(shù)表示,比如:8、10、12、1

    2024年02月09日
    瀏覽(18)
  • STM32學(xué)習(xí)記錄——煙霧傳感器的使用

    STM32學(xué)習(xí)記錄——煙霧傳感器的使用

    文章目錄 前言 一、學(xué)習(xí)目的 二、模塊介紹 三、代碼記錄 總結(jié) ? ? ? ?這次記錄一下煙霧傳感器的學(xué)習(xí),由于煙霧傳感器的資料比較雜,算法比較多,對我來說也比較難,所以我的代碼中算法部分是不太具有參考價值,但是也可以做到隨煙霧濃度的變化數(shù)值呈線性相關(guān),以

    2024年02月09日
    瀏覽(25)
  • MQ-2煙霧濃度傳感器

    MQ-2煙霧濃度傳感器

    本實驗將采集到的傳感器數(shù)據(jù)利用ADC轉(zhuǎn)換,將轉(zhuǎn)換后的電壓值顯示在串口調(diào)試助手上 MQ-2煙霧傳感器所使用的氣敏材料是在清潔空氣中電導(dǎo)率較低的二氧化錫(SnO2)。當(dāng)煙霧傳感器所處環(huán)境中存在可燃?xì)怏w時,煙霧傳感器的電導(dǎo)率隨空氣中可燃?xì)怏w濃度的增加而增大。使用簡單

    2024年02月05日
    瀏覽(21)
  • 基于STM32F103C8T6單片機的DHT11溫濕度傳感器與OLED顯示屏實時動態(tài)數(shù)據(jù)監(jiān)測系統(tǒng)設(shè)計

    基于STM32F103C8T6單片機的DHT11溫濕度傳感器與OLED顯示屏實時動態(tài)數(shù)據(jù)監(jiān)測系統(tǒng)設(shè)計

    標(biāo)題: 摘要: 本文提出了一種利用STM32F103C8T6微控制器,結(jié)合DHT11數(shù)字溫濕度傳感器和OLED顯示屏實現(xiàn)環(huán)境溫濕度實時、直觀顯示的方法。該系統(tǒng)通過低功耗且精確的DHT11傳感器獲取環(huán)境溫濕度信息,并借助于STM32F103C8T6強大的處理能力和I/O資源進行數(shù)據(jù)讀取、解析以及控制OLE

    2024年01月19日
    瀏覽(30)
  • STM32—ADC詳解入門(ADC讀取煙霧傳感器的值)

    STM32—ADC詳解入門(ADC讀取煙霧傳感器的值)

    目錄 一、ADC是什么 二、ADC的性能指標(biāo) 三、ADC特性 四、ADC通道 五、ADC轉(zhuǎn)換順序 六、ADC觸發(fā)方式 七、ADC轉(zhuǎn)化時間 八、ADC轉(zhuǎn)化模式 九、實驗(使用ADC讀取煙霧傳感器的值) 1、配置 2、代碼 ????????ADC是Analog-to-DigitalConverter的縮寫。指模/數(shù)轉(zhuǎn)換器或者模擬/數(shù)字轉(zhuǎn)換器。是指

    2024年02月11日
    瀏覽(33)
  • 【STM32】MQ3酒精濃度傳感器

    【STM32】MQ3酒精濃度傳感器

    ??????酒精濃度實驗?????? mq3酒精濃度傳感期 MQ3酒精濃度傳感器是一種常用的氣體傳感器,主要用于檢測空氣中的酒精濃度,MQ3傳感器可以檢測到多種酒精,如乙醇、丙醇、異丙醇等。 其工作原理基于當(dāng)目標(biāo)氣體進入傳感器時,會與敏感元件表面的硫酸銅反應(yīng)

    2024年04月11日
    瀏覽(22)
  • STM32讀取MQ2煙霧濃度數(shù)據(jù)判斷煙霧是否超標(biāo)

    STM32讀取MQ2煙霧濃度數(shù)據(jù)判斷煙霧是否超標(biāo)

    MQ2傳感器是一種可探測多種氣體的傳感器,常用于監(jiān)測煙霧、液化氣、丙酮、乙醇、甲醛、天然氣等有害氣體。MQ2傳感器基于半導(dǎo)體敏感元件,通過檢測氣體中有害物質(zhì)的濃度變化來實現(xiàn)氣體檢測。 MQ2傳感器具有以下特點: 可靠性高:采用優(yōu)質(zhì)半導(dǎo)體敏感元件,響應(yīng)速度快

    2024年02月16日
    瀏覽(24)
  • 通過STM32內(nèi)部ADC將煙霧傳感器發(fā)送的信號值顯示在OLED上

    通過STM32內(nèi)部ADC將煙霧傳感器發(fā)送的信號值顯示在OLED上

    一.CubeMX配置 首先我們在CubeMX配置ADC1, 設(shè)置一個定時器TIM2定時1s采樣一次以及刷新一次OLED, 打開IIC用于驅(qū)動OLED顯示屏。 二.程序 在Keil5中添加好oled的顯示庫,以及用來顯示的函數(shù)、初始化函數(shù)、清屏函數(shù)等。在主程序中初始化oled,并將其清屏。 在定時器中斷回調(diào)函數(shù)中對A

    2024年02月15日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包