文章目录

  • 一、ADC是什么?
  • 二、MQ-2烟雾传感器
    • 1.MQ-2介绍
    • 2.MQ-2电路
  • 三、ADC驱动配置
  • 四、采样测试
    • 1.硬件连接
    • 2.测试代码
    • 3.Makefile
    • 4.运行测试

一、ADC是什么?

模拟数字转换器即A/D转换器,也称ADC(Analog to Digital Converter),它作用是将时间连续、幅值也连续的模拟信号转换为时间离散、幅值也离散的数字信号。对于我们使用的GPIO口来说,它只是对于一个电压值为就界限来读出高电平或低电平,高于某个电压值就为高电平1,而低于某个电压值就为低电平0。但是我们需要具体电压数值的变化,所以得用ADC采样,因为ADC采样可以将一个范围内的电压精确的读取出来,我们使用ADC模式即可获得电压连续变化的数值。

ADC采样的重要参数:

  • 测量范围:就相当于量程,也就是ADC采样时你采样到的电压范围,如果超过了这个范围,那么就得自己去设计电压转换电路啦。
  • 分辨率:分辨率也就相当于是我们ADC的最小测量刻度啦,比如 ADC的测量范围为 0-5V,分辨率设置为 12位,那么我们能测出来的最小电压就是 5V除以 2的 12次方,也就是 5/4096=0.00122V。分辨率越高,测出的最小电压越小,采集到的的信号越精准。
  • 精度:与尺子的精度类似,如尺子最小单位为毫米,而毫米后的只能估算,而我们的ADC分辨率为12位,它的精度最高为11位也就是0.00224V,所以ADC采样出0.00224V的精度比0.00122V更可靠。
  • 采样时间:模拟信号是不停变化的,而ADC稳定采样需要让外部信号保持一段时间,这样ADC才可以稳定采样,保持这个信号的这段时间就是采样时间。
  • 采样率:也就是一秒采样多少次,采样率越高越好,采样率不够会导致部分信息丢失。

二、MQ-2烟雾传感器

1.MQ-2介绍

MQ-2烟雾传感器是一个多种气体探测器,常用于家庭和工厂的气体泄漏监测装置,适宜于液化气、苯、烷、酒精、氢气、烟雾等的探测。

MQ-2的探测范围极其的广泛。它的优点:灵敏度高、响应快、稳定性好、寿命长、驱动电路简单。

如下图我使用的MQ-2:

MQ-2型烟雾传感器属于二氧化锡半导体气敏材料,属于表面离子式N型半导体。处于200~300摄氏度时,二氧化锡吸附空气中的氧,形成氧的负离子吸附,使半导体中的电子密度减少,从而使其电阻值增加。当与烟雾接触时,如果晶粒间界处的势垒收到烟雾的浓度而变化,就会引起表面导电率的变化。利用这一点就可以获得这种烟雾存在的信息,烟雾的浓度越大,导电率越大,输出电阻越低,则输出的模拟信号就越大。

需要注意的是:在使用之前必须加热一段时间,否则其输出的电阻和电压不准确。

2.MQ-2电路

MQ-2常用的电路有两种,一种使用采用比较器电路监控,另一种为ADC电路检测。以下图中的模块仅有比较器电路,ADC部分使用IGKBoard的主控集成的ADC进行检测:

MQ-2的引脚4输出随烟雾浓度变化的直流信号,被加到比较器U1A的2脚,Rp构成比较器的门槛电压。当烟雾浓度较高输出电压高于门槛电压时,比较器输出低电平(0v),此时LED亮报警;当浓度降低传感器的输出电压低于门槛电压时,比较器翻转输出高电平(Vcc),LED熄灭。调节Rp,可以调节比较器的门槛电压,从而调节报警输出的灵敏度。R1串入传感器的加热回路,可以保护加热丝免受冷上电时的冲击。

对于ADC电路而言,只需使用杜邦线将AOUT连接至ADC模拟输入端即可。

三、ADC驱动配置

首先和之前的配置一样,我们需要修改开发板上的DTOverlay配置文件,路径为/run/media/mmcblk1p1/config.txt 修改如下:

# Enable extra overlays
dtoverlay_extra=adc

四、采样测试

1.硬件连接

