STM32的ADC详解

目录

一、ADC简介

二、ADC的时钟

三、ADC特性

四、ADC功能说明

五、规则通道和注入通道

1.规则通道

2.注入通道

3.区别

六、数据寄存器

1.右对齐

2.左对齐

七、转换模式

1.单次转换模式

2.续转换模式

3.扫描模式

4.区别

八、程序实现

1.需求

2.ADC初始化

3.AD采集


一、ADC简介

ADC是模拟数字转换器(Analog to Digital Converter),是一种将模拟量(如电压值、光敏电阻阻值、热敏电阻阻值等)转换为数字量的设备。

二、ADC的时钟

ADC有两个时钟方案,一个是针对数字电路的,一个是根据模拟电路的。

模拟电路的时钟:ADCCLK,所有 ADC 共用,此时钟来自于 APB2 时钟,该预分频器允许 ADC 在 fPCLK2 /2、/4、/6 或 /8 下工作。

数字接口的时钟:此时钟等效于 APB2 时钟。可以通过 RCC APB2 外设时钟使能RCC_APB2ENR为每个 ADC 使能/禁止数字接口的时钟。

三、ADC特性

STM32F4的ADC是12位逐次逼近型的模拟数字转换器,具有多达19个复用通道,可测量来自16个外部源、2个内部源通道的信号。ADC的结果存储在一个左对齐或者右对齐的16位数据寄存器中。STM32F4系列有3个ADC,这些ADC可以独立使用,也可以使用双重或者三重模式来提高采样率

ADC的主要特性包括

(1)可配置12位、10位、8位或6位分辨率

(2)在转换结束、注入转换结束以及发生模拟看门狗或溢出事件时产生中断

(3)支持单次和连续转换模式

(4)自动将通道0转换为通道“n”的扫描模式

(5)数据被存储在16位数据寄存器中,数据对齐以保持内置数据一致性

(6)可独立设置各通道采样时间,以及外部触发器选项。

(7)STM32F4的ADC还具有模拟看门狗特性,允许应用检测输入电压是否超过了用户自定义的阈值上限或者下限。

四、ADC功能说明

VREF是ADC的的参考电压,VDDA是ADC的供电引脚,ADCx_IN0-ADCx_IN15代表16个外部通道,温度传感器、VREFINT、VBAT代表3个内部通道,然后被分出了16个规则通道和和4个注入通道。

五、规则通道和注入通道

1.规则通道

每个ADC存在16个规则通道,规则通道可以理解为就是普通的转换通道,通常我们在没有配置注入转换通道的情况下,主要使用的就是这个通道。规则通道的转换结果储存在规则数据寄存器(ADC_DR)中,所有规则通道的转换结果均共用此规则数据寄存器,因此为避免数据丢失,在每个通道转换完毕时应尽快将转换结果读出。

2.注入通道

每个ADC存在4个注入通道,注入通道可以理解为一种中断或插入的通道,它可以在规则通道转换的时候强行插入要转换的通道,注入通道可以中断规则通道的转换,并在注入通道组转换完成后,规则通道组的规则转换会从上次中断的规则转换处恢复。每个注入通道均有一个用于储存转换结果的注入数据寄存器(ADC_JDRx),所以他们的转换结果互不影响。

3.区别

 规则通道适合于需要连续、大规模数据采集的场景,而注入通道则适用于需要快速响应、单次数据采集的情况。

六、数据寄存器

数据寄存器有16位,但是最多12位有效吗,ADC_CR2 寄存器中的 ALIGN 位用于选择转换后存储的数据的对齐方式,可选择左对齐和右对齐两种方式,读数后处理的方式也不一样。

1.右对齐

2.左对齐

七、转换模式

1.单次转换模式

  • 在单次转换模式下,ADC按照设定的配置执行一次转换,然后停止转换并等待进一步的触发。
  • 这种模式适用于需要单次获取转换结果的应用场景。
  • 在单次转换模式下,无论是规则通道还是注入通道,ADC都会执行一次转换然后停止。
  • 如果选择多个通道进行转换,并且没有启动扫描模式,那么ADC只会转换选定的第一个通道。

