ADC -模数转换

news2024/10/8 22:39:37

ADC     -模数转换      - 将模拟信号转换为数字信号

目录

ADC     -模数转换      - 将模拟信号转换为数字信号

STM32方面使用的AD转化方式是逐次逼近法

ADC

什么叫单次,连续,扫描,中断?

应用:运用STM32中ADC转换器采集光照

编写代码

初始化

5、获取光照的值


  • 这一节我们来讲adc类设备

设备怎么区分呢?
串口类设备与单片机通信有串口
io类设备与单片机通信用io ADC类设备和单片机通信接口用adc

  • 什么叫ADC类设备?通信接口为ADC的设备,输出的数据量为模拟量的设备。

  • 什么叫数字量,什么叫模拟量?

单片机能直接识别的:数字量 不能直接识别的:模拟量
假如一个传感器向外输出 3.3V 的电压,一般情况下,单片机识别为逻辑 1.

  • 单片机能识别的电平是ttl电平

TTL 电平的标准如下:
• 输出高电平:大于 2.4V,典型值为 3.5V。
• 输出低电平:小于 0.4V,典型值为 0.2V。
• 输入高电平:大于 2.0V。
• 输入低电平:小于 0.8V.


  • ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁

STM32主要是数字电路,数字电路只有高低电平,没有几V电压的概念,所以如果想读取电压值,就需要借助ADC模数转换器来实现,ADC读取引脚上的模拟电压,转换为一个数据,存在寄存器里,再把这个数据读取到变量中,就可以进行显示、判断、记录等等操作.

ADC可以将模拟信号转换为数字信号,是模拟电路到数字电路的桥梁


  • 两个重要参数:

分辨率:一般用多少位来表示,12位AD值,它的表示范围就是0 - (2^12-1),量化结果的范围是0~4095,位数越高,量化结果越精细,对应分辨率越高;
转换时间 :1us表示从AD转换开始到产生结果,需要花1us的时间,对应AD转换的频率就是1MHZ,1MHZ为STM32 ADC的最快转换频率

  • 数字量传感器:都有自己通信方式(DHT11 KQM6600)
  • 模拟量传感器:电压值 ADC (ADC对应的IO口要设置成模拟输入)

STM32方面使用的AD转化方式是逐次逼近法

  • 这是stm32上的adc使用的方法,在其他单片机上使用的就不一定是这个方法了

  • AD 转换方式:逐次逼近法

1.ADC 的转换精度:adc 能识别电压的最小值 0 1 2 3…
12 位/16 位 如12位adc的精度为(1/2^12) *参考电压最大值 V,最终得到的电压是adc能够识别的最小电压。 假如参考电压最大值为5v,那么最小电压为0.0012V
2.ADC 的参考电压:ADC 转换电压的范围
参考电压最小值<= 输入电压 <= 参考电压最大值

alt text

如adc能识别的最小电压为0.1v,那么2.2v的电压会被转换为22, 就是看2.2v有几个0.1v,如果精度数0.1v,那么每加一个0.1v都会加一,如果精度是1v,那么2.2v上涨0.1v ,与2.2v没区别

  • tip:电压是相对的 

    alt text

ADC

  • 首先翻出中文参考手册,翻到ADC部分

alt text

-- 12位就是转换精度,ADC只是一个模拟数字转换器,模拟量是从转换通道上读取的。

-- 什么叫左对齐右对齐?

alt text

-- 注意ADC的输入时钟不得超过14MHz,他是由PCLK2分频得到的。

  • 下面看ADC的工作结构图

alt text

-- 如果两个通道都有数据要来转换的话,暂停规则通道的转换,先转换注入通道。(注入通道就相当于vip通道,而规则通道就相当于普通通道,优先转换vip通道)一般用的就是规则通道。

-- ADC只是一个转换器,那么转换的数据从哪来呢,是从数据通道(输入通道)来的。

alt text

 -- 方框就是单片机上的引脚

-- 规则通道最多可转换16组数据,因为有16个通道,那么转换的顺序是什么呢,其实是我们可以控制的,将他写成序号1,那他就是第一个转换,写成序号2,就是第二个转换的。(是人为规定的),最后转换的结果保存在规则通道数据寄存器中。

什么叫单次,连续,扫描,中断?

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