MQ-2传感器的工作电压在24V以下即可,在我们的板子上建议使用板载的5V电源进行供电,MQ-2在与开发板相连时候,主要连接如下三个引脚:

  • GND:该引脚连接在开发板的GND接地扩展引脚上;
  • VCC:该引脚连接到开发板的5V供电引脚上;
  • AOUT:是MQ-2模块的模拟输出引脚,该引脚应该连开发板上ADC功能的GPIO引脚上;

2.测试代码

adc_mq2.c

/**********************************************************************************      Copyright:  (C) 2023 Deng Yonghao<dengyonghao2001@163.com>*                  All rights reserved.**       Filename:  adc_mq2.c*    Description:  This file mq2 concentration source code.*                 *        Version:  1.0.0(2023年03月18日)*         Author:  Deng Yonghao <dengyonghao2001@163.com>*      ChangeLog:  1, Release initial version on "2023年03月18日 19时19分32秒"*                 ********************************************************************************/#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>//需要读取的文件绝对路径
static char *file_path[] =
{"/sys/bus/iio/devices/iio:device0/in_voltage_scale","/sys/bus/iio/devices/iio:device0/in_voltage1_raw",
};enum path_index
{IN_VOLTAGE_SCALE = 0,IN_VOLTAGE1_RAW,
};typedef struct adc_dev_s
{int raw; //原始数据,数字值float scale;//精度值float act;  //实际值float conc; //浓度值
}adc_dev_t;static int file_data_read(char *filename, char *buf, size_t buf_size);int main(int argc, char **argv)
{char                   adc_buf[30] = {};adc_dev_t             mq2;memset(&mq2, 0, sizeof(mq2));while(1){if(file_data_read(file_path[IN_VOLTAGE_SCALE], adc_buf, sizeof(adc_buf)) < 0){printf("ERROR:Read %s failure.\n", file_path[0]);}mq2.scale = atof(adc_buf);//将字符串转换为浮点类型if(file_data_read(file_path[IN_VOLTAGE1_RAW], adc_buf, sizeof(adc_buf)) < 0){printf("ERROR:Read %s failure.\n", file_path[1]);}mq2.raw = atoi(adc_buf);//将字符串转化为整型mq2.act = (mq2.raw * mq2.scale) / 1000.f;//计算出实际电压值 mq2.conc = ((float)mq2.raw / 4095.f) * 100.f;//计算出实际浓度值                                             printf("MQ-2 实际电压值为:%.3fV, 浓度:%.1f%%\n", mq2.act, mq2.conc);sleep(1);}return 0;
}/*读取文件的字符串*/
static int file_data_read(char *filename, char *buf, size_t buf_size)
{int ret = 0;int fd = -1;if(!filename || !buf || !buf_size){printf("Error filename or str \n");return -1;}fd = open(filename, O_RDONLY);if(fd < 0){printf("Open file '%s' failure: %s\n", filename, strerror(errno));ret = -2;goto CleanUp;}memset(buf, 0, buf_size);if(read(fd, buf, buf_size) < 0){printf("Read data from '%s' failure: %s\n", filename, strerror(errno));ret = -3;goto CleanUp;}CleanUp:if(fd > 0){close(fd);}return ret;
}

3.Makefile

CC=arm-linux-gnueabihf-gcc
APP_NAME=adc_mq2all:clean@${CC} ${APP_NAME}.c -o ${APP_NAME}clean:@rm -f ${APP_NAME}

4.运行测试

首先交叉编译,然后下载到开发板上并赋予权限:


运行程序,然后让打火机释放可燃气体,然后可以看见传感器ADC采样的变化:

运行测试成功。

[imx6ull]ADC编程-烟雾传感器采样相关推荐

  1. adc采样时间_太秀了!单片机内置 ADC 实现高分辨率采样?

    作者 | 逸珺来源 | 嵌入式客栈(ID:embInn)头图 |  CSDN 下载自东方IC[导读] 相信ADC的应用或多或少都会用到,在很多场合都有分辨率要求,要实现较高分辨率时,第一时间会想到采用 ...

  2. 太秀了!单片机内置 ADC 实现高分辨率采样?

    作者 | 逸珺 来源 | 嵌入式客栈(ID:embInn) 头图 |  CSDN 下载自东方IC [导读] 相信ADC的应用或多或少都会用到,在很多场合都有分辨率要求,要实现较高分辨率时,第一时间会想 ...

  3. STM32 ADC多通道规则采样和注入采样

    layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true 什么是ADC? STM ...

  4. GD32F4xx MCU ADC+DMA 多通道采样

    1.GD32F4xx ADC GD32F4xx 的12位ADC是一种采用逐次逼近方式的模拟数字转换器. 1.1 主要特征 可配置12位.10位.8位.6位分辨率: ADC采样率:12位分辨率为2.6M ...

  5. STM32F0 定时器触发ADC,多通道采样、DMA传输数据的配置

    本块代码实现了定时器定时触发ADC,多通道采样,并通过DMA进行数据传输到内存的操作. #include    "adc.h" [cpp] view plaincopy #defi ...

  6. stm32 adc 连续和扫描_技术分享 | STM32多个ADC模块同时采样转换的应用示例

    在STM32家族里,多数系列芯片内含2到3个ADC模块,有的甚至更多,比方G4系列可以有5个ADC模块.其中,通道数因不同的系列或型号多少不等,几个到几十个的都有.有时,我们可能需要多个ADC模块同时 ...

  7. STM32F303RE 四个ADC同步规则采样

    STM32F303RE 芯片有4个ADC, 采样频率据说能达到5Mbsps 已经算是非常高的了. 比较适合做采样 参考文章 STM32三个ADC同步规则采样 参考上面的配置文章. 经过不断的失败和重复 ...

  8. STM32三个ADC同步规则采样

    同步采样一般应用于交流信号中,是指多个ADC的采集时刻完全同步.在电力测量领域,经常会遇到需要同步采样的情况,比如同步采样电压电流信号,计算其相位差.阻抗分析时,也需要对输入输出信号进行同步采集,分析 ...

  9. STM32G070RBT6基于STM32CubeMX创建ADC DMA多通道采样工程

    STM32G070RBT6基于STM32CubeMX创建ADC DMA多通道采样工程 -

最新文章

  1. KMP-next数组
  2. 白话Elasticsearch62-进阶篇之Highlighting高亮显示
  3. ES6, Angular,React和ABAP中的String Template(字符串模板)
  4. el-drawer点击的时候为什么有边框_剪映教学之视频拍摄加剪辑【一】:出视频上下黑色边框模糊效果,视频广告配音...
  5. 数字图像处理与机器视觉光盘资料_机器视觉——数字图像处理知识点总结
  6. UVA 12169 Disgruntled Judge
  7. Golang并发编程进程通信channel了解及简单使用
  8. Debian Gnu/Linux8.5安装GOLANG环境笔记
  9. 027:vue+openlayers加载远程shp数据(示例代码)
  10. 定时器 cron 表达式
  11. 链接计算机 输入网络密码,联想电脑怎么连接无线网输入密码时怎么输入
  12. 2022年计算机软件水平考试网络管理员(初级)练习题及答案
  13. 打孔的问题和打孔的位置
  14. 点线面的意义_聊聊「点线面」的概念
  15. html语言web应用开发,使用HTML5框架加速Web开发
  16. html pdf 模板,记一次 HTML 模板 转 PDF
  17. php 监听条码枪输入,使用jQuery监听扫码枪输入并禁止手动输入的实现方法
  18. java邮箱发送验证码_java 邮箱发送验证码
  19. 计算机专业二本可以考cfa,计算机专业备考CFA一年经验分享
  20. HTML一款好看的最新网站发布导航页源码

热门文章

  1. 3. 打包python应用程序
  2. leetcode171. Excel表列序号
  3. 战神Z7闪屏暗屏问题解决,战神Z7-KP7GC(其他也许也有)
  4. 【图像处理】【SEED-VPM】1.注意点
  5. App适配iPhone 6/ Plus和iOS 8:10条小秘诀
  6. 【10分钟复习】java 多线程专题极速版 面试用
  7. Mysql创建数据库和新建表
  8. 冒险岛win8因计算机中丢失,win8不兼容冒险岛提示“此程序存在已知兼容性问题”怎么办...
  9. GWO灰狼优化算法以及Matlab代码
  10. Centos 8 搭建时钟服务器