STM32G4之ADC

2023-11-23 19:50
文章标签 adc stm32g4

本文主要是介绍STM32G4之ADC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、ADC原理
  • 二、ADC工作模式
    • 1.单次转换模式
    • 2.不连续采样模式
    • 3.常规扫描模式(连续采样)
    • 4.注入转换扫描模式
    • 5.多重ADC同时模式
    • 6.多重ADC交替模式
    • 7.多重ADC交替触发模式
  • 三、ADC配置(STM32CubeMX)
  • 四、部分程序
  • 总结


前言


一、ADC原理

STM32G431内部集成2个有最高12位ADC(ADC1、ADC2),它们是逐次逼近型模数转换器

ADC功能结构图
在这里插入图片描述
主要特性:
1.可配置的转换精度:6位,8位,10位,12位

若精度为12位 : 3.3/ 212=3.3/4096 ,一个单位对应这多的电压值

2.转换电压范围: 0 ~ VREF+(一般接到3.3V电源,不能超过STM32芯片电源电压)

在这里插入图片描述

3.19个转换通道:16个外部通道(IO引脚) + 3个内部通道(温度传感器、内部电压参考、电池供电监测)
在这里插入图片描述

4.采样时间可配置

5.扫描方向可配置

6.多种转换模式:单次,连续

7.数据存放对齐方式可配置:左对齐,右对齐(ADC的结果存储在一个左对齐或右对齐的 16 位数据寄存器中)

8.启动转换方式可配置:软件触发,硬件触发

9.可设置上下门限的模拟看门狗

10.DMA功能

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

通道和转换顺序
规则通道:规规矩矩按照顺序来转换,平时用到的就是这类通道.
在这里插入图片描述
ADC_SQR1控制转换的顺序和数量(L[3:0])

注入通道注入可以理解为插队它是一种在规则通道转换的时候强行插入要转换的一种。这点和中断有点像,当规则通道转换中,有注入通道插队,那么得先转换注入通道的,然后才倒回来转换规则通道
在这里插入图片描述
每个通道都有相应的触发电路,注入通道的触发电路为注入组,规则通道的触发电路为规则组

使用控制寄存器启动时,为ADON位写1开始转换,写0停止转换。
使用外部事件来触发转换,这个触发包括内部定时器触发和外部IO触发。

触发源的选择由ADC_CFGR的EXTSEL[3:0]和ADC_JSQR的JEXTSEL[3:0]位来控制,EXTSEL[3:0]用于规则通道的触发源,
JEXTSEL[3:0]用于选择注入通道的触发源。选择好触发源后,控制EXTTRIG和JEXTTRIG这两位来激活触发源

转换时序图: ADC在开始精确转换之前需要一段稳定时间tSTAB。ADC开始转换并经过15个时钟周期后**,EOC标志置1,转换结果存放在16位ADC数据寄存器中。**

在这里插入图片描述
ADC必须在时钟ADC_CLK的控制下才能进行A/D转换,ADC_CLK的值是由时钟控制器控制, 可以选择同步时钟也可以选择异步时钟线。时钟控制器为ADC时钟提供了一个专用的可编程预分频器,默认的分频值为2

采样时间和转换时间:由ADC_SMPR1和ADC_SMPR2的SMP[2:0]设置,每个通道可以设置不同的时间采样,采样的周期最小是3个周期(1/ADC_CLK),TCONV=采样时间+12周期

当ADC_CLK=30Mhz,ADC为3的周期,那么,总的转换时间为:TCONCV = 3+12 = 15个周期(0.5us)

当数据转换完成,数据将会以对齐方式(左/右)存入相应的寄存器
每个通道也有相应的转换结果寄存器,分别称为规则通道数据寄存器和注入通道数据寄存器

但是,规则通道数据寄存器只有一组,所以存储进去,CPU必须马上读取,一般使用DMA处理;

通常,对于多个规则通道的转换,每次转换完一个数据,需要发出中断请求,CPU读取信息,但是如果转换数据量特别的时候,给CPU带来负担,有可能还没读走就转换了新的数据。

