一、ADC介绍

1、这里使用的12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部 信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右 对齐方式存储在16位数据寄存器中。

2、ADC主要特征:

1)12位分辨率

2)转换结束、注入转换和发生模拟看门狗事件时产生中断

3)单次和连续转换模式

4)从通道0到通道n的自动扫描模式

5)自校准

6)带内嵌数据一致性的数据对齐

7)采样间隔可以按通道分别编程

8)规则转换和注入转换均有外部触发选项

9)间断模式

10)双重模式(带2个或以上ADC的器件)

11)ADC转换时间:

─ STM32F103xx增强型产品:时钟为56MHz时为1μs(时钟为72MHz为1.17μs)

─ STM32F101xx基本型产品:时钟为28MHz时为1μs(时钟为36MHz为1.55μs)

─ STM32F102xxUSB型产品:时钟为48MHz时为1.2μs

─ STM32F105xx和STM32F107xx产品:时钟为56MHz时为1μs(时钟为72MHz为1.17μs)

12)ADC供电要求:2.4V到3.6V

13)ADC输入范围:VREF- ≤ VIN ≤ VREF+

14)规则通道转换期间有DMA请求产生。

注意:如果有VREF-引脚(取决于封装),必须和VSSA相连

3、ADC开关控制

通过设置ADC_CR2寄存器的ADON位可给ADC上电。当第一次设置ADON位时,它将ADC从断 电状态下唤醒。 ADC上电延迟一段时间后(tSTAB),再次设置ADON位时开始进行转换。 通过清除ADON位可以停止转换,并将ADC置于断电模式。在这个模式中,ADC几乎不耗电(仅 几个μA)。

4、ADC时钟

由 时钟控制器提供的ADCCLK时钟和PCLK2(APB2时钟)同步。RCC控制器为ADC时钟提供一个 专用的可编程预分频器,详见小容量、中容量和大容量产品的复位和时钟控制(RCC)章节。

5、ADC通道选择

有16个多路通道。可以把转换组织成两组:规则组和注入组。在任意多个通道上以任意顺序进 行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道 2、通道0、通道2、通道2、通道15。

规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。规 则组中转换的总数应写入ADC_SQR1寄存器的L[3:0]位中。

注入组由多达4个转换组成。注入通道和它们的转换顺序在ADC_JSQR寄存器中选择。注入 组里的转换总数目应写入ADC_JSQR寄存器的L[1:0]位中。

如果ADC_SQRx或ADC_JSQR寄存器在转换期间被更改,当前的转换被清除,一个新的启动脉 冲将发送到ADC以转换新选择的组。

6、单次转换模式

单次转换模式下,ADC只执行一次转换。该模式既可通过设置ADC_CR2寄存器的ADON位(只 适用于规则通道)启动也可通过外部触发启动(适用于规则通道或注入通道),这时CONT位为0。 一旦选择通道的转换完成:

● 如果一个规则通道被转换: ─ 转换数据被储存在16位ADC_DR寄存器中 ─ EOC(转换结束)标志被设置 ─ 如果设置了EOCIE,则产生中断。

● 如果一个注入通道被转换: ─ 转换数据被储存在16位的ADC_DRJ1寄存器中 ─ JEOC(注入转换结束)标志被设置 ─ 如果设置了JEOCIE位,则产生中断模拟/数字转换(ADC)

然后ADC停止

7、连续转换模式

在连续转换模式中,当前面ADC转换一结束马上就启动另一次转换。此模式可通过外部触发启 动或通过设置ADC_CR2寄存器上的ADON位启动,此时CONT位是1。 每个转换后:

● 如果一个规则通道被转换: ─ 转换数据被储存在16位的ADC_DR寄存器中 ─ EOC(转换结束)标志被设置 ─ 如果设置了EOCIE,则产生中断。

● 如果一个注入通道被转换: ─ 转换数据被储存在16位的ADC_DRJ1寄存器中 ─ JEOC(注入转换结束)标志被设置 ─ 如果设置了JEOCIE位,则产生中断。

8、时序图

ADC在开始精确转换前需要一个稳定时间tSTAB。在开始ADC转换和14个时钟周期 后,EOC标志被设置,16位ADC数据寄存器包含转换的结果。

9、ADC中断

规则和注入组转换结束时能产生中断,当模拟看门狗状态位被设置时也能产生中断。它们都有 独立的中断使能位。

注: ADC1和ADC2的中断映射在同一个中断向量上,而ADC3的中断有自己的中断向量。 ADC_SR寄存器中有2个其他标志,但是它们没有相关联的中断:

● JSTRT(注入组通道转换的启动)

● STRT(规则组通道转换的启动)

中断事件                 事件标志                 使能控制位

规则组转换结束                 EOC                         EOCIE

