STM32F4----ADC模拟量转换成数字量

STM32F4----ADC模拟量转换成数字量

基本原理

当需要测量和记录外部电压的变化,或者根据外部电压的变化量来决定是否触发某个动作时,我们可以使用ADC(模拟—数字转换器)功能。这个功能可以将模拟的电压信号转换为数字信号,方便我们进行测量、记录或判断。例如,假设有一个温度传感器,它的输出是一个与温度成正比的模拟电压信号,可将这个模拟信号连接到F4的ADC输入端,然后通过ADC功能将这个模拟信号转换为数字信号,并读取这个数字信号获取温度的信息。进一步的可根据这个数字信号的变化,来决定是否要触发某个动作,例如温度超过了设定的阈值,即会触发一个报警动作。
STM32F4内置的ADC简介。
1)转换类型:STM32F4的ADC是基于逐次逼近原理工作的,这是一种常用的模数转换方法,它通过逐次比较来逼近输入信号的电压值。
2)通道数量:STM32F4微控制器配备有3个ADC,每个ADC都可以独立使用,或者可以配置为双重或三重模式以提高采样率。它们提供多达19个复用通道,这意味着可以同时测量来自多个源的信号,包括16个外部源、2个内部源以及Vbat通道。
3)转换模式:这些通道的A/D转换支持多种模式,包括单次转换、连续转换、扫描转换和间断转换,使微控制器能够灵活应对不同的应用场景。
4)数据存储:转换结果可以以左对齐(4-15位)或右对齐(0-11位)的方式存储在16位的数据寄存器中,这为用户提供了不同的数据存储选项。
5)分辨率设置:STM32F4的ADC可以设置为6位、8位或12位的模式,位数越高,分辨率越高,从而能够更精确地表示模拟信号的细节。
6)保护机制:STM32F4的ADC还具有模拟看门狗特性,允许应用程序检测输入电压是否超出了用户自定义的阈值上限或下限,这为系统提供了额外的保护机制。
7)电源供应:ADC模块的输入电压范围是由VREF-(参考负电压)和VREF+(参考正电压)这两个外部引脚决定的。在设计电路时,通常会将VSSA(模拟电源负端)和VREF-接地,而将VREF+和VDDA(数字电源正端)连接到3.3V,这样就得到了ADC的输入电压范围为0-3.3V。此外,12位的ADC意味着有4096个(0-4095)不同的数值可以表示0-3.3V之间的电压,可以理解为把3.3V分成了4096份,因此每个单位(ADC转换值0-4095)的增加代表着3.3V/4096的电压增加。
转换公式:
在这里插入图片描述
ADC的通道选择很重要,在STM32F4的ADC19个通道中,外部16个通道对应着不同的IO口(见表1.1)。这些通道可以用来测量外部的模拟信号,通过采样并将其转换为数字值供微控制器处理。
在这里插入图片描述
要注意的是,为了保证转换结果准确性,不要让ADC的时钟超过36MHz,而STM32F4ADC模块的时钟频率取决于APB2总线的基础时钟和分频系数。例如,APB2总线的基础时钟是84MHz,选择分频系数为4(分频系数有2、4、6、8),则ADC时钟频率为21MHz。
采样时间是根据实际需要设置的,它表示ADC采集模拟信号的时间长度。理论上,采样时间越长,得到的结果越精确,但同时也会增加转换时间。转换时间等于采样时间加上12个ADC时钟周期(也称固定时钟周期),其中12个固定时钟周期是因为12位ADC需要12个时钟周期来完成一次完整的模拟信号到数字信号的转换过程。为了确保信号能够被准确地采集,在转换开始之前通常会有一个最小的采样时间要求,这就意味着最少的转换周期数为15个ADC周期,其中包括了12个转换周期和3个可编程的采样周期。可编程采样时间可设置为3、15、28、56、84、112、144、480个周期。
列如,当选择分频系数为4、时钟周期为3时,根据转换时间(TCONV)计算公式:
在这里插入图片描述
得到此时转换速率为1.4MHz,转换时间为0.71μs,即每秒可以进行最多140万次采样。STM32F4的ADC最大转换速率为2.4MHz,转换时间为0.41us(这是在ADC的时钟等于36MHz,没有算12个固定时钟周期,采样周期为3个周期下得到的)。
如果被测的电压大于ADC输入电压,例如,要用STM32F4测量0~12V外部电压,可以在外部电压输入ADC引脚之前,加入电阻分压模块使其最大输入值控制在3.3V以内。STM32F4还具有模拟看门狗特性,允许应用程序检测输入电压是否超出定义的高/低阀值,这可以为系统提供额外的保护,防止由于输入电压异常而导致的潜在问题。

接下来介绍具体编程步骤

步骤一:结构体介绍

