当前位置: 首页 > news >正文

STM32-ADC模数转换

一、概述

ADC(Analog-Digital Converter)模拟-数字转换器

  • ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁
  • 12位逐次逼近型ADC,1us转换时间
  • 输入电压范围:0~3.3V,转换结果范围:0~4095 
  • 18个输入通道,可测量16个外部(系列最多)和2个内部信号源
  • 规则组和注入组两个转换单元。规则组用于常规事件,注入组用于突发事件
  • 模拟看门狗自动监测输入电压范围
  • STM32F103C8T6 ADC资源:ADC1、ADC2,10个外部输入通道
  • AD转换的步骤:采样,保持,量化,编码

1、ADC结构

以ADC0809芯片为例,通过地址锁存器进行控制通道选择开关,ADDA、B、C端的电平为000时,IN0通道选通;001,IN1通道选通,以此类推。ADC比较器是由时钟进行推进的。

 逐次逼近型ADC工作原理:

首先,控制逻辑电路使N位寄存器最高位(Dn-1)置1,其余清零。经D/A转换后得到大小为VREF的模拟电压VN。将VN和Vx比较,若Vx>=VN,则保留Dn-1=1;若Vx<VN,则保留Dn-1=0;随后控制逻辑电路使N位寄存器次高位Dn-2置1,经D/A转换后再与Vx比较确定次高位的值,其余位类推,转换完成后,由锁存缓冲器进行输出。

EOC是控制逻辑电路发出转换结束信号

2、STM32中ADC框图

如下图:

注入通道组:最多可以选择4个通道。

规则通道组:最多可以同时选择16个通道,但每次只能由一个通道进行转换,因为规则通道数据寄存器只有1个。

开始转换触发可以由软件调用库函数进行启动,也可以由硬件资源进行器启动,利用主模式触发。

ADCCLK时钟频率最大为14MHZ。

3、ADC转换流程结构

4、转化模式

  • 单次转换,非扫描模式

  •  连续转换,非扫描模式

  • 单次转换,扫描模式

可以选择多个通道数目,一组转换完之后,发出转换结束信号EOC

  • 连续转换,扫描模式 

5、数据对齐

6、触发控制

7、转换时间

STM32 ADC的总转换时间为:     TCONV = 采样时间 + 12.5个ADC周期

转换结束后,EOC会有硬件置1

8、校准

 二、ADC单或多通道代码

AD.c:

#include "stm32f10x.h"                  // Device headervoid AD_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;ADC_InitTypeDef ADC_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //用RCC配置ADCCLK推动比较器//GPIO初始化GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN ;         //模拟输入,ADC专用通道GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化ADC,配置数据格式,模式ADC_InitStruct.ADC_Mode=ADC_Mode_Independent ;       //独立ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right  ;  //数据右对齐ADC_InitStruct.ADC_ExternalTrigConv= ADC_ExternalTrigConv_None ;  //不用外部触发源,用软件触发ADC_InitStruct.ADC_NbrOfChannel=1;              //单个通道ADC_InitStruct.ADC_ScanConvMode=DISABLE;        //非扫描ADC_InitStruct.ADC_ContinuousConvMode=DISABLE;  //非连续ADC_Init(ADC1,&ADC_InitStruct);//启动ADCADC_Cmd(ADC1,ENABLE);//校准//初始化校准寄存器ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1)==SET);  //开始校准,为0校准结束//开始进行校准ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1)==SET);
}uint16_t AD_GetValue(uint8_t ADC_Channel)
{ADC_RegularChannelConfig(ADC1,ADC_Channel,1,ADC_SampleTime_55Cycles5); //规则组通道配置ADC_SoftwareStartConvCmd(ADC1,ENABLE);       //软件触发转换while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);  //等待转换结束return ADC_GetConversionValue(ADC1);    //返回转换值
}

AD.h:

#ifndef _AD_H
#define _AD_Hvoid AD_Init(void);uint16_t AD_GetValue(uint8_t ADC_Channel);#endif

main.c:

#include  "stm32f10x.h"                  // Device header
#include  "OLED.h"
#include  "delay.h"
#include  "AD.h"uint16_t AD1,AD2,AD3;//float Voltage;int main(void)
{OLED_Init();AD_Init();OLED_ShowString(1,1,"AD1:");OLED_ShowString(2,1,"AD2:");//OLED_ShowString(3,1,"AD3:");//OLED_ShowString(2,1,"Voltage:0.00V");while(1) {AD1=AD_GetValue(ADC_Channel_0);AD2=AD_GetValue(ADC_Channel_1);//AD3=AD_GetValue(ADC_Channel_2);OLED_ShowNum(1,5,AD1,4);OLED_ShowNum(2,5,AD2,4);//OLED_ShowNum(3,5,AD3,4);}}

相关文章:

STM32-ADC模数转换

一、概述 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁12位逐次逼近型ADC&#xff0c;1us转换时间输入电压范围&#xff1a;0~3.3V&#xff…...

lspci | grep VGA

执行lspci | grep VGA后如下&#xff0c;解释含义 00:0f.0 VGA compatible controller: VMware SVGA II Adapter 0b:00.0 VGA compatible controller: NVIDIA Corporation GA104 [GeForce RTX 3070] (rev a1) 执行 lspci | grep VGA 命令后&#xff0c;您得到了两条输出&#…...

智慧厂区车辆导航解决方案;智慧工厂电子地图应用解决方案;大型工厂内部导航解决方案;智慧工厂可视化地图应用方案

智慧厂区车辆导航解决方案&#xff1b;智慧工厂电子地图应用解决方案 在智慧工业的蓬勃发展背景下&#xff0c;上海懒图科技凭借其室内电子地图技术的深厚积淀&#xff0c;正为智慧工厂物流管理领域注入革新力量。其创新的车辆导航与可视化管理系统&#xff0c;凭借高精度定位…...

决策树C4.5算法详解及实现

C4.5决策树是一种广泛使用的机器学习算法&#xff0c;它用于分类任务。它是在ID3算法的基础上改进的&#xff0c;主要通过生成决策树来构建分类模型。C4.5通过以下步骤工作&#xff1a; 1. 数据集分裂 C4.5通过选择具有最高信息增益率的特征来分裂数据集。信息增益率&#xf…...

prompt learning

prompt learning 对于CLIP&#xff08;如上图所示&#xff09;而言&#xff0c;对其prompt构造的更改就是在zero shot应用到下游任务的时候对其输入的label text进行一定的更改&#xff0c;比如将“A photo of a{obj}”改为“[V1][V2]…[Vn][Class]”这样可学习的V1-Vn的token…...

适用于 Windows 11 的 5 大数据恢复软件 [免费和付费]

为什么我们需要Windows 11数据恢复软件&#xff1f; 计算机用户经常遇到的一件事就是数据丢失&#xff0c;这种情况随时可能发生。错误地删除重要文件和文件夹可能会非常令人担忧&#xff0c;但幸运的是&#xff0c;有一种方法可以恢复 PC 上丢失的数据。本文将向您展示可用于…...

vue实现获取当前时间并实时显示

以下代码可以实现获取当前时间并实时显示&#xff0c;朋友们直接copy使用即可&#xff0c;希望可以帮助到有需要的朋友们&#xff01; <template><div class"time">{{ datetimeStr }}</div> </template> <script>export default {data…...

【论文阅读】SRCNN

学习资料 论文题目&#xff1a;Learning a Deep Convolutional Network for Image Super-Resolution&#xff08;学习深度卷积网络用于图像超分辨率&#xff09;论文地址&#xff1a;link.springer.com/content/pdf/10.1007/978-3-319-10593-2_13.pdf代码&#xff1a;作者提出的…...

数据结构与算法——Java实现 32.堆

目录 堆 大顶堆 威廉姆斯建堆算法 Floyd建堆算法 Floyd建堆算法复杂度 大顶堆代码实现 人的想法和感受是会随着时间的认知改变而改变&#xff0c; 原来你笃定不会变的事&#xff0c;也会在最后一刻变得释然 —— 24.10.10 堆 堆是基于二叉树实现的数据结构 大顶堆任意一个父节…...

深度学习 .dot()

在 MXNet 中&#xff0c;.dot() 是用于计算两个数组的点积&#xff08;矩阵乘法&#xff09;的方法。这个方法适用于一维和二维数组&#xff0c;并返回它们的点积结果。 语法 ndarray1.dot(ndarray2) 参数 ndarray1: 第一个输入数组。ndarray2: 第二个输入数组&#xff0c;…...

idea2024 git merge 时丢失 Merge remote-tracking branch问题

idea2024 git merge 时丢失 Merge remote-tracking branch问题 处理建议 直接修改本地git的配置 git config --global merge.ff false 分析 在 IntelliJ IDEA 中进行 Git merge 操作时&#xff0c;有时你可能会遇到提交历史中丢失 Merge remote-tracking branch 的信息&#…...

pdf怎么删除多余不想要的页面?删除pdf多余页面的多个方法

pdf怎么删除多余不想要的页面&#xff1f;在日常办公或学习中&#xff0c;我们经常会遇到需要处理PDF文件的情况。PDF文件因其格式稳定、不易被篡改的特点而广受青睐&#xff0c;但在编辑方面却相对不如Word等文档灵活。有时&#xff0c;在接收或创建的PDF文件中&#xff0c;可…...

树莓派应用--AI项目实战篇来啦-3.OpenCV 读取写入和显示图像

1. 介绍 在计算机视觉和图像处理领域&#xff0c;读取和显示图像是最基础且常见的操作之一&#xff0c;OpenCV作为一个强大的计算机视觉库&#xff0c;提供了丰富的功能来处理图像数据。 读取、显示和写入图像是图像处理和计算机视觉的基础&#xff0c;即使裁剪、调整大…...

一句话就把HTTPS工作原理讲明白了

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 上午好&#xff0c;我的网工朋友。 在当今互联网高度发达的时代&#xff0c;信息安全已成为不容忽视的重要议题。 随着越来越多的个人信息和敏感…...

CPU 和处理核心(Core)中间有3个缓存

一、CPU 和处理核心&#xff08;Core&#xff09;的关系 CPU和处理核心之间的关系是整体与部分的关系。随着多核技术的发展&#xff0c;现代CPU通过包含多个处理核心来提高其并行处理能力和整体性能&#xff0c;同时在核心之间实现资源的有效共享和独立使用。这种架构的进步使…...

前后分离项目记录

一.前端设置 1.打包问题 打包报错 Thread Loader时&#xff0c;增加以下代码&#xff1a; 2.上线时api设置 二.Nginx问题 1.缓存问题&#xff1a;添加如下代码以禁止缓存&#xff0c;否则在关闭nginx后仍然可以访问页面 2.跨域问题在后端加CrossOrigin注解即可 3.上线时co…...

一句话木马的多种变形方式

今天来和大家聊一聊&#xff0c;一句话木马的多种变形方式。 经常有客户的网站碰到被上传小马和大马&#xff0c;这里的“马”是木马的意思&#xff0c;可不是真实的马。 通常&#xff0c;攻击者利用文件上传漏洞&#xff0c;上传一个可执行并且能被解析的脚本文件&#xff0c;…...

【NestJS入门到精通】装饰器

目录 方法装饰器通过prototype添加属性、方法 属性装饰器拓展 方法装饰器参数装饰器 方法装饰器 ClassDecorator 定义了一个类装饰器 a&#xff0c;并将其应用于类 A。装饰器 a 会在类 A 被定义时执行。 const a:ClassDecorator (target:any)>{console.log(target,targe…...

XML 编辑最简单好用的 QXmlEdit 软件已经完整中文化

XML 编辑最简单好用的 QXmlEdit 软件已经完整中文化 简介一、软件界面二、安装下载2.1 QXmlEdit 官方网站下载2.2 QXmlEdit 源代码下载2.3 QXmlEdit 软件中文版下载 三、QXmlEdit 编辑 ADCP 测量项目的 MMT 文件3.1 应用 XML 文件缩进3.2 使用 QXmlEdit 缩进编辑保存后&#xf…...

ref标签、style的scope

ref标签 作用&#xff1a;用于注册模板引用。 用在普通DOM标签上&#xff0c;获取的是DOM节点。用在组件标签上&#xff0c;获取的是组件实例对象。 DOM&#xff1a; <template><div class"person"><h2 ref"title2">上海</h2>&l…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...