--(单次和连续是一个参数控制的,只能存在一个,而扫描和中断是分别控制的)

  • 单次:只进行一次转换(只转换一次序号为1通道采样到的数据,尽管后面有其他通道在排队)
  • 连续:进行多次转换 (只连续转换序号为1通道采样到的数据,尽管后面有其他通道在排队),如果序号1没有采样到数据,也只会等待序号1的通道,不会转换其他通道。
  • 扫描:(一般与单次和连续一起使用,要么是单次扫描,要么是来连续扫描)开/关 ,普通的单次和连续是在扫描关闭的时候,如果扫描开启,单次扫描将变成会把规则通道里面所有的输入通道都进行一次转换。直到最后排队的输入通道转换完成。
    tip:如果一开始排队的输入通道有3个,开始adc转换后,又排队进来输入通道,将不会进入转换。也就是只要adc转换开始,排队的输入通道固定为3个。
    扫描开启后,连续扫描将变成会把规则通道里面所有的输入通道一直转换。最后一个输入通道转换完后,又继续转换第一个输入通道。
  • 间断:(很少用到) 1 2 3 5 6 7 8 10 12 假如每次转换 2 个通道: 1 2 3 5 6 7 8 10 12,那么就分了5次转换

应用:运用STM32中ADC转换器采集光照

  • 光敏电阻

alt text

 -- 首先查看原理图,可知光敏电阻测的是那个点的电压,通过adc转换成一个值,那么这个值是什么意思呢?我们还要将这个值转换为(我们能看懂的)数据量,怎么转换,就要看光敏电阻的官方手册。知道他的转换公式。

-- 每一个传感器的公式都是不一样的,在公司里可以采用标定的方式。

编写代码

初始化
  • 1、首先配置时钟(IO和外设的时钟),根据原理图采用PA5,adc用adc1
    //时钟 A adc1
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);																		//三个adc共用16个通道
  • 2、配置IO口,PA5设置成模拟输入模式
    //IO  
	GPIO_InitTypeDef GPIO_InitStructure = {0};						//定义结构体变量,并且将结构体变量赋初值
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; 						//引脚
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;			//速度
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;				//模拟输入
	GPIO_Init(GPIOA, &GPIO_InitStructure);
  • 3、配置外设adc

-- adc的时钟不能超过14MHz,采用时钟分频

    //外设
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);																						//adc的时钟不能超过14Mhz,6分频,把72Mhz的频率进行6分频,最终为14mhz

-- 配置外设初始化

    ADC_InitTypeDef ADC_InitStructure = {0};                                                                            
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;	//独立工作模式												//adc的工作模式 单独工作模式
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;				//关闭扫描											//是否要工作在扫描模式下,采集一个数据不用开,采集多个数据可以开扫描
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;	//关闭连续												//连续模式还是单次模式,disable是单次模式
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	//软件触发		//触发模式,,,软件模式
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	//数据右对齐													//对齐模式  右对齐
	ADC_InitStructure.ADC_NbrOfChannel = 1;	//通道个数																				//规定了顺序进行规则转换的通道数目
	ADC_Init(ADC1,&ADC_InitStructure);                     
	
	ADC_Cmd(ADC1,ENABLE);//使能adc1
  • 4、其他
    //其它 
	//要对adc进行校准,这4句话是固定搭配,不用纠结是什么意思,注意一定要写到adc使能的后面
		
	//----------------------------------------------
	// 初始化ADC 校准寄存器
    ADC_ResetCalibration(ADC1);
    // 等待校准寄存器初始化完成
    while (ADC_GetResetCalibrationStatus(ADC1));

    // ADC开始校准
    ADC_StartCalibration(ADC1);
    // 等待校准完成
    while (ADC_GetCalibrationStatus(ADC1));
	//--------------------------------------------------
	
    //规定通道转换顺序
    ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1,ADC_SampleTime_239Cycles5);		//为什么是通道5,看原理图,对应的IO引脚后面就有adc的通道几						//1就是转换顺序第一个,如果要用两个通道的话,拎一个就要写2//最后一个参数是采样时间,采样时间越长,结果越标准
    //ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2,ADC_SampleTime_55Cycles5);//通道11是烟雾传感器


    //需要启动转换才能转换//将下面这行代码加到初始化里,就是单次转换,只有一个数据
    //1.启动adc转换
    ADC_SoftwareStartConvCmd(ADC1, ENABLE); 
