adc使用

adc复用通道需要我们进行复用

例子图
想到自己以前一开始遇到这个时候也不是很明白。于是,今天就拿出来讲解一下,我们就拿图片中的PA0来说,它的复用引脚的ADC123_IN0其实并不是ADC123的通道0,而是该引脚可以分别做为ADC1的通道0来用(ADC1_IN0),也可以作为ADC2以及ADC3的通道0来用(ADC2_IN0和ADC3_IN0)。

ADC复用通道

  ADC复用通道是模拟电压的输入通路,F4系列共有19个ADC复用通道,其中16个外部通道3个内部通道

在这里插入图片描述

外部通道

  其中16个外部通道可用于测量外部模拟信号,这些通道在所有ADC外设(ADC1、ADC2和ADC3)上均可用。但要注意多个ADC对同一通道的采样时间不能重叠

内部通道

  3个内部通道分别连接到温度传感器内部参考电压VBAT。这些通道仅在主ADC1外设上可用,并且采样时间应满足数据手册中的要求。

不连接到外部接口(也没有办法连接)的ADC通道,一般用于芯片自身工作状态监控。

规则通道

  STM32F4系列MCU最多仅有3个ADC转换器,基础型MCU甚至只有1个ADC转换器,而ADC通道则多达19个。实际应用中通常需要测量多路模拟信号,因此ADC要能够按照指定的转换顺序分时转换多路模拟量。

  规则组可以设置由1个或多个ADC通道组成的转换序列,当启动转换时,ADC将按照转换序列中指定的ADC通道顺序和序列长度进行转换。

ADC_NbrOfChannel是设置要转换的总通道数,ADC_RegularChannelConfig()是配置各个通道,里面的第2个参数是你的通道名,第3个参数是这个通道名的转换顺序号,就是转换顺序怎么定义的,就是在第3个参数定义的,第四个参数ADC_SampleTime: The sample time value to be set for the selected channel. 要为选定通道设置的采样时间值。例,ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5);ADC_RegularChannelConfig(ADC1,ADC_Channel_5,2,ADC_SampleTime_239Cycles5);
  

在这里插入图片描述

  
  一个规则转换组最多由16个转换构成, 规则通道的转换结果储存在规则数据寄存器 (ADC_DR)中。所有规则通道的转换结果均共用此规则数据寄存器,因此为避免数据丢失,在每个通道转换完毕时应尽快将转换结果读出,如果转换足够快则应使用DMA传输来将转换结果传输到SRAM。

在这里插入图片描述

注入通道

  如果将规则通道比作普通C函数,则注入通道就像是中断服务函数一样。注入通道可以中断规则通道的转换,然后在注入通道组转换完成后,规则通道组的规则转换会从上次中断的规则转换处恢复。

  注入组可以设置由1个或多个ADC通道组成的转换序列,当启动转换时,ADC将按照转换序列中指定的ADC通道顺序和序列长度进行转换。

  一个注入转换组最多由4个转换构成, 注入通道的转换结果储存在注入数据寄存器 x (ADC_JDRx) (x= 1…4)中。它们包括来自注入通道 X 的转换结果。

规则通道和注入通道基本区别

  • 规则通道多达16个通道,而注入通道只有4个通道。
  • 每个注入通道均有一个用于储存转换结果的注入数据寄存器,而所有规则通道均共用一个规则数据寄存器。
  • 注入通道可以中断规则通道的转换,然后再恢复规则通道的转换。

此部分来自于STM32F4系列ADC通道之——ADC复用通道、规则通道和注入通道_BenBenF19的博客-CSDN博客_adc通道

如下图,我们把框图分为7个部分
在这里插入图片描述
第一部分
:电压的输入范围,我们的STM32的GPIO的电压最高为3.3V,对于ADC输入电压的范围为VREF- ≤ VIN ≤ VREF+,决定输入电压的引脚:VREF-,VREF+ , VDDA ,VSSA VSSA和VREF-接地,把 VREF+和 VDDA 接 3V3,得到ADC的输入电压范围为:0-3.3v,如下图的原理图所示
在这里插入图片描述
第二,三部分:
该部分为输入通道,如图所示,外部的16个通道在转化的时候又分为规则通道和注入通道,其中规则通道最多有16路,注入通道最多有4路,顾名思意,规则通道就是很规矩的意思,我们平时一般使用的就是这个通道,注入通道可以理解为插入,插队的意思,是一种不安分的通道.它是一种在规则通道转换的时候强行插入要转换的一种.这点跟中断程序很像.都是不安分的主.所以,注入通道只有在规则通道存在时才会出现
å¨è¿éæå¥å¾çæè¿°
但我们需要知道的是如果选择了温度通道,不像其他通道我们不必初始化gpio

