ESP32入门六(读取引脚的模拟信号[3]:信号出现误差的原因[硬件篇])

在之前的文章中,我们介绍了ESP32在读取模拟信号时出现的误差的软件方面原因,在这一篇中,将会介绍并测试由于硬件或其它方面导致数据出现误差的原因。

一、厂商原因

首先,我们需要知道,在每块EPS32中,在出厂时都带有一个ADC的基准值,我们可以用两种方法来查看到该基准值:

1、安装esptool工具来查看基准值

我们需要下载并安装python:

Python Release Python 3.12.1 | Python.org

选择合适你电脑的版本,下载并安装,在安装过程中,注意选择安装pip工具和勾选加入环境变量。

安装完成后,打开CMD。我们输入命令:

pip install esptool

等待安装完成

 安装安成后我们输入命令:

espefuse.exe --port COM5 adc_info

注意这里的COM5需要对应你自已ESP32在电脑上的端口号

我们可以得到adc的校准值。

2、用esp_adc_cal_characterize()函数获取ADC特性

函数:
esp_adc_cal_characterize()作用:将描述 ADC 在特定衰减条件下的特性,并以[y=coeff_a * x + coeff_b]的形式生成ADC电压曲线格式:esp_adc_cal_value_t esp_adc_cal_characterize(adc_unit_t adc_num, adc_atten_t atten, adc_bits_width_t bit_width, uint32_t default_vref, esp_adc_cal_characteristics_t *chars)参数:adc_num		-ADC特征编码(ADC_UNIT_1 or ADC_UNIT_2)可以在官方文档中的引脚定义中查看atten		-衰减值(ADC_ATTEN_DB_0 / ADC_ATTEN_DB_2_5 / ADC_ATTEN_DB_6 / ADC_ATTEN_DB_11)bit_width		-位宽设置(ADC_WIDTH_BIT_9 / ADC_WIDTH_BIT_10 / ADC_WIDTH_BIT_11 / ADC_WIDTH_BIT_12 / ADC_WIDTH_MAX)default_vref	-默认ADC基准电压(mV)*chars		-用于存储ADC特征的空结构指针返回:ESP_ADC_CAL_VAL_EFUSE_VREF	- ADC特性为eFuse中存储的Vref值ESP_ADC_CAL_VAL_EFUSE_TP	-特性为两点的值(仅用于线性模式)ESP_ADC_CAL_VAL_DEFAULT_VREF	-特性为默认Vref值

 代码:

