【STM32Cube_10】使用ADC读取气体传感器数据(MQ-2)

发布者:温暖微笑最新更新时间:2021-07-21 来源: eefocus关键字:STM32Cube  ADC  MQ-2 手机看文章 扫描二维码
随时随地手机看文章

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的ADC外设,读取MQ-2气体传感器的数据并通过串口发送。


1. 准备工作

硬件准备

  • 开发板
    首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi):
    mark

  • MQ-2模块
    MQ-2气体传感器一般用于家庭和工厂的气体泄漏监测装置,适用于液化气、丁烷、丙烷、甲烷、酒精、氢气、烟雾等的探测,如图:
    mark

MQ-2的原理图如下:
mark

软件准备

  • 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码;

  • 准备一个串口调试助手,这里我使用的是Serial Port Utility;

 

选择芯片型号

打开STM32CubeMX,打开MCU选择器:
mark

搜索并选中芯片STM32L431RCT6:
mark

配置时钟源

  • 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC;

  • 如果使用默认内部时钟(HSI),这一步可以略过;

这里我都使用外部时钟:
mark

配置串口

小熊派开发板板载ST-Link并且虚拟了一个串口,原理图如下:

mark

这里我将开关拨到AT-MCU模式,使PC的串口与USART1之间连接。

接下来开始配置USART1:

mark

配置ADC

知识小卡片 —— ADC

ADC全称 Analog-to-Digital Converter,即模拟-数字转换器,可以将连续变化的模拟信号转换为离散的数字信号,进而使用数字电路进行处理,称之为数字信号处理。

STM32L431xx 系列有 1 个 ADC,ADC 分辨率高达 12 位,每个 ADC 具有多达 20 个的采集
通道,这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。 ADC 的结果可以左对齐
或右对齐方式存储在 16 位数据寄存器中。

STM32L431 的 ADC 最大的转换速率为 5.33Mhz,也就是转换时间为 0.188us(12 位分辨率
时),ADC 的转换时间与 AHB 总线时钟频率无关。

知识小卡片结束啦~对ADC有没有了解呢?

确定ADC通道

查看小熊派E53接口的原理图:
mark

配置ADC(单次转换模式)

首先选择ADC1,开启通道3:
mark

接下来是对ADC的设置,这里我们保持默认即可:
mark

最后设置ADC的转换规则:
mark

其余的一些设置保持默认即可。

配置时钟树

STM32L4的最高主频到80M,所以配置PLL,最后使HCLK = 80Mhz即可:
mark

mark

mark

生成工程设置

mark

代码生成设置

最后设置生成独立的初始化文件:
mark

生成代码

点击GENERATE CODE即可生成MDK-V5工程:
mark

3. 在MDK中编写、编译、下载用户代码

重定向printf( )函数

参考:【STM32Cube】(八)基于串口发送函数实现printf()

编写读取数据的测试代码

修改main函数如下:

int main(void)
{
uint16_t smoke_value = 0;

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();
MX_ADC1_Init();
MX_USART1_UART_Init();

while (1)
{
HAL_ADC_Start(&hadc1); //启动ADC单次转换
HAL_ADC_PollForConversion(&hadc1, 50); //等待ADC转换完成
smoke_value = HAL_ADC_GetValue(&hadc1); //读取ADC转换数据
printf("smoke_value = %dn", smoke_value);
HAL_Delay(500);
}
}

mark

至此,我们已经学会如何使用ADC读取MQ-2传感器的值,下一节将讲述如何使用通用定时器闪烁LED。

关键字:STM32Cube  ADC  MQ-2 引用地址:【STM32Cube_10】使用ADC读取气体传感器数据(MQ-2)

上一篇:【STM32Cube_09】重定向printf函数到串口输出的多种方法
下一篇:【STM32Cube_11】使用通用定时器闪烁LED

推荐阅读最新更新时间:2024-11-10 11:28

