打印
[开发工具]

梳理ADC模数转换器在CubeMX上的配置

[复制链接]
2263|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一、前言
为了正确使用STM32H7上的ADC模数转换器,必须先把CubeMX上的ADC配置梳理一遍。为此,在ADC1上开启通道IN2与通道IN6为例学习如何配置CubeMX。

二、Cloack Configuration
配置ADC的时钟源adc_ker_ck的频率为72M。有了72M的时钟源,ADC1,ADC2,ADC3就能经过异步时钟模式2分频得到36M的最高的工作频率。下面介绍Parameter Settings配置时讲到如何配置异步时钟模式2分频。




使用特权

评论回复
沙发
木木guainv|  楼主 | 2021-9-4 15:09 | 只看该作者
三、ADC1 Mode and Configuration


使用特权

评论回复
板凳
木木guainv|  楼主 | 2021-9-4 15:10 | 只看该作者
四、Configuration

Parameter Settings的细节有一点多,学习ADC的重点。


使用特权

评论回复
地板
木木guainv|  楼主 | 2021-9-4 15:11 | 只看该作者
4.1、ADC_Setting
4.1.1、Clock Prescaler(时钟预分频)
目的是让ADC的工作频率达到36M(ADC工作频率超过36M会不稳定)。异步时钟模式(基于PLL2P时钟)可以选择Asynchronous clock mode divided by 1,2,4,6,8,10,12,16,32,64,128,256,同步时钟模式(基于AHB时钟)可以选择Synchronous clock mode divided by 1,2,4。在上面的时钟配置上,adc_ker_ck的时钟频率为70M,所以使用Asynchronous clock mode divided by 2就能让ADC的工作频率为36M。


值得注意,同步时钟模式任何选项都会让ADC的工作频率超过36M。STM32H743的时钟频率是480M,所以AHB时钟频率是240M。就算选择Synchronous clock mode divided by 4, ADC的工作频率也超过36M(240M/4 = 60M)。那么同步时钟模式就那么没有使用的价值吗?查看官方手册,同步模式的优点在于ADC与定时器都基于AHB时钟,那么定时器触发定时器时,ADC的同步触发能更加精确。



使用特权

评论回复
5
木木guainv|  楼主 | 2021-9-4 15:12 | 只看该作者
4.1.2、Resolution(分辨率)

分辨率越高,逐次逼近转换时间越长。根据实际的项目要求选择分辨率即可。


使用特权

评论回复
6
木木guainv|  楼主 | 2021-9-4 15:12 | 只看该作者
4.1.3、Scan Conversion Mode(扫描模式)
当使能一个以上通道时,默认开启。


4.1.4、Continuous Conversion Mode(连续转换模式)
选择是否使能连续转换模式。不使能相当于单次转换模式,ADC会将通道的所有转换执行一次。使能的话,相当于连续转换模式,该模式用于常规通道。在连续转换模式下,如果发生软件或者硬件触发,ADC会执行所有常规通道的转换,随后会自动重启并继续执行每一个通道的转换。若想使用ADC+DMA的话,必须先使能连续转换模式。


4.1.5、Discontinuous Conversion Mode(不连续序列转换模式)
配置ADC规则组转换序列的不连续方式。这里的不连续含义是指每次触发进行一个子组的转换,跟Continuous Conversion Mode的连续含义不一样。例如使能了该配置,该参数的下方就立马出现Number Of Discontinuous Conversions,如果它设为2,且ADC1使能了通道1,2,5,7,10,11的话,那么第一次触发ADC1采样时,就会采样通道1与通道2的值,再一次触发ADC1采样的话,就会采样通道5与通道7值,如此类推。值得注意的是,Continuous Conversion Mode与Discontinuous Conversion Mode不能同时使能,两者不能共存。



4.1.6、End of Conversion Selection(结束转换的选择)
选择结束转换的事件。有End of single conversion(EOC) 与 End of sequence of conversion(EOS)两种选择。这两个事件会触发中断与DMA。一般选择EOS,等所有通道转换完毕后,产生中断后将全部数据取出来,或者使用DMA将全部数据取出来。



使用特权

评论回复
7
木木guainv|  楼主 | 2021-9-4 15:13 | 只看该作者
4.1.7、Overrun behaviour(溢出处理行为)

选择Overrun data overwritten。ADC+DMA是很好的组合,根据安富莱的解释,有了DMA的话,不管怎样都会溢出错误。


