STM32 ADC介绍(硬件原理篇)
目录
背景
AD转换器
采样与保持
量化
编码
AD转换器转换原理
DA转换原理
AD转换原理
1.逐次逼近型AD转换器
2.并联比较型AD转换器
编码器
同步D触发器和边沿D触发器
基本RS触发器
同步RS触发器
同步D触发器
边沿型D触发器(维持-阻塞D触发器)
背景
在数字系统的广泛应用中,用数字系统处理模拟量的情况十分普遍,因此引入了模拟信号和数字信号的接口问题。为了解决这一问题,首先利用模数转换电路把模拟信号转成数字信号。(数字信号经过处理之后,也可以通过数模转换电路将模拟信号转换回模拟信号)。单片机开发当中,ADC是经常要到的外设。通过本篇文章对ADC硬件部分进行原理说明。本篇文章需要涉及到基尔霍夫电压定理、理想运放的虚短虚断特性、以及采样量化编码、触发器知识,所以需要电路、模拟电路、数字电路的基础知识。另外,DA转换方法有多种、AD转换的方法也有多种。本篇中就以最常用的方法(T型电阻网络DA转换器、逐次逼近AD转换器并联比较型AD转换器)来对DA转换和AD转换原理进行说明。嵌入式软件工程师能理解更好,但是不一定要掌握,只要懂得和硬件工程师合作懂得配置相关寄存器或者调用相关固件库函数即可。不要被吓倒!

AD转换器
AD转换器中一般要经过采样、保持、量化、编码这四个步骤来完成从模拟量到数字量的转换。
采样与保持

截图部分就是经典的采样保持电路。Ui(t)为输入的模拟信号。其中场效应管做成采样开关。它通过采样频率f(sample)的采样脉冲来完成控制开关的通断。电容C为保持功能,当采样开关导通的时候,电容迅速通电,使得电容的电压=输入的模拟电压!;当采样开关断开的时候,由于电容的漏电很小,所以电容电压基本保持不变!
因此经过采样保持电路之后,输入的模拟信号变成了一系列时间间隔内的阶梯信号。
量化
将采样输出的电压用某个最小单位的整数倍来表示的过程。这个最小数量单位称为量化单位(经常用🔺表示)。
编码
将量化的结果用代码来表示出来的过程称为编码(最小量化单位的整数倍->二进制数)。
AD转换器转换原理
本篇文章只是对原理进行一个说明。不同的芯片可以采用不同的技术。不代表stm32就是采用该技术。这篇文章只是个人学习过模电和数电的知识。在ADC原理说明的时候,将这些知识串联起来,形成一个知识的闭环。
因为AD转换器转换原理DA转换器,因此先对DA转换的原理先进行说明!
DA转换原理
。

本篇文章以T型电阻网络型进行说明

当dn-1闭合的时候,也就是说最左边的电阻接到参考电压,其他的模拟开关接地。
看截图中的电路,从左往右看,两个2R并联再和R串联 等价于一个2R电阻。所以最终的等效电路是


理想运放的两个特性(虚短和虚断)
虚短:反向输入端和同向输入端电位相同
虚断:运放的反向输入端和同相输入端的电流为0.
1)根据虚短特性可以知道,反相输入端的电压和同相输入端的电压相等,都为0.
2)根据虚断原理可以知道流过RF的电流(截图中的红色箭头)。
3)根据基尔霍夫电压定理可以知道Uo的电压就等于Rf上的电压大小相等,方向相反!
当d0为1(连接参考电压时),其他位模拟开关全部接地情况。

该等效电路也很好理解,通过从右往左看,就可以知道,和dn-1接参考电压的类似。

再根据电路知识中的线性电路的叠加原理可知

显然看截图中最后的式子就可以看出数-模的转换了!
DA转换器的最小输出电压与最大输出电压的比值称为分辨率,显然DA转换器的位数越多,分辨出的最小电压能力就越强。
前面的知识讲完了,我们现在就可以介绍AD的转换原理了。
AD转换原理
1.逐次逼近型AD转换器

1)转换开始前,将逐次逼近寄存器清零。
2)开始转换时将逐次逼近寄存器最高位置为1,其他位全0.此时DA转换器会输出电压和输入的模拟电压进行比较
A.DA转换器的输出电压U0 < 输入的模拟电压U1.说明DA转换的电压太大,要减小,此时Uc=1.
通过控制逻辑将最高位清零,次高位置为1,继续比较。
B.DA转换器的输出电压U0 > 输入的模拟电压U1.说明DA转换的电压太小,要增大,此时Uc=0.
通过控制逻辑将最高位保持为1,次高位置为1,继续比较。
就这样子逐位进行直到最低位,转换过程结束。此时寄存器的数值就是转换的结果。
2.并联比较型AD转换器