STM32F10X ADC原理详解(STM32F103ZET6)
STM32ADC的工作原理 模/数转换器 STM32F10x ADC特点 12位逐次逼近型的模拟数字转换器。 最多带3个ADC控制器 最多支持18个通道,可最多测量16个外部和2个内部信号源。 支持单次和连续转换模式 转换结束,注入转换结束,和发生模拟看门狗事件时产生中断。 通道0到通道n的自动扫描模式 自动校准 采样间隔可以按通道编程 规则通道和注入通道均有外部触发选项 转换结果支持左对齐或右对齐方式存储在16位数据寄存器 ADC转换时间:最大转换速率 1us。(最大转换速度为1MHz,在ADCCLK=14M,采样周期为1.5个ADC时钟下得到。) ADC供电要求:2.4V-3.6V ADC输入范围:VREF- ≤ VIN
[单片机]
STM32F10X <font color='red'>ADC</font>原理详解(STM32F103ZET6)
mini2440驱动分析之ADC
1 . ADC_DEV 结构 typedef struct { wait_queue_head_t wait; int channel; int prescale; }ADC_DEV; wait 等待队列,进程读取设备,如果没有转换数据,就会睡眠在此队列上 channel 转换通道,s3c2440有八通道的ad,但是只有四个通道AIN 可以使用,其他四个用于触摸屏 prescale 计算转换速率的时候使用 2 . 变量 OwnADC 表示是否拥有ADC信号量 ev_adc 使能ADC标志,用于等待队列的等待条件 adc_data 转换读出的数据 3 模块初始化,dev_init(
[单片机]
没有优质探头,示波器 ADC 分辨率再高也无意义
人们常有这样的误解,以为测量准确性只取决于仪器的规格,例如屏幕上显示的波形数量。然而,影响实际准确性的因素要复杂得多。准确性与测量设置密切相关,取决于测量设置保持的被测信号完整性。任何测量的有效性最终取决于整个测量过程中信号完整性的保持情况。 为了实现准确的信号测量,示波器必须通过探头连接到被测电子电路。 探头发挥着重要作用,能够确保到达示波器的信号无杂质、不失真,且尽可能接近电路中流通的原始信号 。如果没有适当的信号调节,即使是高分辨率示波器,也会产生误导性结果,从而降低示波器在实际测量场景中发挥的作用。 示波器准确性:ADC 分辨率不是唯一影响因素 影响示波器信号测量准确度的不是某一个参数。最常见的错误是,人们将示
[测试测量]
没有优质探头,示波器 <font color='red'>ADC</font> 分辨率再高也无意义
ADC模数转换器简介
本文将介绍STM32F407的模数转换功能ADC ①ADC的概念及作用 ②ADC的性能指标及STM32F4-ADC的特性 ③ADC的功能框图 ④ADC的功能框图的详细介绍 ⑤ADC的工作模式 ①ADC的概念及作用 ADC是analog to digtal converter的缩写,指的是模数转换器,模数转换器可以将连续的模拟信号转换为离散的数字信号。 ADC的作用:采集传感器的数据、电压、电流等。 ②ADC的性能指标及STM32F4-ADC的特性 ADC的性能指标主要有以下几个方面: 量程:能测量的电压范围; 分辨率:ADC的分辨率常以输出二进制的位数表示,位数越多分辨率越高、相应的转换时间会越长; 转换时间:在模拟输入电压符合输
[单片机]
<font color='red'>ADC</font><font color='red'>模数转换器</font>简介
1.9.4_ADC和触摸屏_S3C2440触摸屏接口_P
从上节内容可以知道,检测触摸屏按下和计算触点坐标是通过S1到S5五个开关来完成的,通过控制五个开关在不同时候的关断与闭合就可以得到触点的XY坐标。 通过2440的芯片手册来查看触摸屏是怎么工作的。 首先,通过8:1的多路选择器我们可以选择控制哪路通道。 然后是触摸屏的接口模式: 正常转换模式。用于常规的ADC转换,通过设置ADCCON来初始化ADC,通过读写ADCDAT0来完成转换。 分离的X/Y转换模式。逐个测量X/Y坐标,X坐标保存在ADCDAT0,并且会产生中断,Y坐标保存在ADCDAT1中,同样也会产生一个中断。 自动的X/Y转换模式。不需要单独的读取X/Y坐标,可以一次性的测量X/Y坐标然后一起读取,只需
[单片机]
1.9.4_<font color='red'>ADC</font>和触摸屏_S3C2440触摸屏接口_P
PIC单片机ADC的简单应用
#include pic.h __CONFIG(0X1F71); #define uchar unsigned char #define uint unsigned int const uchar Tab = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; const uchar Tab1 = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//带小数点的代码 void DisPlay(uchar date1,uchar date2,uchar date3,uchar date4); void DelayMS(uin
[单片机]
MSP430学习笔记2-ADC12
开发版型号:SEED—MSP430F5529A 开发工具 :CCS 5.4v 以下内容是CCS中ADC12操作的一些简单的demo,现整理如下: 有关MSP430F5529芯片ADC12相关资料,可参考《MSP430x5xx and MSP430x6xx Family User's Guide (Rev. M)——Chapter 28 ADC12_A》 1:demo描述 Description: A single sample is made on A0 with reference to AVcc. Software sets ADC12SC to start sample and conver
[单片机]
MSP430学习笔记2-<font color='red'>ADC</font>12
MSP430 中ADC12用法
1.1. 介绍 Figure 4 AD模块图 在处AD时,我们关注的对象有如下几个,参考源、通道、存储地址、时钟、触发方式、精度,速度(200k)。 在上图中我们都可以找到,msp430f149的参考正电源有VRFE+ VeREF+ ,Vcc,同时有对应的负电源。采样通道有16个,存储地址则有对应16个通道,时钟则是有内部时钟及3种时钟源的分频,触发方式有4种。 因此,对于这些特点我们可以实现4种模式,单通道单次采样,单通道多次采样,多通道单次采样,多通道多次采样。 1.2. 相关寄存器 ADC12CTL0:前面8位是对采样保持时间的设置。后8位分别对应8种设置 ADC12CTL1:前4位进行通道选择,
[单片机]
MSP430 中<font color='red'>ADC</font>12用法
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved