赞
踩
本文旨在记录和说明STM32CubeIde中ADC配置。本人作为STM32新手,在配置ADC时,太多的意义不明的配置项让我摸不着头脑,查阅资料并在这里记录,如果有不对的,欢迎各位大佬指正。
本文硬件使用ST官方提供的NUCLEO-G474RE+X-NUCLEO-IHM16M1,记录ADC的配置过程。
目录
Number Of Discontinuous Conversions
External Trigger Conversion Source/Edge
根据X-NUCLEO-IHM16M1的文档,配置采集母线电压、UVW相电流的4个ADC通道,配置如下
ADC输入方式:单端输入和差分输入(single-ended input and differential input)。
单端输入:
单端输入只有一个输入引脚ADCIN,使用公共地GND作为电路的返回端,ADC的采样值=ADCIN电压-GND的电压(0V)。这种输入方式优点就是简单,缺点是如果vin受到干扰,由于GND电位始终是0V,所以最终ADC的采样值也会随着干扰而变化。
差分输入:
差分输入比单端输入多了一根线,最终的ADC采样值=(ADCIN电压)-(ADCIN-电压),由于通常这两根差分线会布在一起,所以他们受到的干扰是差不多的,输入共模干扰,在输入ADC时会被减掉,从而降低了干扰,缺点就是接线复杂一些。而且需要VIN+和VIN-两路反相的输入信号。
我们这里不考虑那么复杂,选择单端输入即可。
测量结温的温度传感器。温度传感器内部连接到ADC输入通道,用于将传感器输出电压转换为数字值。(结温:是电子设备中半导体的实际工作温度)
我们这里不使用温度传感器,不勾选即可。
测量电池电压的通道,为防止电池电压超过ADC的工作电压,输出结果为三分之一电池电压,我们不需要采集电池电压,这里不勾选。
测量内部参考电压的通道,给ADC基准参考正电压Vref+作为一个参考点。我们这里不需要采集,不勾选即可。
ADC 的触发转换有两种方法: 分别是通过软件或外部事件(也就是硬件)触发转换。
软件触发转换的方法是:通过对 ADCx_CR 寄存器的 ADSTART(JADSTART)位写 1 开始转换,转换结束由硬件清零该位,这个控制 ADC转换的方式非常简单。
另一种就是通过外部事件触发转换的方法,如定时器和输入引脚触发等等。如果选择硬件触发,则需要选择相应的硬件触发事件和触发边沿等,然后由外部硬件事件来触发 ADC 的采集。具体配置在下方的ADC_Regular_ConversionMode
这里我们不使用硬件触发,选择Disable即可
参考资料
ADC的工作模式,我们这里的ADC只进行采样,在同一引脚上仅有一个ADC在采集模拟信号,不与其他工作模式混合工作,所以我们选择Independent mode即可。
但其他工作模式具体的效果,还不太清楚,如果大佬知道,可以告知。
(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分频。好处就是绕过了时钟域重新同步,进而使其被触发时没有任何的不确定性。
分辨率:我们这里直接选择最大的分辨率,12bit
数据对齐方式:转换后的结果存储在32位数据寄存器中,12位的数据选择数据对齐方式为左对齐或右对齐,这里我们选择默认右对齐。
增益补偿:对所有转换后的数据进行增益补偿。每次转换后,数据根据增益补偿对采样后的数据进行变换,这里我们不进行补偿。
扫描转换模式:当转换数量为1时,只能设置为Disable,当转换数量大于1时,该模式自动为Enable。一个通道不需要打开,当有多个通道需要采集信号时必须开启扫描模式,此时ADC将会按设定的顺序轮流采集各通道信号。
转换结束标志选择:指定转换结束后是否产生EOS中断或事件标志。
在多通道转换过程中,如果选择了End of sequence of conversion,会在一组数据转换完成后发出EOS标志,如下图所示。如果不选,则不会置位该标志。
这里我们不需要使用EOS,选择单次转换结束标志(End of single conversion)即可。
低功耗自动延迟等待模式,可选参数为 ENABLE 和 DISABLE,当使能时,仅当一组内所有之前的数据已处理完毕时,才开始新的转换,适用于低频应用。该模式仅用于 ADC 的轮询模式,不可用于 DMA 以及中断。我们不使用。
可选参数为 ENABLE 和 DISABLE,配置自动连续转换还是单次转换。
使用 ENABLE 配置为使能自动连续转换,在连续转换模式下,ADC执行一次通道的所有规则转换,然后自动重启并连续转换序列的每个转换;
使用 DISABLE 配置为单次转换,转换一次后停止需要手动控制才重新启动转换。
我们使能连续转换模式。
不连续转换模式:配置是否使用规则通道组间断模式,比如要转换的通道有 1、 2、5、 7、 8、 9,那么第一次触发会进行通道 1 和 2,下次触发就是转换通道 5 和 7,这样不连续的转换,依次类推。此参数只有将 ScanConvMode 使能,还有 ContinuousConvMode失能的情况下才有效,不可同时使能。
我们这里不需要该功能,不使能。
配置不连续转换模式的通道个数,只有不连续转换模式使能该配置项才会出现。
DMA连续请求:指定 DMA 请求是否以一次性模式执行(当达到转换次数时,DMA 传输停止)或在连续模式下(DMA 传输无限制,无论转换的数量)。注:在连续模式下,DMA 必须配置为循环模式。否则,当达到 DMA 缓冲区最大指针时将触发溢出。
不使能:在这种模式下,每次有新的转换数据可用时,ADC都会生成一个DMA传输请求,一旦DMA到达最后一个DMA传输,即使转换已经再次开始,ADC也会停止生成DMA请求,适合转换固定数量数据的情况。
使能:在这种模式下,每当数据寄存器中有新的转换数据可用时,即使DMA已经到达最后一次DMA传输,ADC也会生成DMA传输请求。这允许在循环模式下配置DMA来处理连续的模拟输入数据流。
我们这里选择使能。
超限行为:当发生超限事件时,可以选择数据是保留还是覆盖。
Overrun data preserved:保留旧数据,丢弃和丢失新的转换。
Overrun data overwritten:数据寄存器被最后一次转换的结果覆盖,之前未读的数据丢失
我们选择覆写数据
常规装换使能
常规过采样使能。
不太明白,我们不使用
根据ADC配置的通道数来选择,这里我们ADC1配置了3个采样通道,所以我们设置3
我们不使用硬件触发,使用软件触发。
在常规转换中的常规组的转换顺序,可以选择 1~16
这个转换对应哪个采样通道
采样时间:配置多少个时钟周期,建议采样时间尽量长一点,以获得较高的准确度。
总的转换时间=采样时间+逐次逼近时间(TSAR)。
逐次逼近时间由分辨率决定,对应关系如下
这里我们使用4分频170MHz,12bit分辨率,47.5周期采样时间,总的转换时间为
我们不进行偏移补偿。
不使能注入转换
不使用看门狗
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。