对于规则通道,通道的转化先后由ADC_SQR1,ADC_SQR2,ADC_SQR3三个寄存器来设置,每个寄存器有24个位,每4位设置哪一个通道,如下图所示,对于ADC_SQR3寄存器的[23:20]来设置需要转换多少个通道1
在这里插入图片描述
对于注入通道,注入序列寄存器JSQR只有一个,最多支持4个通道,具体多少个由JSQR的JL[2:0]决定,如果JL的值小于4的话,则JSQR跟SQR决定转换顺序的设置不一样,第一次转换的不是JSQR1[4:0],而是JCQRx[4:0],x = (4-JL),跟SQR刚好相反,如果JL=00(1个转化),那么转化的顺序是从JSQR4[4:0]开始,而不是从JSQR[4:0]开始,这个要注意,当JL等于4时,跟SQR一样.
在这里插入图片描述
第四部分
该部分为触发源,触发源相当于一个信号,告诉我们ADC可以转换了,触发源有软件触发和外部事件触发,对于软件触发,ADC_CR2寄存器中的ADON用以开启ADC并启动转化(总开关),ADC_CR2中的SWST和JSWSTART用来开启规则通道和注入通道的转化,对于外部事件触发,规则通道可以通过ADC_CR2中的EXTSEL[2:0]选择哪个触发源,用ADC_CR2中的EXTEN位开启它,注入通道也是类似
在这里插入图片描述
第五部分
对于ADC的转化时间 Tconv = 采样时间 + 12.5个周期,ADC_CLK为ADC模拟电路时钟,最大值14M,由 PCLK2提供,还可分频,2/4/6/8,RCC_CFGR 的 ADCPRE[1:0]设置,数字时钟RCC_APB2ENR用于访问寄存器,ADC需要若干个 ADC_CLK 周期完成对输入的模拟量迚行采样,采样的周期数可通过ADC采样时间寄存器 ADC_SMPR1 和 ADC_SMPR2 中的 SMPx[2:0]位设置,ADC_SMPR2控制的是通道 0-9,ADC_SMPR1 控制的是通 道 10~17.每个通道可以分别用不同的时间采样。其中采样 周期最小是 1.5 个
第六部分
一切准备就绪后, ADC 转换后的数据根据转换组的不同,规则通道的数据放在ADC_DR 寄存器,注入通道的数据放在JDRx,ADC_DR 寄存器1-16位有效,用于存放独立模式转化完成的数据,但是我们的ADC分辨率是12位的,所以我们还需要设置ADC_CR2的ALIGN来确定是左对齐还是右对齐,多通道采集最好使用DMA
第七部分
该部分为中断部分,其中两个是转化结束后的中断,模拟看门狗中断用于检测到电压的阙值,阙值超过则产生中断报警
在这里插入图片描述

 

看你的AD设置的是几位的,如果是N位的,假定你AD采集的数字量为M,基准电压为V则模拟量为:
V乘以M除以2的N次方。
假设V为3.3,N为8,则模拟量为:3.3*M/256
使用标度标度变换公式,将数字量转换成带有物理单位的实际值。
例如: 假设温度检测传感器测量温度范围是A0~Am,转换后的电压经
AD转换器转换的数字量是8位的,则其范围是00H~OFFH。
则如果某一时刻,AD转换器转换的数字量是N,那么测量的实际温度
为A,
  根据线性传感器、AD转换器转换器的转换信号的关系:可以推出
   A=(Am-A0)*N/(255-0)+A0

在这里插入图片描述

