打印
[MM32硬件]

ADC 外设知识

[复制链接]
1570|63
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
AD, dc
本帖最后由 喂什么玩意 于 2022-7-31 20:30 编辑

本文主要目的在于记录使用灵动微 MM32F0144C6P 芯片过程中遇到的 ADC 相关的问题以及知识点,主要参考官方 UM 手册、DS 手册以及库例程。

本文涉及内容可以分为以下几个章节:

  • ADC 功能模块框图
  • ADC 模块特性及参数指标
  • ADC 功能描述和寄存器
  • ADC 硬件抽象层驱动库函数
  • ADC 采样电路

使用特权

评论回复
沙发
喂什么玩意|  楼主 | 2022-7-30 22:54 | 只看该作者
一、功能模块框图
通过查看芯片的数据手册可以知道, MM32F0144C6P 这颗 MCU 内嵌了 1 个 12 位 SAR 型 ADC,并且具有 13 个外部输入通道和 2 个内部通道(包括了一个温度传感器和一个 BandGap 参考基准电压)。既然为逐次逼近型的模/数转换器,那它内部的电路结构应该与下图类似了:

使用特权

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

使用特权

评论回复
地板
喂什么玩意|  楼主 | 2022-7-30 22:59 | 只看该作者
SAR ADC 通常是 8 位到 18 位的中等分辨率应用的首选,一般可以在高达几兆赫兹的最大采样率下运行。通过上面结构图可以看出,这种模拟转换器分为 2 个部分,前端通过采样保持电路元器件去捕获住接入的模拟电压信号,然后进入到后端,将此输入的信号电压由转换器根据外部或者内部的参考电压逐一进行比较,一般使用的是电容式 DAC 网络来做这个连续逐次比较工作的,最后将比较得出的数据结果放置于 data register 中即完成了一次采样转换工作。具体的逐次比较涉及内容比较深,在此不做过多探讨了,我根据理解将该结构转化了一个示意说明图如下,一般的电路结构应该都是这么设计的:

使用特权

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

使用特权

评论回复
6
喂什么玩意|  楼主 | 2022-7-30 23:02 | 只看该作者
上面为 SAR ADC 普遍的结构,针对具体芯片的 ADC 功能框图可以在用户手册的 ADC 章节中找到,如下:

使用特权

评论回复
7
喂什么玩意|  楼主 | 2022-7-30 23:02 | 只看该作者
从图中得知,该 ADC 模块数字组成部分有:时钟源、外部通道IO、内部温度传感器以及基准电压器件、参考电源电压、各个工作模式配置以及触发源配置等相关寄存器、转换结果及状态寄存器等等。温度传感器通道在 ADC 的 AIN14 通道,内部参考电压通道在 AIN15 通道上。

使用特权

评论回复
8
喂什么玩意|  楼主 | 2022-7-30 23:03 | 只看该作者
二、ADC 模块特性及参数指标

在用户手册的 ADC 章节中有主要特性描述,我将内容提炼整理成大白话了,该模块主要有以下一些特性:

使用特权

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

使用特权

评论回复
10
喂什么玩意|  楼主 | 2022-7-30 23:06 | 只看该作者
这是一个 12 位逐次逼近型(SAR)模拟/数字转换器 (ADC),最高支持 12 位可编程分辨率,一般实际能到 10 - 11.5 位就已经很不错了,可以通过转换后的数值评估;

使用特权

评论回复
11
喂什么玩意|  楼主 | 2022-7-30 23:07 | 只看该作者
有 13 路外部输入通道和 2 路内部通道,用户手册上写的是 14 路外部通道而数据手册上只开放了 13 路,应该以具体型号的数据手册为准吧;

使用特权

评论回复
12
喂什么玩意|  楼主 | 2022-7-30 23:08 | 只看该作者
ADC 的工作时钟由 PCLK2 分频产生,最大输入时钟为 16MHz,此时钟源提供了采样保持和转换相关的工作时序,输入时钟要是超过了 16MHz 应该会导致内部时序的紊乱吧;

使用特权

评论回复
13
喂什么玩意|  楼主 | 2022-7-30 23:11 | 只看该作者
支持最高为 1Msps 的转换速率,这个转换速率指的是每个通道完成采样保持到转换后得到实际数据这一系列工作的频率,如果频繁地转换以至于超过了这个速率那应该会得到不准确的数据;

使用特权

评论回复
14
喂什么玩意|  楼主 | 2022-7-30 23:12 | 只看该作者
支持普通通道、任意通道和注入通道 3 种不同工作序列,前 2 者包含了 单次转换、单周期扫描以及连续扫描方式,注入模式只支持自动注入方式且带数据补偿配置,其中的普通通道序列也就是从 AIN0 到 AIN12(或者反向)这样的规则组模式,任意通道序列就是将 N 个任意通道号放到一个序列里面,而注入序列只能是紧跟着任意通道序列的,当前面任意通道序列转换完成后自动进行注入组的转换;

使用特权

评论回复
15
喂什么玩意|  楼主 | 2022-7-30 23:14 | 只看该作者
每个通道的采样保持时间可以通过软件按通道分别配置,最小为 2.5 个 ADC 时钟周期,这个保持时间需要尤其关注哟,它直接影响了采样保持电路中的电容充放电时间,如果配置不好小了或者大了都会影响到实际转换的数据精度,且内部通道一般受设计影响都需要将保持时间放到最大;

使用特权

评论回复
16
喂什么玩意|  楼主 | 2022-7-30 23:15 | 只看该作者
A/D 转换的数据可以使用轮询或者中断方式从相关数据寄存器中获取,普通通道序列以及任意通道序列中的通道还可支持 DMA 传输,在需要高速转换应用中一般都会使用 DMA 传输,通过查看 DMA 章节得知,ADC 可以被映射在 DMA_CH1 和 DMA_CH2 两个通道上,根据 SYSCFG_CFGR 寄存器配置去做切换;

使用特权

评论回复
17
喂什么玩意|  楼主 | 2022-7-30 23:16 | 只看该作者
A/D 转换开始的触发条件有软件开关触发、外部中断线信号触发以及 TIM 匹配或更新事件等,不同应用需要配置不同的触发条件,比如说 BLDC FOC 中一般都会应用到 TIM 的 CC4/CC5 去做触发采样;

使用特权

评论回复
18
喂什么玩意|  楼主 | 2022-7-30 23:17 | 只看该作者
具有模拟看门狗功能,可以设置参与比较的指定通道、比较的上下限值,指定通道转换得到的结果可和指定的阈值区间相比较,从而达到时刻监测被测通道的电压值效果,并且还可以产生相应中断,这个功能就类似模拟比较器。

使用特权

评论回复
19
喂什么玩意|  楼主 | 2022-7-30 23:19 | 只看该作者
以上是整体特性描述,再来看数据手册中关于 ADC 的一些参数指标:

使用特权

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

使用特权

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

本版积分规则

39

主题

416

帖子

0

粉丝