STM32CubeIde ADC配置详解

        本文旨在记录和说明STM32CubeIde中ADC配置。本人作为STM32新手,在配置ADC时,太多的意义不明的配置项让我摸不着头脑,查阅资料并在这里记录,如果有不对的,欢迎各位大佬指正。

        本文硬件使用ST官方提供的NUCLEO-G474RE+X-NUCLEO-IHM16M1,记录ADC的配置过程。


目录

采样通道配置

配置信息详解

Mode

INx

Temperature Sensor Channel

Vbat Channel

Vrefint Channel

EXTl Conversion Trigger

Configuration

ADCs_Common_Settings

ADC_Settings

Clock Prescaler

Resolution

Data Alignment

Gain Compensation

Scan Conversion Mode

End Of Conversion Selection

Low Power Auto Wait

Continuous Conversion Mode

Discontinuous Conversion Mode

Number Of Discontinuous Conversions

DMA Continuous Requests

Overrun behaviour

ADC_Regular_ConversionMode

Enable Regular Conversion

Enable Regular Oversampling

Number Of Conversion

External Trigger Conversion Source/Edge

Rank

Channel

Sampling Time

Offset Number

ADC_Injected_ConversionMode

Analog Watchdog


采样通道配置

根据X-NUCLEO-IHM16M1的文档,配置采集母线电压、UVW相电流的4个ADC通道,配置如下

配置信息详解

Mode

INx

ADC输入方式:单端输入和差分输入(single-ended input and differential input)

单端输入:

单端输入只有一个输入引脚ADCIN,使用公共地GND作为电路的返回端,ADC的采样值=ADCIN电压-GND的电压(0V)。这种输入方式优点就是简单,缺点是如果vin受到干扰,由于GND电位始终是0V,所以最终ADC的采样值也会随着干扰而变化。

差分输入:

差分输入比单端输入多了一根线,最终的ADC采样值=(ADCIN电压)-(ADCIN-电压),由于通常这两根差分线会布在一起,所以他们受到的干扰是差不多的,输入共模干扰,在输入ADC时会被减掉,从而降低了干扰,缺点就是接线复杂一些。而且需要VIN+和VIN-两路反相的输入信号。
我们这里不考虑那么复杂,选择单端输入即可。

Temperature Sensor Channel

测量结温的温度传感器。温度传感器内部连接到ADC输入通道,用于将传感器输出电压转换为数字值。(结温:是电子设备中半导体的实际工作温度)

我们这里不使用温度传感器,不勾选即可。

Vbat Channel

测量电池电压的通道,为防止电池电压超过ADC的工作电压,输出结果为三分之一电池电压,我们不需要采集电池电压,这里不勾选。

Vrefint Channel

测量内部参考电压的通道,给ADC基准参考正电压Vref+作为一个参考点。我们这里不需要采集,不勾选即可。

EXTl Conversion Trigger

ADC 的触发转换有两种方法: 分别是通过软件或外部事件(也就是硬件)触发转换
软件触发转换的方法是:通过对 ADCx_CR 寄存器的 ADSTART(JADSTART)位写 1 开始转换,转换结束由硬件清零该位,这个控制 ADC转换的方式非常简单。

另一种就是通过外部事件触发转换的方法,如定时器和输入引脚触发等等。如果选择硬件触发,则需要选择相应的硬件触发事件和触发边沿等,然后由外部硬件事件来触发 ADC 的采集。具体配置在下方的ADC_Regular_ConversionMode

这里我们不使用硬件触发,选择Disable即可

Configuration

参考资料

STM32笔记(1)———ADC模数转换器原理及单、双通道转换_adc的转换模式-CSDN博客

ADCs_Common_Settings

ADC的工作模式,我们这里的ADC只进行采样,在同一引脚上仅有一个ADC在采集模拟信号,不与其他工作模式混合工作,所以我们选择Independent mode即可

但其他工作模式具体的效果,还不太清楚,如果大佬知道,可以告知。

ADC_Settings

Clock Prescaler

(2)同步时钟源独立于系统和AHB时钟

ADC 有两种时钟源可以选择, 分别是:
( 1) adc_hclk(属于同步时钟), 来自 AHB2总线170MHz的系统时钟,比如我们选择 4 分频的adc_hclk,得到的频率是 42.5MHz, 注意数据手册中明确限制ADC 时钟频率最高能到 60MHz,切记不可超频,因为超频误差会比较大。 同步时钟源优点是从分频器到转换开始无抖动。
(2) adc_ker_ck(属于异步时钟),可以选择PLL 锁相环和系统时钟作为时钟源。异步时钟的优点是进行更好的ADC频率调整,调整范围从1~256,范围更大。

