打印
[MM32硬件]

ADC 外设知识

[复制链接]
楼主: 喂什么玩意
手机看帖
扫描二维码
随时随地手机跟帖
21
喂什么玩意|  楼主 | 2022-7-30 23:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
22
喂什么玩意|  楼主 | 2022-7-30 23:28 | 只看该作者

使用特权

评论回复
23
喂什么玩意|  楼主 | 2022-7-30 23:29 | 只看该作者
根据这些数据表,可以知道参考电压来自电源脚 VDDA 和 VSSA ,且内部 VSSA 与 VSS 是连接在一起的,如果将 VDDA 与 VDD 分开供电,那么 VDDA 不能超过 VDD 电压且压差保持在 100mV 以内。有效分辨率位数达到 10.7 位,在工程值可接受范围内。需要避免在任何标准的模拟输入引脚上注入反向电 流,因为这样会显著地降低另一个模拟输入引脚上正在进行的转换精度。可在可能产生反向注入电流的标准模拟引脚上(引脚与地之间)增加一个肖特基二极管。静态线性误差几乎都在 8 个 LSB 以内,精度比较高。

使用特权

评论回复
24
喂什么玩意|  楼主 | 2022-7-30 23:30 | 只看该作者
三、功能描述和寄存器

1. 中断

当配置中断使能后,中断事件发生后将产生相应的中断请求,不同工作序列和工作模式中涉及到不同的中断标志,具体有以下状态标志位:

使用特权

评论回复
25
喂什么玩意|  楼主 | 2022-7-30 23:32 | 只看该作者

使用特权

评论回复
26
喂什么玩意|  楼主 | 2022-7-30 23:32 | 只看该作者
每个状态标志位都会在相应事件发生后置位,同时发出中断请求给到 CPU ,如果正确配置并且开启 ADC 的 NVIC 通道那么就会产生中断响应,然后在响应服务函数中根据不同的标志位置位情况分别进行处理。这些标志位中,标注为 rc_w1 的表示可以写 “1” 清除。

使用特权

评论回复
27
喂什么玩意|  楼主 | 2022-7-30 23:33 | 只看该作者
2. DMA 响应
A/D 转换结果存储在数据寄存器 ADC_ADDATA 中,当多个通道连续转换时可以使用 DMA 访问保存数据,避免转换数据丢失,当然一个通道转换也是可以用 DMA的 ;
DMA 使能开启后,当通道转换结束后将产生 DMA 请求,将转换数据从 ADC_ADDATA 寄存器传输到软件指定的目的地址;

使用特权

评论回复
28
喂什么玩意|  楼主 | 2022-7-30 23:34 | 只看该作者
每个通道有对应的数据寄存器 ADC_ADDRn,可访问这些寄存器获取各通道转换结果,当然也可以将 ADC DMA 通道的源地址设置为 ADC_ADDRn ;
ADC DMA 通道重映射(ADC DMA remap) 在 SYSCFG_CFGR Bit 8 中配置

0:ADC 的 DMA 功能映射到 DMA channel1
1:ADC 的 DMA 功能重映射到 DMA channel2

使用特权

评论回复
29
喂什么玩意|  楼主 | 2022-7-30 23:42 | 只看该作者
3. 时钟、分频、分辨率以及采样转换时间
输入时钟与 APB2_CLK 同步,在使用 ADC 之前,需要先使能 RCC 控制器中的时钟使能控制位(RCC_APB2ENR 的 Bit 9);

使用特权

评论回复
30
喂什么玩意|  楼主 | 2022-7-30 23:43 | 只看该作者
ADC 预分频相关寄存器为 ADC_ADCFG 的 ADCPREH 和 ADCPREL,分频值为 (ADC_ADCFG [bit6~4,bit14]+2) ,分频后作为 ADC 工作时钟;
ADC 转换分辨率可通过 ADC_ADCFG.RSLTCTL[2:0] 位配置,有效数据位默认是 12 位数据右对齐,也可以配成左对齐, 通过配置低分辨率可加快数据转换速率;
采样转换频率计算公式 : Fsample = Fadc_clk /(m+n+0.5) ,Fadc_clk 为 ADC 的工作时钟频率,m 为每个通道采样保持周期,不同通道可以有不同的采样保持周期,n 为分辨率,二者皆可通过相关寄存器改变配置。另外可通过该公式计算每个通道转换一次需要的时间 : Tconv = (m+n+0.5) clk,取 n=12 bit,m = 3.5 clk ,Fadc_clk = 16 MHz ,则 1 clk = 1/16 us ,该通道转换一次的时间为 1/16 us * 16 = 1us 。