在使能DMA模式的情况下,每完成规则通道组中的一个通道转换后,都会生成一个DMA请求。这样便可将转换的数据从ADC_DR寄存器传输到用软件选择的目标位置。摆脱对CPU的依赖。

注入通道数据寄存器可以存4组数据,最后一次读取。

模拟看门狗:用于监控高低电压阈值,可作用于一个、多个或全部转换通道,当检测到的电压低于或高于设定电压阈值时,可以产生中断
在这里插入图片描述
如果ADC转换的模拟电压低于阈值下限或高于阈值上限,则AWD模拟看门狗状态位会置1。

可以使用ADC_IER寄存器中的AWDIE位使能中断
在这里插入图片描述
有4种情况可以产生中断,即规则组转换结束、注入组转换结束和模拟看门狗事件与溢出事件。ADC1和ADC2的中断映射在同一个中断向量上

二、ADC工作模式

1.单次转换模式

在单次转换模式下,ADC执行一次转换。ADC_CFGRD的CCONT位为0时,可通过以下方式启动此模式:

将ADC_CR寄存器中的ADSTART位置1(仅适用于规则通道)
将JADSTART位置1(适用于注入通道)
外部触发(适用于规则通道或注入通道)

完成所选通道的转换之后:
如果转换了规则通道:

转换数据存储在16位ADC_DR寄存器中
EOC(转换结束)标志置1
EOCIE位置1时将产生中断

如果转换了注入通道:

转换数据存储在16位ADC_JDRy寄存器中
JEOC(注入转换结束)标志置1
JEOCIE 位置1时将产生中断

然后,ADC停止。

2.不连续采样模式

触发一次,n个连续转换,按照规则通道顺序

n=3,要转换的通道=0、1、2、3、6、7、9、10(L[3:0]=8)
第1次触发:转换序列0、1、2
第2次触发:转换序列3、6、7
第3次触发:转换序列9、10并生成EOC事件
第4次触发:转换序列0、1、2

3.常规扫描模式(连续采样)

连续转换模式下,ADC结束一个转换后立即启动一个新的转换。ADC_CFGRD的CONT位为1时,可通过外部触发或将ADC_CR寄存器中的ADC_DR位置1来启动此模式(仅适用于规则通道)。
在这里插入图片描述

每次转换之后,如果转换了规则通道组:

上次转换的数据存储在16位ADC_DR寄存器中
EOC(转换结束)标志置1
EOCIE位置1时将产生中断

注意:无法连续转换注入通道。连续模式下唯一的例外情况是,注入通道配置为在规则通道之后自动转换(使用JAUTO位)。

4.注入转换扫描模式

触发注入在规则通道组转换期间出现外部注入,则当前的转换会复位,并且注入通道序列会切换为单次扫描模式。然后,规则通道组的规则转换会从上次中断的规则转换处恢复

如果在注入转换期间出现规则事件,注入转换不会中断,但在注入序列结束时会执行规则序列。
在这里插入图片描述

自动注入:注入组中的通道会在规则组通道之后自动转换。这可用于转换最多由20个转换构成的序列

5.多重ADC同时模式

一次触发,多个ADC同时转换通道数据

在这里插入图片描述

在具有两个或更多ADC的器件中,可使用双重(具有两个ADC)和三重(具有三个ADC)ADC模式。多重ADC模式主要解决的问题是:在保证高精度下,提高采样率。

6.多重ADC交替模式

两个或者三个ADC交替对一个通道采样
在这里插入图片描述

7.多重ADC交替触发模式

双重ADC模式:
发生第一次触发时,将转换 ADC1 中注入组的所有通道
发生第二次触发时,将转换 ADC2 中注入组的所有通道
以此类推
在这里插入图片描述

三、ADC配置(STM32CubeMX)

G4原理图
在这里插入图片描述
在这里插入图片描述
将PB15,PB12配置成ADC2的IN15,ADC1IN11通道
在这里插入图片描述
使能ADC2的通道15
在这里插入图片描述
配置ADC的参数
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
ADC时钟的选择
在这里插入图片描述

若没有使用DMA,上面的ADC差不多配置完了

四、部分程序