2.续转换模式

  • 在连续转换模式下,ADC在完成一次转换后自动开始下一次转换,无需外部触发。
  • 这种模式适用于需要持续采样的应用场景,如数据采集。
  • 在连续转换模式下,ADC会持续进行转换,直到被外部触发停止或复位。
  • 如果选择多个通道进行转换,并且启动了扫描模式,那么ADC会按照通道号的顺序对设置的多个通道进行连续转换。

3.扫描模式

  • 扫描模式是与通道选择相关的功能,而不是一个独立的转换模式。
  • 在扫描模式下,可以通过设置多个输入通道进行连续转换。
  • ADC将按照通道号的顺序对设置的多个通道进行转换,并将结果按顺序保存在对应的数据寄存器中。
  • 扫描模式通常与连续转换模式一起使用,以实现多个通道的连续采样和转换。

4.区别

  • 单次转换模式仅执行一次转换并停止。
  • 连续转换模式在完成一次转换后自动开始下一次转换,无需外部触发。
  • 扫描模式允许设置多个通道进行连续转换,并通常与连续转换模式一起使用。

八、程序实现

1.需求

我们用STM32F429的PA5来实现AD的采集,根据数据手册,我们得知PA5属于ADC1的通道5。

2.ADC初始化

设置ADC1,4分频,12位模式,右对齐等ADC基本参数。

ADC_HandleTypeDef ADC1_Handler;//ADC句柄
//初始化ADC
//ch: ADC_channels 
//通道值 0~16取值范围为:ADC_CHANNEL_0~ADC_CHANNEL_16
void MY_ADC_Init(void)
{ ADC1_Handler.Instance=ADC1;ADC1_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4;   //4分频,ADCCLK=PCLK2/4=90/4=22.5MHZADC1_Handler.Init.Resolution=ADC_RESOLUTION_12B;             //12位模式ADC1_Handler.Init.DataAlign=ADC_DATAALIGN_RIGHT;             //右对齐ADC1_Handler.Init.ScanConvMode=DISABLE;                      //非扫描模式ADC1_Handler.Init.EOCSelection=DISABLE;                      //关闭EOC中断ADC1_Handler.Init.ContinuousConvMode=DISABLE;                //关闭连续转换ADC1_Handler.Init.NbrOfConversion=1;                         //1个转换在规则序列中 也就是只转换规则序列1 ADC1_Handler.Init.DiscontinuousConvMode=DISABLE;             //禁止不连续采样模式ADC1_Handler.Init.NbrOfDiscConversion=0;                     //不连续采样通道数为0ADC1_Handler.Init.ExternalTrigConv=ADC_SOFTWARE_START;       //软件触发ADC1_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;//使用软件触发ADC1_Handler.Init.DMAContinuousRequests=DISABLE;             //关闭DMA请求HAL_ADC_Init(&ADC1_Handler);                                 //初始化 
}//ADC底层驱动,引脚配置,时钟使能
//此函数会被HAL_ADC_Init()调用
//hadc:ADC句柄
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
{GPIO_InitTypeDef GPIO_Initure;__HAL_RCC_ADC1_CLK_ENABLE();            //使能ADC1时钟__HAL_RCC_GPIOA_CLK_ENABLE();			//开启GPIOA时钟GPIO_Initure.Pin=GPIO_PIN_5;            //PA5GPIO_Initure.Mode=GPIO_MODE_ANALOG;     //模拟GPIO_Initure.Pull=GPIO_NOPULL;          //不带上下拉HAL_GPIO_Init(GPIOA,&GPIO_Initure);
}

3.AD采集

我们用ADC1的通道5,所以传入参数ch=5,结果返回一次ADC规则组的转换结果。


