打印
[MM32硬件]

ADC 外设知识

[复制链接]
楼主: 喂什么玩意
手机看帖
扫描二维码
随时随地手机跟帖
41
喂什么玩意|  楼主 | 2022-7-30 23:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
7. 数据对齐及补偿
通过配置 ADC_ADCR 寄存器中的 ALIGN 位,可以选择转换后数据储存为左对齐或右对齐;
非注入通道数据没有数据补偿,而注入通道道 转换数据带有数据补偿(ADC_JOFR0~3),因此它的结果可以是负值,SEXT 位是扩展的符号值(1 代表负数 ,0 代表正数)

使用特权

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

使用特权

评论回复
43
喂什么玩意|  楼主 | 2022-7-30 23:52 | 只看该作者
8. 内部通道
根据用户手册上的说明可知,内置的温度传感器仅用于检测器件内部的温度变化(TA),精度范围在正负 10 度以内,所以一般要求比较高的应用就还是用 NTC 等外部温传更为合理;
在得到正确的温度传感器通道数值后,通过以下公式进行计算温度工程值,它是根据出厂前校准的 25 度温度对应的通道数值反推的:

使用特权

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

使用特权

评论回复
45
喂什么玩意|  楼主 | 2022-7-30 23:54 | 只看该作者
同样地,内部 1.2 V BandGap 参考电压在出厂前也被校准了,原厂将对应的校准 A/D 数值保存在内部 flash 中,通常可以通过此数据去反推当前 VDDA 电源电压值,如果认为板级的模拟电源 VDDA 电压较为精准且稳定,那么就可以去计算出实际的 1.2 V 参考电压到底为多少了,具体可以根据下面 2 个公式进行正算和反推:

使用特权

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

使用特权

评论回复
47
喂什么玩意|  楼主 | 2022-7-30 23:55 | 只看该作者
寄存器表

使用特权

评论回复
48
喂什么玩意|  楼主 | 2022-7-30 23:56 | 只看该作者
四、ADC 硬件抽象层驱动库函数
通过官方下载到库例程,ADC 模块硬件抽象层涉及到以下几个文档:
reg_adc.h   
     主要描述 ADC 模块在 MCU 中所处的存储地址以及寄存器和对应位的内容定义和偏移
hal_adc.h
     主要声明 ADC 模块硬件抽象层驱动库接口 API 函数以及寄存器操作用到的数据类型定义
hal_adc.c
     主要实现 ADC 模块硬件抽象层驱动库接口 API 函数

使用特权

评论回复
49
喂什么玩意|  楼主 | 2022-7-31 17:12 | 只看该作者
主要抽象出的接口函数如下,包括了初始化和反初始化、模块使能与禁止、标志位的获取和清除、中断的开启与禁止、通道的配置、内部通道开启与禁止、获取 ADC 转换数据、ADC DMA 开启与禁止、外部触发使能与禁止、任意通道的配置、注入通道的配置等等:

使用特权

评论回复
50
喂什么玩意|  楼主 | 2022-7-31 17:16 | 只看该作者

使用特权

评论回复
51
喂什么玩意|  楼主 | 2022-7-31 20:20 | 只看该作者
简单说明 ADC 模块软件配置流程如下:

    ADC 对应通道的 IO 模式首先配置为模拟输入 ;

使用特权

评论回复
52
喂什么玩意|  楼主 | 2022-7-31 20:21 | 只看该作者
开启 ADC 在 RCC 中的时钟位 ;

使用特权

评论回复
53
喂什么玩意|  楼主 | 2022-7-31 20:22 | 只看该作者
初始化 ADC_InitStruct ,其中包含时钟分频数、分辨率、采样方式及模式、对齐方式、触发源选择、触发边沿、触发延时、采样保持周期等 ;

使用特权

评论回复
54
喂什么玩意|  楼主 | 2022-7-31 20:22 | 只看该作者
开启 ADC 模块 ;

使用特权

评论回复
55
喂什么玩意|  楼主 | 2022-7-31 20:25 | 只看该作者
根据不同的触发转换方式去触发 A/D 转换 ;

使用特权

评论回复
56
喂什么玩意|  楼主 | 2022-7-31 20:26 | 只看该作者
根据不同的获取数据方式判断标志位、清标志位以及读取数据寄存器,得到相应转换结果 。

使用特权

评论回复
57
喂什么玩意|  楼主 | 2022-7-31 20:27 | 只看该作者
五、ADC 采样电路
先根据数据手册清楚每个采样通道是如何对应到 IO 上的:

使用特权

评论回复
58
喂什么玩意|  楼主 | 2022-7-31 20:28 | 只看该作者

使用特权

评论回复
59
喂什么玩意|  楼主 | 2022-7-31 20:28 | 只看该作者
一般情况下,不关心驱动能力和功耗的话,都采用经典的分压电路+RC 滤波匹配以及并上防倒灌的反向二极管即可,如上面的右上方,计算出 Rain = 8.6k + 2k ,采样保持时间可以选用 29.5 cycles (ADC 时钟为 15M 时),分压电阻最好同步调节到 几k 至 几十k 范围内,因为如果到 M 级别的话势必会增大外部输入阻抗导致不能有太快的采样率。另外,如果需要更高的采样精度、更低的功耗、更强的驱动能力,那采样电路在设计上最好加上一个低功耗的放大器作为一级跟随,用于阻抗匹配。不管哪种设计,都需要保证 VDDA 的精度要高且稳定,而且输入到 IO 内部的电压不能超过 VDDA 值。以下为加入运放的设计结构示意:

使用特权

评论回复
60
喂什么玩意|  楼主 | 2022-7-31 20:29 | 只看该作者

使用特权

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

本版积分规则