ADC_Mode:表示ADC工作的模式,由ADC_CR1的[16:19]来控制,想要使用哪种模式就设置该模式对应的二进制即可,具体参考STMf10x中文参考手册,一般我们选择独立模式,表示ADC1,2,3单独使用,剩下的模式都是双重模式,表示ADC1,2一起使用, 对于双重模式有以下几种
在这里插入图片描述
在这里插入图片描述
ADC_ScanConvMode:ADC的扫描模式,配置ADC_CR1的SCAN位,扫描模式指的是不断扫描ADC1,2,3,扫描多用在多通道上
ADC_ContinuousConvMode:连续转换模式,配置的是ADC_CR2的CON位,表示ADC通道连续采集,一次采集转化完继续采集
ADC_ExternalTrigConv: 外部触发转换选择, 配置ADC_CR2的EXTTRIG和EXTSEL[2:0],EXTTRIG使能触发源,EXTSEL[2:0]选择哪一个触发源,如果不选择外部触发,可以选择软件触发
ADC_DataAlign:表示对齐模式,因为我们ADC采集的数据放在ADC_DR 寄存器,ADC分辨率是12所以只能放12位,但是ADC_DR寄存器是16位的,所以要选择向左对齐还是向右对齐
ADC_NbrOfChannel:ADC要转化的通道数目,可以设置为1-16STM32F4系列ADC通道之——ADC复用通道、规则通道和注入通道_BenBenF19的博客-CSDN博客_adc通道

此部分来自于

ADC功能框图及其初始化结构体介绍_勇士后卫头盔哥的博客-CSDN博客_adc功能框图

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HAL (Hardware Abstraction Layer) 是一种软件抽象层,用于将硬件操作和应用程序分离开来。在使用 DAC (数字模拟转换器) 和 ADC (模拟数字转换器) 时,HAL 可以帮助我们简化代码,使其更易于理解和维护。 以下是使用 HAL 配置和控制 DAC 和 ADC 的一些基本步骤: 1. 初始化 DAC 和 ADC 的时钟和 GPIO 端口。 ``` __HAL_RCC_DAC_CLK_ENABLE(); //使能 DAC 时钟 __HAL_RCC_ADC1_CLK_ENABLE(); //使能 ADC 时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_4; //将 DAC 输出引脚设置为模拟模式 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); //初始化 DAC 输出引脚 GPIO_InitStruct.Pin = GPIO_PIN_0; //将 ADC 输入引脚设置为模拟模式 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); //初始化 ADC 输入引脚 ``` 2. 配置 DAC 和 ADC。 ``` DAC_HandleTypeDef hdac; hdac.Instance = DAC; //设置 DAC 实例 if (HAL_DAC_Init(&hdac) != HAL_OK) { //初始化 DAC Error_Handler(); } ADC_HandleTypeDef hadc; hadc.Instance = ADC1; //设置 ADC 实例 hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; //设置 ADC 时钟分频器 hadc.Init.Resolution = ADC_RESOLUTION_12B; //设置 ADC 分辨率 hadc.Init.ScanConvMode = DISABLE; //禁用扫描模式 hadc.Init.ContinuousConvMode = DISABLE; //禁用连续转换模式 hadc.Init.DiscontinuousConvMode = DISABLE; //禁用间断转换模式 hadc.Init.NbrOfConversion = 1; //设置转换通道数 hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; //使用软件触发转换 if (HAL_ADC_Init(&hadc) != HAL_OK) { //初始化 ADC Error_Handler(); } ``` 3. 启动 DAC 和 ADC。 ``` uint32_t dac_value = 100; //设置 DAC 输出值 HAL_DAC_Start(&hdac, DAC_CHANNEL_1); //启动 DAC HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_8B_R, dac_value); //设置 DAC 输出值 uint32_t adc_value = 0; //定义 ADC 输出值变量 HAL_ADC_Start(&hadc); //启动 ADC if (HAL_ADC_PollForConversion(&hadc, 1000000) == HAL_OK) { //等待 ADC 转换完成 adc_value = HAL_ADC_GetValue(&hadc); //获取 ADC 输出值 } ``` 以上是使用 HAL 配置和控制 DAC 和 ADC 的基本步骤,具体实现可能会因具体硬件和应用程序而异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值