【嵌入式学习】嵌入式原理知识-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采样的时候,可以选择扫描模式,对多个通道进行采样。

相关推荐
Swilderrr7 小时前
论文精读:《Directory-Aware Query and Maintenance in Vector Databases》
笔记·学习
kkkkkkkkkk_Z7 小时前
新手自学嵌入式 | 学习日记:LCD显示原理、PWM控制、电容触摸屏(GT9147)驱动开发与项目实战
驱动开发·学习
LXT7128 小时前
每日英语一读|为什么夏天的雷雨,总爱在傍晚出现?
深度学习·学习
知识分享小能手8 小时前
C学习教程,从入门到精通,C语言文件 — 完整知识点详解(14)
c语言·网络·学习
羊羊一洋8 小时前
ROM&RAM
c语言·stm32·学习
优化Henry9 小时前
LTE小区光路降质告警排查与处理实录
运维·网络·学习·5g·tdd
暖馒9 小时前
运动控制框架相关知识
学习
stereohomology10 小时前
我对DeepSeek4.1flash能力变化的感觉和第三方评估相当
人工智能·学习·llm
syagain_zsx10 小时前
protobuf 实战:从 .proto 到 C++ 序列化的完整链路
c++·学习·程序人生·谷歌·protobuf
qq_2842740511 小时前
电气控制笔记:常用低压电器符号原理与异步电动机点动、自锁、多地控制电路(含考点)
笔记·学习·自动化·制造