5、获取光照的值
//应用函数   //改变比较值

void get_illu_val(void)
{
    //1.启动adc转换
    ADC_SoftwareStartConvCmd(ADC1, ENABLE); 
    //2.等待转换完成
    while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
    //3.获取数据
    uint16_t illuval =  ADC_GetConversionValue(ADC1);
	
    printf("光照:%d   电压:%.1fV\r\n",illuval,(3.3/4096)*illuval);//得到的是电压值转化成的数据量,现在我们要推电压值
}
  • 从结果来看,光照越强,阻值越小,转换成的数字量就越小         

    alt text

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2197377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue入门-小黑课堂Demo

功能需求&#xff1a; ①列表渲染 ②删除功能 ③添加功能 ④底部统计和清空 页面效果&#xff1a; 代码展示&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" c…

年会工作会议会务报名签到小程序开源版开发

年会工作会议会务报名签到小程序开源版开发 会议管理微信小程序&#xff0c;对会议流程、开支、数量、标准、供应商提供一种标准化的管理方法。以达到量化成本节约&#xff0c;风险缓解和服务质量提升的目的。适用于大型论坛、峰会、学术会议、政府大会、合作伙伴大会、经销商…

大多数人不知道的:线程池CallerRunsPolicy()拒绝策略

总所周知&#xff0c;java里面线程池的四个拒绝策略 AbortPolicy 丢弃并抛出RejectedExecutionException异常 DiscardPolicy 直接丢弃 DiscardOldestPolicy 直接丢弃最前面的任务&#xff0c;尝试执行新任务 CallerRunsPolicy 由调用线程池的线程处理任务&a…

linux安装minianconda

文章目录 &#x1f315;我的配置&#x1f315;从清华镜像源里下载minianaconda&#x1f315;安装&#x1f315;自定义安装位置&#x1f315;是否关闭打开终端默认进入anaconda的设置&#xff1f;&#x1f315;配置清华镜像源 &#x1f315;我的配置 ubuntu 22.04LTS &#x1…

全都燃起来了!黄金周车市销量成绩出炉

文/王俣祺 导语&#xff1a;国庆黄金周对于其他行业可能是个放松的好时机&#xff0c;但对于国内汽车市场而言可能是下半年最关键的“战场”。这几天&#xff0c;全国各地的车展和4S店简直热闹非凡&#xff0c;新能源车尤其抢镜&#xff0c;优惠活动不断&#xff0c;引得消费者…

DAMA数据管理知识体系(第9章 文件和内容管理)

课本内容 9.1 引言 概要 文件和内容管理是指针对存储在关系型数据库之外的数据和信息的采集、存储、访问和使用过程的管理[1]。它的重点在于保持文件和其他非结构化或半结构化信息的完整性&#xff0c;并使这些信息能够被访问。业务驱动因素 法规遵从性要求 法律法规要求组织保…

基于uniapp+django微信小程序 食品安全信息管理系统

目录 项目介绍具体实现截图开发者工具介绍技术路线性能/安全/负载方面开发语言以及框架介绍python-flask核心代码部分展示python-django核心代码部分展示详细视频演示源码获取 项目介绍 食品安全信息管理系统设计的目的是为用户提供食品信息、科普专栏、食品检测、检测结果、交…

力扣LeetCode-链表中的循环与递归使用

标题做题的时候发现循环与递归的使用差别&#xff1a; 看两道题&#xff1a; 两道题都是不知道链表有多长&#xff0c;所以需要用到循环&#xff0c;用到循环就可以把整个过程分成多个循环体&#xff0c;就是每一次循环要执行的内容。 反转链表&#xff1a; 把null–>1…

【图论】迪杰特斯拉算法

文章目录 迪杰特斯拉算法主要特点基本思想算法步骤示例 实现迪杰斯特拉算法基本步骤算法思路 总结 迪杰特斯拉算法 迪杰特斯拉算法是由荷兰计算机科学家艾兹赫尔迪杰特斯拉&#xff08;Edsger W. Dijkstra&#xff09;在1956年提出的&#xff0c;用于解决单源最短路径问题的经…