1)显然通过并联比较型工作示意图,根据电阻的伏安特性可以知道各个电阻的电压。
2)各个电阻的电压与模拟输入电压在运放电路中进行比较
A.当模拟输入电压>电阻侧电压,输出1
B.当模拟输入电压<电阻侧电压,输出0
3)和运放的比较结果有7中情况,可以用编码器将7中状态信息转化为计算机系统可以处理的二进制信息
编码器
因为数字系统只能处理二值运算,因此需要将数字电路的各种信息用二值代码表示出来。这个过程就是编码。实现编码的电路就称为编码器。编码器是一个多输入和多输出的组合逻辑电路。m表示输入信息的状态数,n表示代码的位数,一般情况下他们之间存在m<= 2的n次方关系。
寄存器+代码转换器-》编码器
输入有7种状态,所以3条输出线即可(2的3 次方-1)!

显然就完成了模数的转化。
下面对编码器的涉及到的逻辑器件进行说明,以完成所学的电路、模电、数电的知识闭环。
同步D触发器和边沿D触发器
在复杂的数字电路中,要继续进行各种的复杂的运算与控制,就必须将曾经的输入过的信号以及运算结果暂时保存起来。以便与新的输入信号进一步运算来共同确定电路的输出状态。这样子就要求电路中必须包含记忆功能的电路单元-触发器
触发器输出有Q和Q非,因此也称为双稳态触发器。

同步D触发器的由来:
基本RS触发器 -> 同步RS触发器 ->同步D触发器 和边沿D触发器
基本RS触发器


同步RS触发器
同步RS触发器是为了使得多个相关的触发器同时工作,必须给电路加上统一的控制信号,这个控制信号就叫做时钟脉冲信号,简称CP.,这种触发器叫做同步RS触发器
D触发器是在同步RS触发器的基础上解决约束条件问题(即同步RS寄存器都是有效设置信号情况)而产生的。



特性方程

补充同步输入端和异步输入端的概念!

同步D触发器

D触发器的特性方程位

边沿型D触发器(维持-阻塞D触发器)


