IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Arduino ESP32C3 ADC校准读取 -> 正文阅读

[嵌入式]Arduino ESP32C3 ADC校准读取

在使用 Arduino 对 ESP32C3 ADC引脚读取电压数值时发现与实际电压有较大误差,查询手册,按照说明ADC1是带有出厂校准的,经过一番搜索后在这里发现了在 Arduino 环境下的解决方法:

Arduino ESP32C3 6 Channel ADC With Calibration – Seenov?icon-default.png?t=M3C8https://seenov.com/2022/03/04/arduino-esp32c3-6-channel-adc-with-calibration/

按照官方说明,对于带有eFuse ADC校准位的板子,可以使用esp_adc_cal_raw_to_voltage()来获得校准的转换结果。这些结果代表了实际电压(单位:mV)。不需要通过公式来转换这些数据。如果在没有eFuse ADC校准位的板上使用ADC校准API,将产生警告。

#include <Arduino.h>
#include "esp_adc_cal.h"

int BAT_PIN = 3;    // select the input pin for the ADC

#define ADC_EXAMPLE_CALI_SCHEME     ESP_ADC_CAL_VAL_EFUSE_TP
#define ADC_EXAMPLE_ATTEN           ADC_ATTEN_DB_2_5

static esp_adc_cal_characteristics_t adc1_chars;
bool cali_enable;

static bool adc_calibration_init(void)
{
    esp_err_t ret;
    bool cali_enable = false;

    ret = esp_adc_cal_check_efuse(ADC_EXAMPLE_CALI_SCHEME);
    if (ret == ESP_ERR_NOT_SUPPORTED) {
         Serial.println( "Calibration scheme not supported, skip software calibration");
    } else if (ret == ESP_ERR_INVALID_VERSION) {
        Serial.println("eFuse not burnt, skip software calibration");
    } else if (ret == ESP_OK) {
        cali_enable = true;
        esp_adc_cal_characterize(ADC_UNIT_1, ADC_EXAMPLE_ATTEN, ADC_WIDTH_BIT_12, 0, &adc1_chars);
    } else {
       Serial.println("Invalid arg");
    }

    return cali_enable;
}


void setup() {
  Serial.begin(115200);
  Serial.println("start");
  cali_enable = adc_calibration_init();
}

void loop() {
  // read the value from the sensor:
  uint32_t sum = 0;
  analogSetAttenuation(ADC_2_5db);
  for (size_t i = 0; i < 50; i++)
  {
    sum += analogRead(BAT_PIN);
    delay(1);
  }
  sum /= 50;
  Serial.print("Channel Raw Data=  ");
  Serial.println(sum/50);
  if (cali_enable){
    uint32_t voltage = esp_adc_cal_raw_to_voltage(sum, &adc1_chars);
    Serial.print("Channel Votage=  ");
    Serial.println(voltage);
  }
  delay(2000);
}

代码给出了ADC的校准参数读取以及使用方法,经过校准后,多次测试,发现误差基本在10mV以内。

注意代码中使用了2.5dB的衰减,使得最大读取值为1050mV。

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:58:47  更:2022-04-18 18:00:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:30:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码