07 HAL库ADC读取电压的值

引言: 本文使用adc读取接在SOC的ADC的通道上外设的模拟数据,本文的的实验对象是一个滑动变阻器, 像其它的ADC外设不如光电管, 火焰传感器, 等等一些里的adc设备的根据都是差不多的。

一、ADC的基本知识


ADC(模数转换器)是一种将模拟信号转换为数字信号的设备或电路。它是在数字系统中进行模拟信号处理和采集的关键组件。

以下是ADC的基本知识:

1. 工作原理:ADC通过一系列的转换步骤将连续变化的模拟信号转换为离散的数字信号。这个过程涉及两个主要步骤:采样和量化。 - 采样:ADC以固定的时间间隔采集模拟信号的样本值。采样率决定了每秒采集的样本数量,例如,1kHz采样率意味着每秒采样1000次。 - 量化:ADC将每个采样值转换为离散的数字表示,通常使用二进制形式。量化过程将模拟信号的连续范围分割成一系列离散的电平,每个电平对应一个数字值。

2. 分辨率(Resolution):ADC的分辨率决定了其可以转换的模拟信号范围的细致程度。较高的分辨率意味着ADC可以识别和转换更小的变化。分辨率通常以比特(bit)表示,例如8位、10位、12位等。

3. 参考电压(Reference Voltage):ADC使用参考电压来确定模拟信号的电平范围。参考电压是ADC转换时测量的基准,它定义了模拟信号的最大和最小电平。

4. 采样速率(Sampling Rate):ADC的采样速率表示以多少Hz的速度取样输入模拟信号。高采样率可以更准确地捕捉模拟信号的快速变化,但同时需要更大的数据处理和存储能力。

5. 输出数据格式:ADC通常将转换后的数字信号作为输出。输出数据格式可以是二进制编码(二进制数值),补码(有符号数值),或其他特定的编码方式,具体取决于ADC的设计和应用需求。

总之,ADC是将模拟信号转换为数字信号的设备,通过采样和量化将连续变化的模拟信号转换为离散的数字表示,方便数字系统进行信号处理和存储。

二、实验开始


1. 查看原理图

大家根据自己的原理图, 产看外围的设备与SOC连接的引脚, 去配置gpio引脚的模式。

选着对应的adc通道, 接着再去将对应的adc通道给打开。

设置adc的相关参数

需要重点关注的是adc的分辨率, 也就是量化之后的值。

2. 计算原理

假设我选择的adc分辨率为12位, 2的12次方也就是65535, 假如我的IO口的电压范围是0~3.3V, 那是不是我可以将0~65535-1和0~3.3v做一个量化比值的过程, 计算公式如下:

mv = ad_value * (65535 / 3300)

获取到多少mv之后再给大家介绍一下小数转换位整数, 以及使用printf函数显示小数。

float a = 3.2;
int b = a;             //方法一:b就是一个整数
int c = (int)a;        //方法二:b也是一个整数

使用printf函数显示小数部分, 因为printf在单片机的应用中, printf是不支持显示小数的, 但是可以这样干。

还可以这样

程序源码:

/** measure_voltage.h**  Created on: Dec 30, 2023*      Author: 哈西好多*/#ifndef INC_MEASURE_VOLTAGE_H_
#define INC_MEASURE_VOLTAGE_H_#include "main.h"#define VOLTAGE_MAX (3762)
#define VOLTAGE_MIN (70)
#define STEP (3300/3762.0)extern uint32_t Get_Voltage_Value(void);#endif /* INC_MEASURE_VOLTAGE_H_ */
/** measure_voltage.c**  Created on: Dec 30, 2023*      Author: 哈西好多*/#include "measure_voltage.h"
#include "adc.h"uint32_t Get_Voltage_Value(void)
{uint32_t voltage = 0;float temp = 0;int interge, digit;if(HAL_ADC_Start(&hadc1) != HAL_OK) {Error_Handler();}HAL_ADC_PollForConversion(&hadc1, 300);voltage = HAL_ADC_GetValue(&hadc1);temp = voltage * STEP / 1000;interge = (int)temp;             //整数部分digit = (temp * 100) - (interge * 100);   //小数部分printf("voltage: %d.%dv\n", interge, digit);return 0;
}

