【嵌入式学习】嵌入式原理知识-ADC(七)

1. 逐次逼近型ADC

1.1 ADC简介

ADC- Analog Digital Converter 模拟数字信号转换器

模拟信号:时间连续 幅度连续的信号

数字信号 :时间离散 幅度也离散的信号

1.2 单片机上的ADC

ADC也是单片机上的片上外设

是12位逐次逼近型ADC

1.3 采样深度

采样深度: 用多少位二进制数表示转换结果

采样深度决定了采样的精度。

1.4 逐次逼近型工作原理

先采电压,从高位到低位二分试探比较,逐位确定比特,全部位判定完输出数字量。

内部结构图如下所示:

1.5 采样保持电路

采样保持电路结构如下图:

就是给电容充电,作为采样过程。

然后断开开关后,电容的电压就保存了采样的电压,作为保持过程;

这里也涉及到后面的参数的设置。

2. ADC外设的结构框图

2.1 ADC多路复用

采用一路ADC,通过控制采样开关,实现多路模拟信号的采样。

上述的方法,也就是每个采样开关对应ADC的一个通道:

2.2 ADC常规序列

把多路ADC采样写进常规序列。

常规序列就是把每个通道采集按照规划先后列好,

然后按照规划,先后进行采样。

先闭合那个开关,后闭合那个开关,每个开关闭合多少时间都是按照常规序列进行先后处理;

例如下图:

外部触发信号是常规序列的启动信号,经过外部触发信号,决定启动常规序列与否。

当出现上升沿时候,进行一次转化。

当常规序列转化完成EOC标志位会至1:

2.3 ADC注入序列

把多路ADC采样写进注入序列。

注入序列基本上与常规序列相同,主要有如下三点区别。

此外的区别就是,相比于常规序列,注入序列具有更高的优先级。

如下图所示,当常规序列在执行采样,但是此时注入序列触发,则有限采样注入序列;

当注入序列转化完成JEOC标志位会置1:

3. 采样时间和转换时间

采样时间:开关闭合的时间长度。

转换时间:对采样点进行转换所消耗的时间-通过逐次逼近法转化为数字信号所消耗的时间。

3.1 ADC的时钟频率

主要查看ADC搭载在那个总线上,以及对应的分频系数:

这里可以看到一般设置为12Mhz

ADC最大的时钟频率为14Mhz 超出可能会出现错误。

3.2 ADC转化时间

转化时间主要取决于ADC的时钟频率:

公式如下:

转化每个位都要一个周期,所以一共12个周期,

加上额外的0.5个周期

3.3 ADC采样时间

采样时间就是采样开关闭合的时间,

采样时间和信号源的内阻 有关;

内阻影响了电流,进而影响电容充电的速度;

3.4 ADC采样时间计算方法

采样时间的公式如下:

对于一个信号源内阻为10K欧的电阻,其采样时间,经过计算为:

3.5 采样时间和保持时间影响

时间 选长(慢慢来) 选短(赶时间)
采样时间 (给电容充电的时间) ✅ 电充得满满的,测得准; ❌ 每次等得久,测得慢 ✅ 等得短,测得快; ❌ 电没充饱,结果偏小、乱跳
转换时间 (拿砝码试称的时间) ✅ 天平稳了再下结论,不易判错; ❌ 整体变慢 ✅ 整体变快; ❌ 砝码还在晃就下结论,容易判错

4. ADC外设的函数

4.1 ADC表格与函数表格

ADC的结构图:

参考ADC的结构图,对应其函数;