由同步RS触发器与利用反馈构成了边沿型D触发器!
相关文章:
STM32 ADC介绍(硬件原理篇)
目录 背景 AD转换器 采样与保持 量化 编码 AD转换器转换原理 DA转换原理 AD转换原理 1.逐次逼近型AD转换器 2.并联比较型AD转换器 编码器 同步D触发器和边沿D触发器 基本RS触发器 同步RS触发器 同步D触发器 边沿型D触发器(维持-阻塞D触发器ÿ…...
pytest测试专题 - 1.2 如何获得美观的测试报告
<< 返回目录 1 pytest测试专题 - 1.2 如何获得美观的测试报告 1.1 背景 虽然pytest命令的报文很详细,用例在执行调试时还算比较方便阅读和提取失败信息, 但对于大量测试用例运行时,可能会存在以下不足 报文被冲掉测试日志没法归档 …...
Bash 中的运算方式
目录 概述: 1. (()) 运算符 2. let 命令 3. expr 命令 4. $[] 直接运算 5. bc(计算器,支持浮点数) 6. awk(强大的文本处理工具,也可计算) 概述: Bash 本身只支持整数运算&am…...
linux 板子的wifi模块连上路由器后,用udhcpc给板子wifi分配ip,udhcpc获取到ip,但没有写入wlan0网卡上
linux 板子的wifi模块连上路由器后,用udhcpc给板子wifi分配ip,udhcpc获取到ip,但没有写入wlan0网卡上 这里的问题是 /usr/share/udhcpc/default.script脚本有问题 用下面正确脚本,即可写进去 #!/bin/sh# udhcpc script for busybox # Copyr…...
超纯水设备的智能化控制系统为用户带来安全简便的操作体验
随着信息技术的发展,智能化已经成为工业装备的重要发展方向之一。超纯水设备在这方面也走在了前列,配备了高性能的PLC控制系统及人机交互界面,实现了全方位的智能监控和自动化操作。本文将重点介绍该设备的智能化控制系统,探讨它如…...
性格测评小程序03搭建用户管理
目录 1 创建数据源2 搭建后台3 开通权限4 搭建启用禁用功能最终效果总结 性格测评小程序我们期望是用户先进行注册,注册之后使用测评功能。这样方便留存用户的联系信息,日后还可以推送对应的相关活动促进应用的活跃。实现这个功能我们要先创建数据源&…...
Linux-C/C++《七、字符串处理》(字符串输入/输出、C 库中提供的字符串处理函数、正则表达式等)
字符串处理在几乎所有的编程语言中都是一个绕不开的话题,在一些高级语言当中,对字符串的处理支 持度更是完善,譬如 C、 C# 、 Python 等。若在 C 语言中想要对字符串进行相关的处理,譬如将两个字符串进行拼接、字符串查找、两个…...
如何使用CSS画一个三角形,原理是什么?
如何用 CSS 画一个三角形?原理和实战指南 一、核心原理 CSS 画三角形的本质是利用边框(border)的叠加特性。当一个元素的宽高为 0 时,其边框会以对角线形式相交,形成四个独立的三角形区域。通过控制某一边的边框颜色为…...
调用DeepSeek API接口:实现智能数据挖掘与分析
在当今数据驱动的时代,企业和开发者越来越依赖高效的数据挖掘与分析工具来获取有价值的洞察。DeepSeek作为一款先进的智能数据挖掘平台,提供了强大的API接口,帮助用户轻松集成其功能到自己的应用中。本文将详细介绍如何调用DeepSeek API接口&…...
iOS主要知识点梳理回顾-5-运行时方法交换
方法交换可以放在 load 或 initialize 方法中,也可以自己根据时机来空,比如开启某个开关后才需要交换方法。如果是在load中调用,交换工作会在类加载时(程序启动)自动调用;如果是在initialize中调用…...
基于若依开发的工程项目管系统开源免费,用于工程项目投标、进度及成本管理的OA 办公开源系统,非常出色!
一、简介 今天给大家推荐一个基于 RuoYi-Flowable-Plus 框架二次开发的开源工程项目管理系统,专为工程项目的投标管理、项目进度控制、成本管理以及 OA 办公需求设计。 该项目结合了 Spring Boot、Mybatis、Vue 和 ElementUI 等技术栈,提供了丰富的功能…...
uni-app 学习(一)
一、环境搭建和运行 (一)创建项目 直接进行创建 (二)项目结构理解 pages 是页面 静态资源 打包文件,看我们想输出成什么格式 app.vue 页面的入口文件 main.js 是项目的入口文件 存放对打包文件的配置 pages 存放整…...
本地部署DeepSeek + AnythingLLM 搭建高效安全的个人知识库
环境准备: 本地部署方案请参考博客:windows平台本地部署DeepSeek大模型+Open WebUI网页界面(可以离线使用)-CSDN博客 windows平台本地部署DeepSeek大模型+Chatbox界面(可以离线使用)-CSDN博客 根据本人电脑配置:windows11 + i9-13900HX+RTX4060+DDR5 5600 32G内存 确…...
【git-hub项目:YOLOs-CPP】本地实现03:跑自己的实例分割模型
本节博客,我们继续讲解,如何在cpu+windows上,跑通自己的实例分割模型。 目录 模型 类别名称 量化 导出模型 拉取最新代码 进入官网ultralytics 模型 该项目包括存储在 models 和 quantized_models 目录中的各种预训练标准 YOLO 模型: 模型类型模型名称标准模型yolo5…...
【Qt】QObject类的主要功能
在 Qt 中,QObject 类是所有 Qt 对象的基类,提供了许多基础功能,使得 Qt 的对象系统能够有效地工作。它为其他类提供了核心的机制,比如信号和槽机制、对象树结构、内存管理等。 QObject 类的主要功能: 信号和槽机制&am…...
OpenEuler学习笔记(三十):在OpenEuler上搭建3D建模环境
在OpenEuler上搭建3D建模环境,通常可以选择一些常见的3D建模软件,如Blender、FreeCAD等。以下以搭建Blender和FreeCAD这两款软件的使用环境为例,为你详细介绍搭建步骤。 搭建Blender 3D建模环境 1. 更新系统软件包 首先,确保系…...
nsc account 及user管理
从安全角度,推荐使用sign 模式进行nats account及用户管理 把权限放到account level 用户密码泄露可以通过快速更换用户可以设置过期日期,进行安全轮换 此外通过nsc 管理用户和权限,可以统一实现全局管控,包括subject管控&#…...
把 DeepSeek1.5b 部署在显卡小于4G的电脑上
这里写自定义目录标题 介绍准备安装 Ollama查看CUDA需要版本安装CudaToolkit检查Cuda是否装好设置Ollama环境变量验证是否跑在GPU上ollama如何导入本地下载的模型安装及配置docker安装open-webui启动open-webui开始对话 调整gpu精度 介绍 Deepseek1.5b能够运行在只用cpu和gpu内…...
Git子模块实战:大型后台管理系统模块拆分实践
案例背景 某企业级后台管理系统需要拆分为三个核心模块: 权限中心 (auth-center):负责RBAC权限管理数据可视化 (data-visualization):包含BI看板模块工作流引擎 (workflow-engine):审批流程核心组件 每个模块由独立团队开发维护…...
【做一个微信小程序】校园事件页面实现
前言 为了进一步扩展校园事件页面的功能,我们可以添加 搜索、分类筛选 和 渐变卡片色 等特性。以下是详细的方案和源码实现。 扩展功能设计 1. 搜索功能 在页面顶部添加搜索框,用户输入关键词后,筛选出匹配的事件。2. 分类筛选 在页面顶部添加分类标签(如“全部”、“活动…...
基于 Filebeat 的日志收集
在现代分布式系统中,日志数据作为关键的监控与故障排查依据,越来越受到重视。本文将深入探讨 Filebeat 的技术原理、配置方法及在 ELK(Elasticsearch、Logstash、Kibana)生态系统中的应用,帮助开发者构建高效、稳定的日…...
Python教程108:针对面向对象Class类知识要点,源码示例再演示
类的基础结构,比如定义类、初始化方法__init__,然后实例化对象。然后是类的属性,包括实例属性和类属性。接着是方法,比如实例方法、类方法、静态方法的区别。还有继承和多态,这是面向对象的重要部分。可能还需要提到特…...
如何在Excel和WPS中进行翻译
文档翻译我们可以用在线翻译工具,Excel工作表的翻译使用在线翻译工具就不是特别方便,那么如何快速进行翻译呢,我们今天介绍在不同的场景下如何利用翻译函数和Python程序来实现单元格的快速翻译。 一、在wps中进行翻译 WPS是我们常用的办公软…...
zola + github page,用 workflows 部署
之前的Zola都是本地build之后,再push到github上,这种方式很明显的弊端就是只能在本地编辑,而不能通过github编辑,再pull到本地,缺乏了灵活性。因此将zola用workflows来部署。 repo地址:https://github.com/…...
DeepSeek从入门到精通:提示词设计的系统化指南
目录 引言:AIGC时代的核心竞争力 第一部分 基础篇:提示词的本质与核心结构 1.1 什么是提示词? 1.2 提示词的黄金三角结构 第二部分 类型篇:提示词的六大范式 2.1 提示语的本质特征 2.2 提示语的类型 2.2.1 指令型提示词 …...
org.apache.kafka.common.errors.TimeoutException
个人博客地址:org.apache.kafka.common.errors.TimeoutException | 一张假钞的真实世界 使用kafka-console-producer.sh向远端Kafka写入数据时遇到以下错误: $ bin/kafka-console-producer.sh --broker-list 172.16.72.202:9092 --topic test This is …...
DeepSeek免费部署到WPS或Office
部署到WPS - 通过OfficeAI插件接入: - 准备工作:安装最新版本的WPS Office软件;访问DeepSeek官网,点击右上角的“API开放平台”,登录账号(若无账号需先注册),登录成功后,…...
智能手表表带圆孔同心度检测
在智能手表的制造工艺中,表带圆孔同心度检测是确保产品品质的关键环节。精准的同心度不仅关乎表带与表体的完美适配,更直接影响用户的佩戴舒适度和产品的整体美观度。稍有偏差,就可能导致表带安装困难、佩戴时出现晃动,甚至影响智…...
C# 变量,字段和属性的区别
总目录 前言 在C#中,变量(Variables)、字段(Fields) 和 属性(Properties) 是三个容易混淆但作用截然不同的概念。以下是它们的核心区别与使用场景: 一、变量(Variables&…...
如何设置linux系统时间?
在 Linux 系统中,可以通过不同的方法来设置系统时间,下面详细介绍几种常见的方式。 目录 方法一:使用date命令手动设置时间 方法二:同步硬件时钟(BIOS 时钟) 方法三:使用timedatectl命令设置…...