//获得ADC值
//ch: 通道值 0~16,取值范围为:ADC_CHANNEL_0~ADC_CHANNEL_16
//返回值:转换结果
u16 Get_Adc(u32 ch)   
{ADC_ChannelConfTypeDef ADC1_ChanConf;ADC1_ChanConf.Channel=ch;                                   //通道ADC1_ChanConf.Rank=1;                                       //第1个序列,序列1ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_480CYCLES;        //采样时间ADC1_ChanConf.Offset=0;                 HAL_ADC_ConfigChannel(&ADC1_Handler,&ADC1_ChanConf);        //通道配置HAL_ADC_Start(&ADC1_Handler);                               //开启ADCHAL_ADC_PollForConversion(&ADC1_Handler,10);                //轮询转换return (u16)HAL_ADC_GetValue(&ADC1_Handler);	        //返回最近一次ADC1规则组的转换结果
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ipv6 基础学习(一)

IPv6 为什么要有IPV6? IPv4地址空间有限:IPv4使用32位地址,最多可提供约43亿个地址。随着互联网设备数量的爆炸式增长,这些地址已经几乎耗尽。 IPv6地址空间庞大:IPv6使用128位地址,可以提供大约3.410^3…

爬虫自己做的

1.urllib 1.1基本使用 1.2 下载(图片,页面,视频) 1.3 get 1.3.1 quote 中文变成对应uncode编码 当url 的wd中文时 quote是将中文变成对应uncode编码 然后拼接成完整的url 1.3.2urlencode方法 wd有多个参数 1.3.3ajas get实例 …

【Git远程操作】理解分布式管理 | 创建远程仓库

目录 1.理解分布式管理 多人协作开发 2.创建远程仓库 2.1仓库名&路径 2.2初始化仓库&设置模板 1.理解分布式管理 目前我们学习的所有内容都是在本地来完成的。(add /commit /版本撤销回退/分支管理) Git是一个分布式 的版本控制系统。 分支…

动漫风格动漫404网站维护HTML源码

源码介绍 动漫风格动漫404网站维护HTML源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面 效果预览 源码下载 动漫风格动漫404网站维护HTML源码

【存储学习笔记】1:机械硬盘(Hard Drive Disk)结构和寻址方式

目录 HDD的结构HDD的寻址方式CHS寻址(不适用于等密度结构磁盘)LBA寻址(目前普遍使用的线性寻址方式) HDD的寻址速度 HDD的结构 盘面(Platter):单面或者双面覆盖着用于记录数据的磁性物质&#x…

Gateway源码分析:路由Route、断言Predicate、Filter

文章目录 源码总流程图说明GateWayAutoConfigurationDispatcherHandlergetHandler()handleRequestWith()RouteToRequestUrlFilterReactiveLoadBalancerClientFilterNettyRoutingFilter 补充知识适配器模式 详细流程图 源码总流程图 在线总流程图 说明 Gateway的版本使用的是…

配置单区域OSPF

目录 引言 一、搭建基础网络 1.1 配置网络拓扑图如下 1.2 IP地址表 二、测试每个网段都能单独连通 2.1 PC0 ping通Router1所有接口 2.2 PC1 ping通Router1所有接口 2.3 PC2 ping通Router2所有接口 2.4 PC3 ping通Router2所有接口 2.5 PC4 ping通Router3所有接口 2.…

【Gitlab】记一次升级 Gitlab 后 API 失效的问题

背景 前段时间,因内部使用的 Gitlab 版本存在漏洞,需要进行升级,于是乎,将 Gitlab 从 16.6.0 升级到 16.11.3。而我们项目有个接口是用于获取 Gitlab 上的开发人员。 然后,今天,突然发现这个接口获取不到…

Linux网络——套接字与UdpServer

目录 一、socket 编程接口 1.1 sockaddr 结构 1.2 socket 常见API 二、封装 InetAddr 三、网络字节序 四、封装通用 UdpServer 服务端 4.1 整体框架 4.2 类的初始化 4.2.1 socket 4.2.2 bind 4.2.3 创建流式套接字 4.2.4 填充结构体 4.3 服务器的运行 4.3.1 rec…

在树莓派4B上部署yolov8环境完成高帧率检测任务

目录 前言 在树莓派上安装Pytorch 在树莓派上安装Ultralytics环境 在树莓派上初步测试模型 在树莓派上安装NCNN 用NCNN模型实现高帧率检测 前言 在我前面的文章里讲了如何用yolov8从0开始训练自己的模型,现在这篇文章将教大家如何在树莓派上部署yolov8的环境…

【BUG】已解决:TypeError: Descriptors cannot not be created directly.

已解决:TypeError: Descriptors cannot not be created directly. 目录 已解决:TypeError: Descriptors cannot not be created directly. 【常见模块错误】 【错误原因】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来…

适用于618/7xx芯片平台 AT开发 远程FOTA升级指南教程

简介 AT版本的远程升级主要是对AT固件版本进行升级,实际方式为通过合宙官方IOT平台升级或者使用自己搭建的服务器进行升级服务。 该文档教程流程适用于 618/716S/718P 芯片平台的Cat.1模块 合宙IOT平台配置 升级日志 —— 如何查看 升级日志 —— 响应码列表 响应…

【BUG】已解决:ModuleNotFoundError: No module named ‘torch‘

已解决:ModuleNotFoundError: No module named ‘torch‘ 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市…

Unity-URP-SSAO记录

勾选After Opacity Unity-URP管线,本来又一个“bug”, 网上查不到很多关于ssao的资料 以为会不会又是一个极度少人用的东西 而且几乎都是要第三方替代 也完全没有SSAO大概的消耗是多少,完全是黑盒(因为用的人少,研究的人少,优…

ubuntu2204配置anacondacuda4090nvidia驱动

背景 某个机房的几台机器前段时间通过dnat暴露至公网后被入侵挖矿,为避免一些安全隐患将这几台机器执行重装系统操作; 这里主要记录配置nvidia驱动及cuda&anaconda。 步骤 大概分为几个步骤 禁用nouveau配置grub显示菜单install nvidia-driveri…

Qt Style Sheets-使用样式表自定义 Qt 部件

使用样式表自定义 Qt 部件 在使用样式表时,每个小部件都被视为具有四个同心矩形的框:边距矩形、边框矩形、填充矩形和内容矩形。框模型对此进行了更详细的描述。 盒模型 以下是四个同心矩形在概念上的呈现方式: 边距超出边框。边框绘制在边…

1.Fabric框架

要了解Fabric,首先要知道Hyperledger开源项目。 2015年12月,由开源世界的旗舰组织Linux基金会牵头,30家初始企业成员共同宣布Hyperledger联合项目成立。Hyperledger 超级账本,是首个面向企业应用场景的分布式账本平台&#xff0c…

【Spark官方文档部分翻译】RDD编程指南(RDD Programming Guide)

写在前面 内容如何选择 本翻译只翻译本人认为精华的部分,本人认为的Spark的一些核心理念,编程思想。一些特别基础的操作包括但不限于搭建环境就不在此赘述了。 配套版本 本系列基于Spark 3.3.1,Scala 2.12.10,进行翻译总结 原…

nginx通过nginx_upstream_check_module实现后端健康检查

1、简介说明 nginx是常用的反向代理和负载均衡服务,具有强大并发能力、稳定性、丰富的功能集、低资源的消耗。 nginx自身是没有针对后端节点健康检查的,但是可以通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的相关指令来完…

Redis之List列表

目录 一.列表讲解 二.列表命令 三.内部编码 四.应用场景 Redis的学习专栏:http://t.csdnimg.cn/a8cvV 一.列表讲解 列表类型是用来存储多个有序的字符串,如下所示,a、b、c、d、e五个元素从左到右组成了一个有序的列表,列表中的…