使用特权

评论回复
31
喂什么玩意|  楼主 | 2022-7-30 23:44 | 只看该作者
4. 采样方式以及通道序列模式
单次采样方式,只对一个指定通道进行 A/D 转换,此时一个通道也称之为一个普通序列,对应 ST 的就是不使能连续模式且通道数为 1;

使用特权

评论回复
32
喂什么玩意|  楼主 | 2022-7-30 23:45 | 只看该作者
单周期扫描采样方式,将使能的通道按顺序(方向可正反改变)进行一次 A/D 转换,对应 ST 的就是不使能连续模式且通道数为 N;
连续扫描采样方式,循环单周期扫描采样的转换动作,对应 ST 的就是使能连续模式且通道数为 N;
普通规则通道序列,一个通道也可以自己组成一个序列;

使用特权

评论回复
33
喂什么玩意|  楼主 | 2022-7-30 23:45 | 只看该作者
任意通道序列,可以是同一个通道多次放置于一个任意序列中;
注入通道序列,前 2 种序列模式包含上述 3 种采样方式,而注入序列模式只包含自动注入,且只能与任意通道工作模式搭配工作。

使用特权

评论回复
34
喂什么玩意|  楼主 | 2022-7-30 23:46 | 只看该作者
任意通道工作模式搭配工作。
下面是用户手册中描述的一些转换时序图,对于理解该模块工作的具体逻辑实现非常有帮助,里面告诉了我们在每个 ADC 时钟 clk 驱动下,什么时候开始采样,转换后的结果在什么时候被 DMA 搬运走,每个通道完成转换后 ADC 相关的标志位置位的具体时刻,等等一些有用信息:

使用特权

评论回复
35
喂什么玩意|  楼主 | 2022-7-30 23:46 | 只看该作者

使用特权

评论回复
36
喂什么玩意|  楼主 | 2022-7-30 23:47 | 只看该作者
5. 通道选择和触发源选择
ADC 有 13 路外部输入通道 0~12、内部温度传感器通道 14 和内部 1.2V 参考电压通道 15;
可根据对应工作模式去配置通道选择寄存器从而进行不同方式的 A/D 转换,正常转换过程中也是可以进行切换通道的,只是不同模式下对切换通道的响应是不同的,这里就牵扯到一个影子寄存器的说法了,具体可以通过用户手册中查看详细描述;

使用特权

评论回复
37
喂什么玩意|  楼主 | 2022-7-30 23:48 | 只看该作者
ADC 触发源可以是软件开关位,也还包括了定时器和外部事件,具体罗列在以下表中,不同源头的选择需要在初始化时进行不同配置,除软件触发外都需要额外开启外部触发位。

使用特权

评论回复
38
喂什么玩意|  楼主 | 2022-7-30 23:49 | 只看该作者

使用特权

评论回复
39
喂什么玩意|  楼主 | 2022-7-30 23:49 | 只看该作者
6. 数据获取方式以及数据寄存器
可以通过以下几种方式进行转换结果的数据获取:

轮询,开启转换后等待转换完成标志位置位
中断,使能转换完成中断标志并且开启转换后等待自动触发中断
DMA,使能对应 A/D 通道并且开启转换后等待每个通道转换完成后发出的 DMA 请求,转换数据自动搬运到 RAM 中

使用特权

评论回复
40
喂什么玩意|  楼主 | 2022-7-30 23:50 | 只看该作者
A/D 转换完成后,非注入通道转换结果存储在寄存器 ADC_ADDATA 中,CHANNELSEL 表示当前数据对应的非注入通道号,同步地还会单独保存在对应的ADC_ADDR0~15 通道数据寄存器中;
注入通道转换结果存储在寄存器 ADC_JADDATA 中,JCHANNELSEL 表示当前数据对应的注入通道号,同步地还会单独保存在对应的 ADC_JDR0~3  注入通道数据寄存器中。

使用特权

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

本版积分规则