//ADC初始化结构体
typedef struct
{
  uint32_t ADC_Resolution;//定义ADC分辨率,单位为位
  FunctionalState ADC_ScanConvMode;//定义ADC扫描转换模式,启用或禁用
  FunctionalState ADC_ContinuousConvMode;//定义ADC连续转换模式,启用或禁用
  uint32_t ADC_ExternalTrigConvEdge;//定义外部触发转换的边沿类型
  uint32_t ADC_ExternalTrigConv;//定义外部触发转换源
  uint32_t ADC_DataAlign; //定义ADC数据对齐方式
  uint8_t  ADC_NbrOfConversion; //定义ADC转换通道的数量
}ADC_InitTypeDef;

步骤二:ADC程序配置

//ADC初始化配置
//程序包领取需加qq
// 3182068342
void ADC_ControlIO_Init(void)
{

}
//读取ADC值
//程序包领取需加qq
// 3182068342
u16 Read_ADC(void)
{

}
//定义一个函数,用于计算ADC的平均值
//程序包领取需加qq
// 3182068342
float Average_ADC(u8 t)
{

}

步骤三:主程序

//程序包领取需加qq
// 3182068342
int main(void)
{
  float Adc_value;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断分组
  LED_Init();  //初始化LED
  usart1_Init();  //初始化USART1串口通信
  ADC_ControlIO_Init();  //初始化ADC控制IO	
  while(1)
  {
    Adc_value = Average_ADC(10);  //读取ADC值,并计算平均值,参数10表示连续读取10次ADC值后取平均
    printf("%.3f\r\n", Adc_value);  //打印出ADC的平均值,保留三位小数
    if (Adc_value<2) LED1=0;  //如果ADC平均值小于3,开启LED1
    else LED1 = 1;  //如果ADC平均值大于等于3,关闭LED1
    delay_ms(100); 
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/921984.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大数据学习18之Spark-SQL

1.概述 1.1.简介 Spark SQL 是 Apache Spark 用于处理结构化数据的模块。 1.2.历史 1.2.1.Shark Hadoop诞生初期&#xff0c;Hive是唯一在Hadoop上运行的SQL-on-Hadoop工具&#xff0c;MR的中间计算过程产生了大量的磁盘落地操作&#xff0c;消耗了大量的I/O&#xff0c;降低…

医学AI公开课·第一期|Machine LearningTransformers in Med AI

小罗碎碎念 从这周开始&#xff0c;我计划每个周末录一个视频&#xff0c;分享一些医学人工智能领域的进展。 作为第一期视频&#xff0c;我打算介绍一下机器学习和Transformer在医学AI领域中的应用。 为了准备这期视频&#xff0c;总共做了24页PPT&#xff08;三部分内容&…

小白投资理财 - 解读威廉指标 WR

小白投资理财 - 解读威廉指标 WR WR 指标WR 指标特点WR 指标解读WR 与其他指标的结合实战案例&#xff1a;WR 计算WR 的优缺点WR 和 Williams Fractals 的主要区别总结 上篇《小白投资理财 - 解读威廉分形指标 Williams Fractals》&#xff0c;今天我们来了解另外一个威廉指标 …

前端速通(HTML)

1. HTML HTML基础&#xff1a; 什么是HTML&#xff1f; 超文本&#xff1a; "超文本"是指通过链接连接不同网页或资源的能力。HTML支持通过<a>标签创建超链接&#xff0c;方便用户从一个页面跳转到另一个页面。 标记语言&#xff1a; HTML使用一组预定义的标签…

电商一件发货软件闲管家使用教程

闲鱼闲管家是一款专为闲鱼卖家设计的电脑版工作台&#xff0c;旨在帮助卖家更高效地管理其在闲鱼平台上的业务。以下是关于闲鱼闲管家的一些主要特点和功能&#xff1a; 主要特点&#xff1a; 多账号管理&#xff1a;支持同时管理多达30个闲鱼账号&#xff0c;方便大型卖家或…

第一个autogen与docker项目

前提条件&#xff1a;在windows上安装docker 代码如下&#xff1a; import os import autogen from autogen import AssistantAgent, UserProxyAgentllm_config {"config_list": [{"model": "GLM-4-Plus","api_key": "your api…

JavaEE 【知识改变命运】02 多线程(1)

文章目录 线程是什么&#xff1f;1.1概念1.1.1 线程是什么&#xff1f;1.1.2 为什么要有线程1.1.3 进程和线程的区别1.1.4 思考&#xff1a;执行一个任务&#xff0c;是不是创建的线程或者越多是不是越好&#xff1f;&#xff08;比如吃包子比赛&#xff09;1.1.5 ) Java 的线程…

LeetCode 力扣 热题 100道(八)相交链表(C++)

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…

全面解析 JMeter 后置处理器:概念、工作原理与应用场景

在性能测试中&#xff0c;Apache JMeter是一个非常流行的工具&#xff0c;它不仅能够模拟大量用户进行并发访问&#xff0c;还提供了丰富的扩展机制来满足各种复杂的测试需求。后置处理器&#xff08;Post-Processor&#xff09;是JMeter中非常重要的组件之一&#xff0c;用于在…

java八股-SpringCloud微服务-Eureka理论

文章目录 SpringCloud架构Eureka流程Nacos和Eureka的区别是&#xff1f;CAP定理Ribbon负载均衡策略自定义负载均衡策略如何实现&#xff1f;本章小结 SpringCloud架构 Eureka流程 服务提供者向Eureka注册服务信息服务消费者向注册中心拉取服务信息服务消费者使用负载均衡算法挑…

每天五分钟机器学习:支持向量机数学基础之超平面分离定理

本文重点 超平面分离定理(Separating Hyperplane Theorem)是数学和机器学习领域中的一个重要概念,特别是在凸集理论和最优化理论中有着广泛的应用。该定理表明,在特定的条件下,两个不相交的凸集总可以用一个超平面进行分离。 定义与表述 超平面分离定理(Separating Hy…

day05(单片机高级)PCB基础

目录 PCB基础 什么是PCB&#xff1f;PCB的作用&#xff1f; PCB的制作过程 PCB板的层数 PCB设计软件 安装立创EDA PCB基础 什么是PCB&#xff1f;PCB的作用&#xff1f; PCB&#xff08;Printed Circuit Board&#xff09;&#xff0c;中文名称为印制电路板&#xff0c;又称印刷…

电脑自动关机时间如何定?Wise Auto Shutdown 设置关机教程

在日常使用电脑的过程中&#xff0c;有时我们需要让电脑在特定的时间自动关机&#xff0c;比如在下载大文件完成后、执行长时间的任务结束时&#xff0c;或者只是单纯想在某个预定时间让电脑自动关闭以节省能源。这时候&#xff0c;Wise Auto Shutdown 这款软件就能派上大用场了…

Lucene(2):Springboot整合全文检索引擎TermInSetQuery应用实例附源码

前言 本章代码已分享至Gitee: https://gitee.com/lengcz/springbootlucene01 接上文。Lucene(1):Springboot整合全文检索引擎Lucene常规入门附源码 如何在指定范围内查询。从lucene 7 开始&#xff0c;filter 被弃用&#xff0c;导致无法进行调节过滤。 TermInSetQuery 指定…

使用Kubernetes部署第一个应用

目录 前提条件 启动集群 部署 nginx 应用 创建 YAML 文件 应用 YAML 文件 查看部署结果 理解Pods 相关命令 公布应用程序 问题背景 Kubernetes Service&#xff08;服务&#xff09;概述 服务和标签 为Deployment 创建一个 Service 伸缩应用程序 Scaling&#x…

使用 Maven 创建 jar / war 项目

使用 Maven 创建 jar 项目 maven-archetype-quickstart 这个Archetype&#xff0c;基本内容包括&#xff1a; 一个包含junit依赖声明的 pom.xml 、src/main/java主代码目录及一个名为App的类 、src/test/java测试代码目录及一个名为 AppTest的测试用例maven-archetype-webapp 一…

HDR视频技术之四:HDR 主要标准

HDR 是 UHD 技术中最重要维度之一&#xff0c;带来新的视觉呈现体验。 HDR 技术涉及到采集、加工、传输、呈现等视频流程上的多个环节&#xff0c;需要定义出互联互通的产业标准&#xff0c;以支持规模化应用和部署。本文整理当前 HDR 应用中的一些代表性的国际标准。 1 HDR 发…

Ubuntu中使用多版本的GCC

我的系统中已经安装了GCC11.4&#xff0c;在安装cuda时出现以下错误提示&#xff1a; 意思是当前的GCC版本过高&#xff0c;要在保留GCC11.4的同时安装GCC9并可以切换&#xff0c;可以通过以下步骤实现&#xff1a; 步骤 1: 安装 GCC 9 sudo apt-get update sudo apt-get ins…

dubbo-go框架介绍

框架介绍 什么是 dubbo-go Dubbo-go 是 Apache Dubbo 的 go 语言实现&#xff0c;它完全遵循 Apache Dubbo 设计原则与目标&#xff0c;是 go 语言领域的一款优秀微服务开发框架。dubbo-go 提供&#xff1a; API 与 RPC 协议&#xff1a;帮助解决组件之间的 RPC 通信问题&am…

DataGear 5.2.0 发布,数据可视化分析平台

DataGear 企业版 1.3.0 已发布&#xff0c;欢迎体验&#xff01; http://datagear.tech/pro/ DataGear 5.2.0 发布&#xff0c;图表插件支持定义依赖库、严重 BUG 修复、功能改进、安全增强&#xff0c;具体更新内容如下&#xff1a; 重构&#xff1a;各模块管理功能访问路径…