注入组转换结束                 JEOC                         JEOCIE

设置了模拟看门狗状态位         AWD                         AWDIE

二、应用光照强度获取和烟雾浓度获取

1、光敏电阻原理图

        使用PA5管脚

2、ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。-----这里使用6分频(系统时钟72MHZ)

它最大只能输入3.6V电压,而光敏电阻的供电为5V,所以设计了R19分压电阻,

设光敏电阻的阻值为xΩ,PA5的电压为y,可得以下公式:

                                                y/1500=5/(x+2500)

STM32的ADC精度为12位,则最大值为4096。采集到的AD值与电压成线性对应关系,系统中最高的电压值为3.3V的电源电压,它与4096对应。假设PA5感受到的电压y对应的AD值为z,则:

y/z=3.3/4096

联立两式,消去y,得到关于x的表达式:

x=10240000/(1.1×z)-2500

使用ADC得到z以后,就可以根据上式算出光敏电阻的值了

        3、光敏电阻器是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器。主要用于光的测量、光的控制、和光电转换。光敏电阻器都制成薄片结构,以便能够吸收更多的光能。该类电阻器的特点是入射光越强,电阻值就越小,入射光越弱,电阻值就越大
adc.c

#include "adc.h"
#include "stdio.h"
uint16_t Illu = 0;
uint16_t smoke = 0;
uint16_t ADC_Buff[20] = {0};uint8_t lvgl_Illu[100] = {0};
uint8_t lvgl_smoke[100] = {0};//PA5  光照
void Adc_Config(void)
{//IO开时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//配置IOGPIO_InitTypeDef GPIO_Adc = {0};GPIO_Adc.GPIO_Pin = GPIO_Pin_5; GPIO_Adc.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Adc.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA,&GPIO_Adc);//配置函数:初始化外设 GPIOx 寄存器GPIO_Adc.GPIO_Pin = GPIO_Pin_1; GPIO_Init(GPIOC,&GPIO_Adc);//配置函数:初始化外设 GPIOx 寄存器//ADC1开时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);//设置 ADC 时钟 RCC_PCLK2_Div6:六分频//ADC1配置ADC_InitTypeDef ADC_InitStructure = {0}; ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;// ADC1,ADC2 独立模式ADC_InitStructure.ADC_ScanConvMode = ENABLE;//扫描模式 规则组的每个通道都采集一遍ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//连续模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;// 软件触发 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;// 右对齐ADC_InitStructure.ADC_NbrOfChannel = 2;//(规则组通道数据个数);规定了顺序进行规则转换的 ADC 通道的数目ADC_Init(ADC1, &ADC_InitStructure);   //根据 ADC_InitStruct 中指定的参数初始化外设 ADCx 的寄存器//设置指定ADC的规则组通道,设置它们的转化顺序和采样时间ADC_RegularChannelConfig(ADC1,ADC_Channel_5,1,ADC_SampleTime_239Cycles5);ADC_RegularChannelConfig(ADC1,ADC_Channel_11,2,ADC_SampleTime_239Cycles5);//ADC_Channel_11->被设置的 ADC 通道//开启ADCADC_Cmd(ADC1,ENABLE);//开启ADC的DMA通道ADC_DMACmd(ADC1,ENABLE);//ADC校准://1.重置校准寄存器ADC_ResetCalibration(ADC1);//重置指定的 ADC 的校准寄存器 CR2while(ADC_GetResetCalibrationStatus(ADC1));//获取 ADC 重置校准寄存器的状态//2.开始校准ADC_StartCalibration(ADC1);//开启指定的ADC校准while(ADC_GetCalibrationStatus(ADC1));//等待校准结束//启动ADCADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能或者失能指定的 ADC 的软件转换启动功能}void Get_AdcVal(void)
{Illu = 0;//光照值存放smoke = 0;//烟雾值存放for(uint8_t i=0;i<20;i+=2){Illu += ADC_Buff[i];smoke += ADC_Buff[i+1];}Illu =410 - (Illu /100);smoke /= 10;
}

adc.h

#ifndef _ADC_H_
#define _ADC_H_#include "stm32f10x.h"extern uint16_t Illu;
extern uint16_t smoke;extern uint8_t lvgl_Illu[100];
extern uint8_t lvgl_smoke[100];void Adc_Config(void);
void Get_AdcVal(void);
#endif

STM32F103ZE(ADC模数转换)光照以及空气质量数据获取相关推荐

  1. 一个简单的空气质量数据监测站项目

    大气质量数据监测站用于测试空气质量监测及数据采集,实现野外或者室内空气质量的检测.并通过网络将数据上传到OneNet​显示.​ 1.项目概述 本项目是一个定制项目,要求采集大气的压力.温度.湿度.PM ...

  2. 基于stm32单片机的空气质量检测仿真(仿真+源码+全套资料)

    资料编号:072 可以通过STM32的ADC检测当前的空气质量,LCD1602显示,并且可以自动控制风扇排气,也可以设置为手动排气.包含全套资料,下面是视频演示: 72-基于stm32单片机的空气质量 ...

  3. 用Python绘制北京近一年来空气质量热力图,看看北京的沙尘暴真的多吗?

    3月15日北京迎来了近6年来的首次沙尘暴,是被迫吃土的一天!!上次沙尘暴出现还是在2015年4月15日. 记得早上起床,打开手机看到好多盆友发来的询问关怀"听说北京沙尘暴了,注意安全哦&qu ...

  4. 51单片机空气质量检测系统 甲醛DHT11温湿度烟雾光照报警器WIFI系统

    采用51单片机+ADC0832芯片+DHT11+按键+LCD12864液晶+蜂鸣器+wifi模块+稳压模块+光敏电阻+烟雾传感器+甲醛传感器设计而成. 1.LCD12864液晶实时显示烟雾浓度.当前空 ...

  5. STM32 Cube ADC MQ135测量空气质量和氨气PPM

    一 .说明 1. 什么是AD转换 AD转换是把离散的模拟量转换为数字量的过程,其原理就是使用单片机的高频率和时钟来采样x轴的点样,根据电压的变化使用曲线函数来获取y轴数字值的过程,我们叫做AD转换 2 ...

  6. python爬虫可视化题目北京空气质量监测数据获取与分析

    任务1:数据采集 网页"http://pm25.in/beijing"中包含北京12个监测点的空气质量监测数据,请编写程序抓取网页(网页样本保存在源素材文件夹下src1目录中)上的 ...

  7. 毕业设计 STM32空气质量检测仪 - 单片机 嵌入式

    文章目录 1 简介 2 系统设计概述 3 系统总体方案 4 硬件设计方案 4.1 stm32 主控 4.2 温度采集模块 4.3 甲醛浓度检测模块 4.4 PM2. 5 浓度检测模块 4.5 液晶显示 ...

  8. 单片机毕业设计 stm32空气质量检测仪

    文章目录 1 简介 2 系统设计概述 3 系统总体方案 4 硬件设计方案 4.1 stm32 主控 4.2 温度采集模块 4.3 甲醛浓度检测模块 4.4 PM2. 5 浓度检测模块 4.5 液晶显示 ...

  9. STM32项目设计:温湿度空气质量报警器, 分享源码、PCB

    文章目录 一.课题 二.准备材料 三.原理图与PCB设计 四.程序设计 2021年10月27-2022年1月1日 可承接单片机设计,有意可添加Q2809786963 百度网盘资料链接:https:// ...

最新文章

  1. 网站内容优化时需注意哪些事项?
  2. C#中读写INI配置文件
  3. 工程师必知的代码重构指南
  4. BZOJ 2720 [Violet 5]列队春游 ——期望DP
  5. 小G的项链(Manacher)
  6. mysql 分类_MYSQL数据类型分类
  7. 国家邮政局:春节假期全国共揽收投递快递包裹7.49亿件
  8. Android-返回桌面?退出程序?
  9. jQuery Mobile中头部栏header的data-*选项
  10. SSH框架的工作原理及流程
  11. 情感预测SHINE: Signed Heterogeneous Information Network Embedding for Sentiment Link Prediction引介
  12. 使用grep命令抓取报: memory exhausted(内存耗尽)
  13. 罗振宇的跨年演讲和知识付费到底哪里错了
  14. 掩膜裁剪tif步骤_ENVI中掩膜掩膜操作及影像分类教程(转)
  15. PyTorch Python API详解大全(持续更新ing...)
  16. BGP路径属性与选路原则
  17. 【20保研】西安电子科技大学计科院关于举办2020年“优研计划”暑期夏令营的通知...
  18. linux用户密码文件为,Linux用户和密码文件格式详解
  19. 2018软工实践作业一
  20. 苏州项目申报公司告诉你软件著作权你不知道的还很多

热门文章

  1. Maven无法自动导入依赖解决方案(能解决绝大多数情况)
  2. 【浅谈】数学与生活(二)
  3. Turbine实战(上)
  4. 解决vue中拿不到第一次数据,只能从第二次拿的情况
  5. 程序员应该会哪些内容
  6. 如何使用 iOS 9 的 Core Spotlight 框架
  7. 汽车总线CAN网络分层机构 --3
  8. 从新浪微博与微信谈产品设计
  9. 想去紫禁城参观一下吗`?告诉你一个密秘
  10. android.mk 添加v7_在Android上以命令行方式移植FFmpeg