STM32CubeMX会配置好ADC的初始化,我们只要写ADC的采样函数即可
调用HAL函数即可,HAL_ADC_GetValue()得到返回值。注意,在调用该函数之前一定要初始化adc的句柄。

uint16_t getADC1(void)
{uint16_t adc = 0;HAL_ADC_Start(&hadc1);adc = HAL_ADC_GetValue(&hadc1);return adc;
}

总结

提示:这里对文章进行总结:

这篇关于STM32G4之ADC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/420333

相关文章

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

学习硬件测试05:NTC(ADC)+正弦波(DAC)+DMA(ADC+DAC)(P73、P76、P78)

文章以下内容全部为硬件相关知识,鲜有软件知识,并且记的是自己需要的部分,大家可能看不明白。 一、NTC(ADC) 1.1实验现象 本实验用 NTC 采集温度,数码管实时显示温度数据(整数),左下角 USB 小串口每隔 1S 打印温度信息。 1.2硬件电路 NTC 电阻是一个模拟温度传感器,随着温度的升高,电阻值逐渐减小。电路简单介绍如下: 电源滤波电容在 25℃ 室温下 NTC 电

STM32CubeMX 2 解锁ADC模块

掏出上次写完的project。选择引脚 选择PA4和ADC1_IN4 2.选择设置配置 3.发现改完前面的配置之后这里的时钟自动变成了56, 选定,改回72. 4.改configuration,双击ADC1 跳出如下界面: Mode 选independent mode Data Alignment选Right Aligment是为了方便读数,因为这是一个12位的AD

嵌入式s3c2240: ADC

ADC :模数转换 10 位 CMOS ADC (模 / 数转换器)是一个 8 通道模拟输入的再循环类型设备。其转换模拟输入信号为 10 位二进制数字编码,最大转换率为 2.5MHz A/D 转换器时钟下的 500 KSPS 。 模拟:连续信号 数字:离散信号 原理  当采样到信号后, 与各个比较器相比较 假设采样到2.5 2

ADC——模数转换器

一、转换流程 在处理器中主要进行ADC 1、AD转换流程 :采样、保持、量化、编码 通过比较器获得的电信号转换数字信号,根据自己需求,如果要求速率就可以使用较多的比较器,不要求速率考虑成本就可以使用较少的比较器,将最后的转换结果,通过编码来表示 2、转换需要考虑的指标: 量程:0~3.3V 精度:10位 转换速率:500 KSPS 二、使用处理器上的A/D转换器 10 位

物联网——模拟与数字转换器(ADC)

ADC(常用于信号发生器,音频解码器) 逐次逼近型ADC 利用逐次逼近寄存器SAR,二分法逼近未知电压,直到外部输入电压与输出电压保持一致:例如0~225V每次去中间值作为判断电压,逐次二分 stm32的ADC模块 规则通道一次只能选一个数据寄存器,通常搭配DMA使用; 注入通道一次能选4个数据寄存器存相应数值 ADC基本结构 ADC引脚复用 双ADC模式(同步采样

STM32单片机HAL库——ADC输入

一、单通道采集 二、单通道+DMA采集 使能DMA 三、定时器采集+DMA传输 选择定时器1的通道1作为触发源,在TIM1的上升沿进行采集 定时器1挂载在APB2上面,APB2上定时器的频率为168MHZ psc=168-1 arr=1000-1 TIM1的时钟频率为168/168/1000=1kHZ pulse设置为500,占空比为50%

STM32(十):ADC模数转换器

ADC(Analog-Digital Converter)模拟-数字转换器         ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。         12位逐次逼近型ADC,1us转换时间,分辨率:0~2^12-1           输入电压范围:0~3.3V,转换结果范围:0~4095         18个输入通道,可测量16个外

STM32单片机 ADC模数转换器

GPIO只能读取引脚的高低电平,只有两个值 ADC可对任意电压值进行量化,用变量来表示,相当于是电压表,可以测量引脚的具体电压 ADC简介 ADC(Analog-Digital Converter)模拟-数字转换器。 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。 DAC数字电路到模拟电路的桥梁,使用DAC可以将数字变量转换为模拟电压。DA