序号 分类 编程接口 作用
1 通用 ADC_Init 设置 ADC 的基本参数
2 通用 ADC_Cmd 总开关
3 通用 ADC_GetFlagStatus 获取标志位的值
4 通用 ADC_ClearFlag 清除标志位
5 通用 ADC_ITConfig 配置中断
6 通用 ADC_DMACmd 配置 DMA 请求
7 通用 ADC_TempSensorVrefintCmd 温度计和参考电压开关
8 常规序列 ADC_RegularChannelConfig 配置常规序列的通道
9 常规序列 ADC_ExternalTrigConvCmd 外部触发开关(常规)
10 常规序列 ADC_SoftwareStartConvCmd 软件启动(常规)
11 常规序列 ADC_GetConversionValue 读取 DR 寄存器的值
12 注入序列 ADC_InjectedSequencerLengthConfig 设置注入序列的长度
13 注入序列 ADC_InjectedChannelConfig 配置注入序列的通道
14 注入序列 ADC_ExternalTrigInjectedConvCmd 外部触发开关(注入)
15 注入序列 ADC_ExternalTrigInjectedConvConfig 选择注入序列的外部触发
16 注入序列 ADC_SetInjectedOffset 设置注入序列的通道偏置
17 注入序列 ADC_SoftwareStartInjectedConvCmd 软件启动(注入)
18 注入序列 ADC_GetInjectedConversionValue 读取 JDRx 寄存器的值
19 校准相关 ADC_ResetCalibration 复位校准寄存器
20 校准相关 ADC_GetResetCalibrationStatus 查询复位是否完成
21 校准相关 ADC_StartCalibration 启动校准
22 校准相关 ADC_GetCalibrationStatus 查询校准是否完成

4.2 ADC模式

ADC有如下的模式选择:

模式 说明
连续模式 开启:一次触发后,转换完成自动开启下一次转换,循环不停采集 关闭:单次模式,一次触发只转换1次,再次采集需要重新触发
数据对齐方式 右对齐:12位结果放在16位寄存器低12位,电压计算方便(常用) 左对齐:12位结果放在16位寄存器高12位,适合移位运算
常规序列外部触发源 选择启动常规ADC转换的信号源,可以是软件触发、定时器信号、外部引脚信号
双ADC模式 单ADC模式;双ADC可配置同步、交替等模式,需要芯片拥有两个ADC外设-可以提高采样率-高采样示波器的实现
常规序列通道数 设置常规序列需要采集的通道总个数,配合扫描模式使用
扫描模式 开启扫描:多通道依次轮流采集,多通道采集必须开启 关闭扫描:仅采集单个通道,不轮询切换通道

4.3 ADC的触发模式

模式 说明
软件触发 调用函数ADC_SoftwareStartConvCmd,代码手动发命令启动ADC转换。灵活,触发时间由程序决定。
定时器外部触发 使用定时器TRGO事件(更新/比较事件)作为触发信号,上升沿启动ADC,可以实现固定周期精准采样。
引脚外部触发 使用外部GPIO引脚信号(EXTI),引脚电平变化时启动ADC,适合外部硬件事件触发采集。

5. ADC的扫描模式

当有多个通道需要ADC采样的时候,可以选择扫描模式,对多个通道进行采样。

相关推荐
bllovepigpig2 小时前
操作系统个人学习笔记(四):K8s基础
笔记·学习·kubernetes
司南-70492 小时前
AI infra 学习笔记(三):预处理·第一步——QKV 投影到底算了多少
人工智能·笔记·学习
喜欢打篮球的普通人3 小时前
MiniMind 学习笔记(十):优化器、学习率和数据设置——训练稳定性的三块基石
笔记·python·学习
老王爱玩车3 小时前
深入理解指针5
c语言·开发语言·学习
喜欢打篮球的普通人3 小时前
MiniMind 学习笔记(十三):SFT 导言——从“续写文本“到“回答用户“
人工智能·笔记·学习
我命由我123454 小时前
Photoshop - 将Photoshop图像置入其他应用程序
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
个 人 练 习 生4 小时前
C++-----string基本使用详解
开发语言·c++·学习
千谦阙听4 小时前
【C++篇】:string类——常用接口、底层原理与深浅拷贝
开发语言·c++·学习·visual studio
dadaobusi5 小时前
学习:chiesel,scala
学习·fpga开发·scala