动态规划算法题目练习——91.解码方法

1.题目解析 题目来源&#xff1a;91.解码方法——力扣 测试用例 2.算法原理 基础版本 1.状态表示 由于题目只要求返回第i个位置的可能情况&#xff0c;则只需要开辟n(ns.size())个大小的dp表即可 2.状态转移方程 题目可知第i个位置可以单独解码也可以与前一个位置组合解码&am…

通付盾|打造新型信息基础设施

2024年9月4日&#xff0c;工业和信息化部、中央网信办等十一部门联合印发《关于推动新型信息基础设施协调发展有关事项的通知》&#xff0c;从全国统筹布局、跨区域协调、跨网络协调、跨行业协调、发展与绿色协调、发展与安全协调、跨部门政策协调等方面明确了21条具体举措&…

命名管道Linux

管道是 毫不相关的进程进程间通信::命名管道 管道 首先自己要用用户层缓冲区&#xff0c;还得把用户层缓冲区拷贝到管道里&#xff0c;&#xff08;从键盘里输入数据到用户层缓冲区里面&#xff09;&#xff0c;然后用户层缓冲区通过系统调用&#xff08;write&#xff09;写…

【JavaEE】——文件IO

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;认识文件 1&#xff1a;文件的概念 2&#xff1a;文件的结构 3&#xff1a;文件路径…

电脑好用便签怎么用,好用的便签软件让你轻松提高工作效率

在忙碌的工作中&#xff0c;作为一名牛马打工人&#xff0c;我们经常需要记住许多重要的事项和任务。有时候&#xff0c;简单的脑力记忆可能会让我们遗漏一些事情&#xff0c;而一个好用的便签软件就可以帮助我们解决这个问题&#xff0c;提高我们的工作效率。那么&#xff0c;…

四.python核心语法

目录 1.序列 1.1. 索引 1.2. 切片 1.3. 总结 2.加法和乘法 2.1. 加法 2.2. 乘法 3.常用函数 3.1.sum()函数 3.2.max()函数和min()函数 3.3.len()函数 4. list 列表 [ ] 基本操作 4.1. 列表的定义 4.2. 列表的创建&#xff08;list()函数&#xff09; 4.3. 列表的…

实施BADI增强支持多个活动的增强实施

找到一个BADI之后&#xff0c;在SE18里面输入BADI名称 一定要查看当前BADI是否支持多种用法&#xff0c;即同一个BADI定义可以实施多个BADI增强。 1、勾选多种用法&#xff0c;才能新实施BADI增强&#xff0c;支持多个实施可同时是活动的。 2、未勾选多种用法&#xff0c;只…

C++——STL简介

目录 一、什么是STL 二、STL的版本 三、STL的六大组件 没用的话..... 不知不觉两个月没写博客了&#xff0c;暑假后期因为学校的事情在忙&#xff0c;开学又在准备学校的java免修&#xff0c;再然后才继续开始学C&#xff0c;然后最近打算继续写博客沉淀一下最近学到的几周…

Echarts实现订单数据统计,前端+后端 代码

以下是静态统计图可以直接看到统计图&#xff0c;复制粘贴即可看到效果&#xff0c;但是数据是死的。下面我会介绍一种动态的方法 &#xff0c;后端动态返回&#xff0c;基于订单页面的数据&#xff0c;来渲染统计图。 Vue 安装 Echarts npm i echarts -S 静态 &#xff1a; …

粉碎玉米的机器:水滴式饲料粉碎机

水滴式饲料粉碎机的主要工作原理是利用高速旋转的锤片将饲料原料进行粉碎&#xff0c;同时将粉碎后的饲料颗粒进行搅拌和混合。这种设备结构紧凑、操作简单、维护方便&#xff0c;可以满足不同养殖场的需求。 水滴式粉碎机特点&#xff1a; 水滴式粉碎机是一款高效、多功能的机…

无人机之飞行算法篇

无人机的飞行算法是一个复杂而精细的系统&#xff0c;它涵盖了多个关键技术和算法&#xff0c;以确保无人机能够稳定、准确地执行飞行任务。 一、位置估计 无人机在空中飞行过程中需要实时获取其位置信息&#xff0c;以便进行路径规划和控制。这通常通过以下传感器实现&#…