这里我是使用uart到电脑显示的, 大家也可以驱动OLED来显示。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache Doris (五十五): Doris Join类型 - Colocation Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. Colocation Join原理

苦心分享两款免费AI 绘图软件,效果真的不错

这里写自定义目录标题 图一是 AI 绘画软件一键抠图做的,软件还免费 网址:https://www.yijiankoutu.com/ 一个非常强大的AI绘画网站,能够免费生成各种好看的二次元、3D、国风、漫画、卡通等风格的图片,生成图片跟文字匹配度非常高,…

【Qt之Quick模块】6. QML语法详解_3 QML对象特性

概述 每一个QML对象类型都包含一组已定义的特性。当进行实例时都会包含一组特性,这些特性是在对象类型中定义的。 一个QML文档中的对象类型声明了一个新的类型,即实例出一个类型。 其中包含以下特性。 the id attribute : id特性property a…

Node.js使用jemalloc内存分配器显著减少内存使用

前言 Node.js 默认使用的是 ptmalloc(glibc) 内存分配器,而: 在服务端领域「不会选择默认的 malloc」是一个常识。( 来源 ) ptmalloc 的分配效率较低( 来源 ),对于 长时间、多核 / 多线程 运行…

lvm建立卷组和扩容

一、逻辑卷lvm 1.可以动态扩容 pe是逻辑卷最小的存储单元,最小4k 1.物理卷 将硬盘转化成 pe 2.卷组 将pe分组,一个逻辑卷只可以用一个组里面的pe 3.逻辑卷 类似于分区 1.1分区类型 lvm 如果使用分区,要修改分区类型为8e 二、…

Nacos身份认证权限绕过+漏洞利用工具分享

目录 一 JWT JWT: JWT的使用场景: JWT构造: 二 漏洞描述: 三 环境搭建 四 漏洞复现 五 工具漏洞复现 六 修复建议 七 工具分享 本文由掌控安全学院 - 小博 投稿 一 JWT JWT: JSON Web Token (JWT)是一个开放标准(RFC 7519)&…

【JAVA】实验一 从面向过程到面向对象

实验名称 实验一 从面向过程到面向对象 实验目的 1. 掌握Java语言简单数据类型、表达式、输入输出; 2. 理解Java类中main方法的编写及过程化编程; 3. 掌握Java数组的使用。 实验内容 1. 输入年份,判断是否是闰年。闰年…

看懂基本的电路原理图(入门)

文章目录 前言一、二极管二、电容三、接地一般符号四、晶体振荡器五、各种符号的含义六、查看原理图的顺序总结 前言 电子入门,怎么看原理图,各个图标都代表什么含义,今天好好来汇总一下。 就比如这个电路原理图来说,各个符号都…

【Linux C | 文件I/O】文件数据的同步 | sysc、fsync 和 fdatasync 函数

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

[每周一更]-(第47期):Go业务发展方向

Go业务方向 Go(也称为Golang)是一种开源编程语言,具有简洁、高效和并发性等特点,逐渐在业界流行起来。Go语言在不同领域有着广泛的应用, 下面列举了一些Go语言的业务发展方向: Web开发:Go语言…

jumpServer-01-跳板机与堡垒机

jumpServer-01-跳板机与堡垒机 文章目录 jumpServer-01-跳板机与堡垒机一、为什么需要跳板机?二、堡垒机的核心价值三、跳板机与堡垒机的区别四、堡垒机的核心作用与价值 一、为什么需要跳板机? 跳板机(Jump Server)是一种安全设备…

【小白专用】winform启动界面+登录窗口 更新2024.1.1

需求场景:先展示启动界面,然后打开登录界面,如果登录成功就跳转到主界面 首先在程序的入口路径加载启动界面,使用ShowDialog显示界面, 然后在启动界面中添加定时器,来实现显示一段时间的效果,等…