实际中我们选择 adc_hclk 作为 ADC 时钟源,并选择4分频。好处就是绕过了时钟域重新同步,进而使其被触发时没有任何的不确定性。

Resolution

分辨率:我们这里直接选择最大的分辨率,12bit

Data Alignment

数据对齐方式:转换后的结果存储在32位数据寄存器中,12位的数据选择数据对齐方式为左对齐或右对齐,这里我们选择默认右对齐。

Gain Compensation

增益补偿:对所有转换后的数据进行增益补偿。每次转换后,数据根据增益补偿对采样后的数据进行变换,这里我们不进行补偿。

Scan Conversion Mode

扫描转换模式:当转换数量为1时,只能设置为Disable,当转换数量大于1时,该模式自动为Enable。一个通道不需要打开,当有多个通道需要采集信号时必须开启扫描模式,此时ADC将会按设定的顺序轮流采集各通道信号

End Of Conversion Selection

转换结束标志选择:指定转换结束后是否产生EOS中断或事件标志

在多通道转换过程中,如果选择了End of sequence of conversion,会在一组数据转换完成后发出EOS标志,如下图所示。如果不选,则不会置位该标志。

这里我们不需要使用EOS,选择单次转换结束标志(End of single conversion)即可。

Low Power Auto Wait

低功耗自动延迟等待模式,可选参数为 ENABLE 和 DISABLE,当使能时,仅当一组内所有之前的数据已处理完毕时,才开始新的转换,适用于低频应用。该模式仅用于 ADC 的轮询模式,不可用于 DMA 以及中断。我们不使用。

Continuous Conversion Mode

可选参数为 ENABLE 和 DISABLE,配置自动连续转换还是单次转换。

使用 ENABLE 配置为使能自动连续转换,在连续转换模式下,ADC执行一次通道的所有规则转换,然后自动重启并连续转换序列的每个转换

使用 DISABLE 配置为单次转换,转换一次后停止需要手动控制才重新启动转换。

 我们使能连续转换模式。

Discontinuous Conversion Mode

不连续转换模式:配置是否使用规则通道组间断模式,比如要转换的通道有 1、 2、5、 7、 8、 9,那么第一次触发会进行通道 1 和 2,下次触发就是转换通道 5 和 7,这样不连续的转换,依次类推。此参数只有将 ScanConvMode 使能,还有 ContinuousConvMode失能的情况下才有效,不可同时使能。

我们这里不需要该功能,不使能。

Number Of Discontinuous Conversions

配置不连续转换模式的通道个数,只有不连续转换模式使能该配置项才会出现。

DMA Continuous Requests

DMA连续请求:指定 DMA 请求是否以一次性模式执行(当达到转换次数时,DMA 传输停止)或在连续模式下(DMA 传输无限制,无论转换的数量)。注:在连续模式下,DMA 必须配置为循环模式。否则,当达到 DMA 缓冲区最大指针时将触发溢出。

不使能:在这种模式下,每次有新的转换数据可用时,ADC都会生成一个DMA传输请求,一旦DMA到达最后一个DMA传输,即使转换已经再次开始,ADC也会停止生成DMA请求,适合转换固定数量数据的情况。

使能:在这种模式下,每当数据寄存器中有新的转换数据可用时,即使DMA已经到达最后一次DMA传输,ADC也会生成DMA传输请求。这允许在循环模式下配置DMA来处理连续的模拟输入数据流。

我们这里选择使能。

Overrun behaviour

超限行为:当发生超限事件时,可以选择数据是保留还是覆盖

Overrun data preserved:保留旧数据,丢弃和丢失新的转换。

Overrun data overwritten:数据寄存器被最后一次转换的结果覆盖,之前未读的数据丢失

我们选择覆写数据

ADC_Regular_ConversionMode

Enable Regular Conversion

常规装换使能

Enable Regular Oversampling

常规过采样使能。

不太明白,我们不使用

Number Of Conversion

根据ADC配置的通道数来选择,这里我们ADC1配置了3个采样通道,所以我们设置3

External Trigger Conversion Source/Edge

我们不使用硬件触发,使用软件触发。

Rank

在常规转换中的常规组的转换顺序,可以选择 1~16
 

Channel

这个转换对应哪个采样通道

Sampling Time

采样时间:配置多少个时钟周期,建议采样时间尽量长一点,以获得较高的准确度。

总的转换时间=采样时间+逐次逼近时间(TSAR)。

逐次逼近时间由分辨率决定,对应关系如下

这里我们使用4分频170MHz,12bit分辨率,47.5周期采样时间,总的转换时间为

T_{conv}=\frac{1}{170000000/4}*(47.5+12.5)=1.41\mu s

Offset Number

我们不进行偏移补偿。

ADC_Injected_ConversionMode

不使能注入转换

Analog Watchdog

不使用看门狗


 

  • 34
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值