使用特权

评论回复
8
木木guainv|  楼主 | 2021-9-4 15:14 | 只看该作者
4.1.8、Left Bit Shift(左移位数)
选择No bit shift即可。可以选择0 ~ 15bit shift,一般不使用它。


4.1.9、Conversion Data Managerment Mode(转换数据管理模式)
不使用DMA的话,不使用DFSDM数字滤波器做后期处理的话,选择Regular Conversion data stored in DR register only即可。其实就是选择存放转换完成的模拟量数据的地方而已。


4.1.10、Low Power Auto Wait(低功耗自动等待)
有低功耗要求的话,就使能。



使用特权

评论回复
9
木木guainv|  楼主 | 2021-9-4 15:15 | 只看该作者
4.2、ADC Regular ConversionMode4.2.1、Enable Regular Conversions(使能规则转换)

使能它才能采集各个通道上的模拟量。

4.2.2、Enable Regular Oversamping(使能规则过采样)

使能过采样。有一些细节稍微需要注意一下。

4.2.3、Oversamping Right Shift(过采样位右移)

过采样器能将累加的采样值进行右移。有什么用?比如过采样设置15,那么将采集16个值进行累加。接着配置右移动4位的话,相当于将刚才的累加值除以16,得到平均值。不需要在程序里求平均了。当然,如果大家喜欢在程序里求平均值也是可以的。



使用特权

评论回复
10
木木guainv|  楼主 | 2021-9-4 15:16 | 只看该作者
4.2.4、Oversamping Ratio(过采样率)
过采样器会进行数据预处理,以减轻CPU的负担。例如过采样设置15,将采样16个值,将16个值进行累加。一般的单片机可能不支持过采样,那么只能用程序实现累加了。总得来说,Oversamping Ratio帮助CPU累加采样值,Oversamping Right Shift帮助CPU求平均值。





使用特权

评论回复
11
木木guainv|  楼主 | 2021-9-4 15:18 | 只看该作者
4.2.5、Regular Oversamping Mode(规则过采样模式)

一般使用Oversampling Continued Mode。另外一个Oversamping Resumed Mode不知道是什么意思,后续继续研究。

4.2.6、Triggered Regular Oversampling(规则过采样捕捉)

选择捕捉的方式,捕捉等待所有过采样转换结束(Signal Trigger for all oversampled conversions)。另外一个是捕捉每一个过采样转换结束。

4.2.7、Numer of Conversion(转换通道的数量)

转换通道的数量(支持1 - 16)。


使用特权

评论回复
12
木木guainv|  楼主 | 2021-9-4 15:19 | 只看该作者
4.2.8、External Trigger Conversion Soure(触发转换的外部来源)
选择触发转换的来源:

Regular Conversion launched by software (软件触发)
Timer 1 Capture Compare 1 event (定时器1捕获比较事件1)
Timer 1 Capture Compare 2 event(定时器1捕获比较事件2)
Timer 1 Capture Compare 3 event(定时器1捕获比较事件3)
… (各种定时器触发来源)
除软件触发外,其他基本都是定时器触发。关于定时器的使用笔记如下:
STM32H743+CubeMX-定时器TIM输出PWM(PWM Generation模式)
STM32H743+CubeMX-定时器TIM输出PWM(Output Compare模式)


4.2.9、External Trigger Conversion Edge(触发转换的外部沿)
选择定时器触发时,需要进一步选择触发的沿。选择软件触发时,该项为None。

Trigger detection on the rising edge(上升沿)
Trigger detection on the falling edge(下降沿)
Trigger detection on the rising and falling edge(上升与下降沿)

4.2.10、Rank
  • Channel
    选择采样的通道
  • Sampling Time
    过采样的时间。ADC的采样速度 = 过采样时间 + 逐次逼近时间
  • Offset Number
    摘自安富莱教程
  • Offset Signed Saturation
    摘自安富莱教程


使用特权

评论回复
13
木木guainv|  楼主 | 2021-9-4 15:20 | 只看该作者
4.3、Analog Watchdog

比如使用模拟窗口看门狗监控CPU的温度,超过设定的阀值就产生看门狗中断,防止CPU的温度过高。在监控CPU的温度上有一定的使用价值。


使用特权

评论回复
14
麻花油条| | 2021-9-4 19:36 | 只看该作者
梳理的不错,楼主辛苦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

156

主题

4130

帖子

5

粉丝