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

news2024/11/24 5:24:47

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); 
  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Python 股票交易分析:开启智能投资新时代》(二)

Python 进行股票交易分析的优势 简洁易读&#xff1a;Python 的语法简洁明了&#xff0c;即使是编程新手也能较快上手&#xff0c;降低了股票交易分析的门槛。 Python 的简洁易读是其在股票交易分析中受欢迎的重要原因之一。Python 的语法简洁明了&#xff0c;与其他编程语言相…

python程序的编写以及发布(形象类比)

最近重新接触python&#xff0c;本人之前对于python的虚拟环境&#xff0c;安装包比较比较迷惑&#xff0c;这里给出一个具象的理解。可以将 Python 程序运行的过程类比成一次 做菜的过程&#xff0c;从准备食材到最后出锅。以下是具体的类比步骤&#xff1a; 1. 安装 Python 环…

ThinkPad t61p 作SMB服务器,打印服务器,pc ,android ,ipad利用此服务器互传文件

1.在t61p上安装win7 2,配置好smb 服务 3.再安装好打印驱动程序 4.pc与win7利用系统的网络互相发现,映射为硬盘使用。 5.android&#xff0c;ipad安装ES文件浏览器访问win7 共享文件夹&#xff0c;互传文件。 6.android手机安装FE文件浏览器&#xff0c;可以利用花生壳外网…

C# 属性 学习理解记录

字段和属性 左边字段&#xff0c;右边属性 拓展&#xff0c;属性安全&#xff1a; 1、设置public private 和protected 等&#xff0c;只读&#xff0c;只写&#xff0c; 2、在get set 方法时&#xff0c;验证&#xff0c;异常时抛出错误

决策树分类算法【sklearn/决策树分裂指标/鸢尾花分类实战】

决策树分类算法 1. 什么是决策树&#xff1f;2. DecisionTreeClassifier的使用&#xff08;sklearn&#xff09;2.1 算例介绍2.2 构建决策树并实现可视化 3. 决策树分裂指标3.1 信息熵&#xff08;ID3&#xff09;3.2 信息增益3.3 基尼指数&#xff08;CART&#xff09; 4. 代码…

CentOS使用中遇到的问题及解决方法

一、CentOS 7网络配置&#xff08;安装后无法联网问题&#xff09; 现象说明 在安装CentOS系统后&#xff0c;有可能出现无法联网的问题&#xff0c;虚拟机中的网络配置并没有问题&#xff0c;而系统却无法联网,也ping不通。 原因描述 CentOS默认开机不启动网络&#xff0c;因…

硬件知识 cadence16.6 原理图输出为pdf 网络名下划线偏移 (ORCAD)

1. cadence原理图输出为PDF网络名下划线偏移 生这种情况的原因 1. 设计的原理图图纸大小比正常的 A4图纸大。 2. 打印为PDF 的时候&#xff0c;打印机的设置有问题。 2.cadence原理图输出为 PDF网络名下划线偏移的情况 可以看到上图&#xff0c;网络名往上漂移。 3. 解决办法 …

Hash table类算法【leetcode】

哈希表中关键码就是数组的索引下标&#xff0c;然后通过下标直接访问数组中的元素 那么哈希表能解决什么问题呢&#xff0c;一般哈希表都是用来快速判断一个元素是否出现集合里。 例如要查询一个名字是否在这所学校里。 要枚举的话时间复杂度是O(n)&#xff0c;但如果使用哈希…

利用c语言详细介绍下希尔排序

希尔排序是针对插入排序的优化算法。它是缩少增量的算法&#xff0c;一开始增量从元素个数len/2的增量开始&#xff0c;然后缩小增量gapgap/2&#xff0c;直到gap为1&#xff0c;最终完成序列排序。 一、图文介绍 我们还是使用数组【10&#xff0c;5&#xff0c;3&#xff0c;2…

Flutter踩坑记录(三)-- 更改入口执行文件

我们在flutter 中可能不习惯默认的lib/main.dart 作为入口文件&#xff0c;会修改成index.dart 或者修改main.dart的位置, 用Andorid studio开发 如果我们用Andorid studio开发&#xff0c;默认修改一下配置地址 运行项目即可。 用VSCode开发 如果我们使用VSCode开发&…

C#桌面应用制作计算器进阶版01

基于C#桌面应用制作计算器做出了少量改动&#xff0c;其主要改动为新增加了一个label控件&#xff0c;使其每一步运算结果由label2展示出来&#xff0c;而当点击“”时&#xff0c;最终运算结果将由label1展示出来&#xff0c;此时label清空。 修改后运行效果 修改后全篇代码 …

应用商店双弹窗“APP在向用户申请权限时未同步告知用户申请此权限的理由”驳回uni-app应用上线的解决方法

目录 问题分析 解决方法 下载插件包&#xff1a;x-perm-apply-instr 将插件包导入进你项目中的uni_modules文件夹 在项目中的main.js文件中添加以下代码 完成 其它注意事项 addPermisionInterceptor 添加 uniApi 调用拦截 removePermisionInterceptor 移除 uniApi 调用…

dockerfile构建Nginx镜像练习二(5-2)

环境准备&#xff1a; (1)保证拥有centos基础镜像 docker images | grep centos (2)服务器保证可以连接外网 1.创建工作目录 mkdir nginx cd nginx 2.在工作目录中创建并编写Dockerfile文件 vim dockerfile #定义基础镜像 FROM centos:7#维护者信息(可缺省) MAINTAINER d…

Java 调用 MULTIPART_FORM_DATA 接口

以 QAnthing 上传文件&#xff08;POST&#xff09;接口为例&#xff0c;展示Java如何调用上传文件接口。 接口文档如下&#xff1a; QAnthign接口文档地址 编码 RestTemplate 版 /** * * param url 接口地址 * param filePath 文件本地路径 */ public void uploadFile(S…

Spring Framework 的版本历史和JDK、Springboot对应关系

spring 历史版本迭代 版本版本特性Spring Framework 1.01. 所有代码都在一个项目中2. 支持核心功能IoC、AOP3. 内置支持Hibernate、iBatis等第三方框架4. 对第三方技术简单封装。如&#xff1a;JDBC、Mail、事务等5. 只支持XML配置方式。6.主要通过 XML 配置文件来管理对象和依…

SpringSecurity创建一个简单的认证应用

1、SpringSecurity 的简介 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架&#xff0c;它是Spring项目组中用来提供安全认证服务的框架&#xff0c;能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案。 Spring Security 的前身是 Acegi …

力扣 LeetCode 236. 二叉树的最近公共祖先(Day10:二叉树)

解题思路&#xff1a; 后序遍历 注意&#xff1a; p和q其中一个就是它们的公共祖先的情况也考虑到了&#xff0c;假设q是公共祖先&#xff0c;遇到q就直接返回&#xff0c;相当于是下面一边为空&#xff0c;一边不为空的情况&#xff0c;返回不为空就一边即可 class Solutio…

AIGC(生成式AI)试用 18 -- AI Prompt

"忘了"&#xff0c;“记不清了”&#xff0c;“有点印像” “能给点提示吗&#xff1f;” ...... “哦&#xff0c;想起来了&#xff0c;是这样的。。。。。。” 这就是提示的作用&#xff1a;通过关键信息、结构化信息提示&#xff0c;引导完整的、…

Telegram bot Mini-App开发实践---Telegram简单介绍与初始化小程序获取window.Telegram.WebApp对象并解析

➡️【好看的灵魂千篇一律,有趣的鲲志一百六七!】- 欢迎认识我~~ 作者:鲲志说 (公众号、B站同名,视频号:鲲志说996) 科技博主:极星会 星辉大使 后端研发:java、go、python、TS,前电商、现web3 主理人:COC杭州开发者社区主理人 、周周黑客松杭州主理人、 AI爱好…

在Windows环境下打包Qt C++项目为独立可执行文件的完整指南

目录 1. 配置Qt环境变量步骤&#xff1a; 2. 使用Release模式编译项目步骤&#xff1a; 3. 使用windeployqt工具收集依赖项步骤&#xff1a; 4. 精简复制后的文件目录方法一&#xff1a;使用windeployqt的选项方法二&#xff1a;手动删除不必要的文件方法三&#xff1a;使用静态…