#include "esp_adc_cal.h"
void setup() {// put your setup code here, to run once:Serial.begin(115200);delay(500);float vref_value;esp_adc_cal_characteristics_t adcChar;esp_adc_cal_value_t cal_mode = esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, 1100, &adcChar);if(cal_mode == ESP_ADC_CAL_VAL_EFUSE_VREF){vref_value = adcChar.vref; // 获取参考电压Serial.print("参考电压为:");Serial.println(vref_value);}else if(cal_mode == ESP_ADC_CAL_VAL_DEFAULT_VREF){Serial.println("默认参考电压");}
}void loop() {// put your main code here, to run repeatedly:}

运行后串口可以接收到设备的参考电压,当前测试的板子参考电压为1149

 

这个基准电压之所以和参考电压1100V有所误差,是因为每个板子在生产过程中,因为工艺 原因,导致内部电压和参考电压出现误差,所以,在出 厂时,把这个误差值写入到板子,以便使用者可以测量和消除这个误差, 这个基准值可以生成特性曲线,以反映特定 ESP32 芯片 ADC 基准电压的变化,在上一章中所用到的analogReadMillivolts()函数,就是利用这个基准值来消除读取数据时产生的误差。

二、电压误差

大多数情况下,在使用或测试ESP32的过程中,很少人会用到专业的电源来输出。同时,也因为工艺的原因,所以,我们如果用万用表测量3V3引脚时,很可能测量出来的数据并非3.3V。比如本文 中所用的板子是连接到电脑USB接口上的,在所有引脚都悬空的情况下,用万用表测量到的3v3引脚的电压为3.2V。而在另一块板子上测量到的电压为3.32V。在这种情况下,不管是电源的原因还是生产工艺的原因,都会对读取到的数据造成误差。我们同样以上一章中所用的板子,以同样的代码,但生成的电压设置为3.2V来再次测试读取到的数据:

 我们把代码中的

float vout = (dac_value) * 3.3  / 255;
//改为
float vout = (dac_value) * 3.2  / 255;
#include <esp32-hal-adc.h>
uint8_t dac_value = 0;                            //DAC值,2^8长度
void setup() {Serial.begin(115200);
}void loop() {dac_value++;                              //DAC值累加float vout = (dac_value) * 3.2  / 255;    //DAC值转为电压值Serial.print("vout = ");Serial.print(vout);                     //串口输出当前输出的电压值dacWrite(25,dac_value);                   //25号引脚输出对应电压float vin = analogReadMillivolts(4)/1000.0;   //4号引脚读取25号引脚的电压值Serial.print(" | ");Serial.print("vin = ");Serial.print(vin);                      //串口输出当前输入的电压值Serial.print(" | ");Serial.print("deviation = ");Serial.println(vout - vin);             //串口输出当前输出与输入的误差delay(100);
}

可以观察到,误差对比上一章进一步减少了

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

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

相关文章

将python程序变成可执行程序 | 进阶篇

系列文章目录 第一章 将python程序变成可执行程序 | 基础篇 第二章 将python程序变成可执行程序 | 进阶篇 文章目录 系列文章目录前言一、编写一个小程序二、代码实现二、打包程序总结 前言 上一篇粗略的讲了下如何将python程序打包成可执行程序&#xff0c;并展示了在ubuntu…

动态规划 | 鸡蛋问题 | 元旦假期来点“蛋”题

文章目录 鸡蛋掉落 - 两枚鸡蛋题目描述动态规划解法问题分析程序代码 鸡蛋掉落题目描述问题分析程序代码复杂度分析 鸡蛋掉落 - 两枚鸡蛋 题目描述 原题链接 给你 2 枚相同 的鸡蛋&#xff0c;和一栋从第 1 层到第 n 层共有 n 层楼的建筑。 已知存在楼层 f &#xff0c;满足 …

互联网加竞赛 基于Django与深度学习的股票预测系统

文章目录 0 前言1 课题背景2 实现效果3 Django框架4 数据整理5 模型准备和训练6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于Django与深度学习的股票预测系统 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff…

精致旅游公司Treker网页设计 html模板

一、需求分析 旅游网站通常具有多种功能&#xff0c;以下是一些常见的旅游网站功能&#xff1a; 酒店预订&#xff1a;旅游网站可以提供酒店预订服务&#xff0c;让用户搜索并预订符合其需求和预算的酒店房间。 机票预订&#xff1a;用户可以通过旅游网站搜索、比较和预订机票…

[电磁学]猴博士不挂科

1 利用表格求场强 2 利用叠加求场强 3 利用积分求场强 电场立库仑力 球的面积公式是4πr&#xff0c;其中r为球的半径。 球的体积公式是(4/3)πr&#xff0c;其中r为球的半径。 带电物体有体积:

算法专题四:前缀和

前缀和 一.一维前缀和(模板)&#xff1a;1.思路一&#xff1a;暴力解法2.思路二&#xff1a;前缀和思路 二. 二维前缀和(模板)&#xff1a;1.思路一&#xff1a;构造前缀和数组 三.寻找数组的中心下标&#xff1a;1.思路一&#xff1a;前缀和 四.除自身以外数组的乘积&#xff…

Pytorch框架基础

参考资料 pytorch框架基础 Pycharm 页面卡住解决方案 使用ps命令结合grep来查找PyCharm相关的进程 ps aux | grep pycharm kill -9 [PID]关于怎么找这个卡住的进程&#xff0c;据初步观察&#xff0c;卡住进程打印的信息是最长的&#xff0c;此外&#xff0c;在卡住进程的打…

1、gdb基本功能

文章目录 1、gdb1.1、运行1.1.1、程序入参 1.2、断点及观察点1.2.1、设置断点1.2.2、禁用、删除断点1.2.3、观察点 1.3、打印1.3.1、设定打印参数1.3.2、打印数据1.3.3、自动打印1.3.4、按照地址打印 linux下我现在接触到的常用调试工具如下. gbdgdbguicmake-tools gdb是最为通…

冠赢互娱基于 OpenKrusieGame 实现游戏云原生架构升级

作者&#xff1a;力铭 关于冠赢互娱 冠赢互娱是一家集手游、网游、VR 游戏等研发、发行于一体的游戏公司&#xff0c;旗下官方正版授权的传奇类手游——《仙境传奇》系列深受广大玩家们的喜爱。基于多年 MMORPG 类型游戏的自研与运营经验&#xff0c;冠赢互娱正式推出了 2D M…

链表精选题集

目录 1 链表翻转 题目链接&#xff1a; 解题&#xff1a; 试错版&#xff1a; 2 找中间节点 题目链接: 题解&#xff1a; 3 找倒数第k个节点 题目链接&#xff1a; 题解&#xff1a; 4 将两个升序链表合并为一个升序链表 题目链接&#xff1a; 题解&#xff1a; …

【HarmonyOS开发】案例-记账本开发

OpenHarmony最近一段时间&#xff0c;简直火的一塌糊度&#xff0c;学习OpenHarmony相关的技术栈也有一段时间了&#xff0c;做个记账本小应用&#xff0c;将所学知识点融合记录一下。 1、记账本涉及知识点 基础组件&#xff08;Button、Select、Text、Span、Divider、Image&am…

计算机网络——计算大题(七)

前言&#xff1a; 最近也是在准备计算机考试&#xff0c;我们的考试形式是上机考试&#xff0c;所以可能有些计算题是会给提供思路的&#xff0c;前面已经对本学期的计算机网络知识有了一个简单的认识与了解&#xff0c;现在我们就来对计算大题进行一个学习吧&#xff0c;这里的…