zoukankan      html  css  js  c++  java
  • ESP32-使用ADC笔记

    基于ESP-IDF4.1

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include "freertos/FreeRTOS.h"
     4 #include "freertos/task.h"
     5 #include "driver/gpio.h"
     6 #include "driver/adc.h"
     7 #if CONFIG_IDF_TARGET_ESP32
     8 #include "esp_adc_cal.h"
     9 #endif
    10 
    11 #define DEFAULT_VREF    1100        //使用 adc2_vref_to_gpio() 获得更好的估计值
    12 #define NO_OF_SAMPLES   64          //多重采样
    13 
    14 
    15 static esp_adc_cal_characteristics_t *adc_chars;
    16 static const adc_channel_t channel = ADC_CHANNEL_6;     //GPIO34 if ADC1, GPIO14 if ADC2
    17 
    18 static const adc_atten_t atten = ADC_ATTEN_DB_0;
    19 static const adc_unit_t unit = ADC_UNIT_1;
    20 
    21 
    22 static void check_efuse(void)
    23 {
    24     //检查TP是否烧入eFuse
    25     if (esp_adc_cal_check_efuse(ESP_ADC_CAL_VAL_EFUSE_TP) == ESP_OK) {
    26         printf("eFuse Two Point: Supported
    ");
    27     } else {
    28         printf("eFuse Two Point: NOT supported
    ");
    29     }
    30 
    31     //检查Vref是否烧入eFuse
    32     if (esp_adc_cal_check_efuse(ESP_ADC_CAL_VAL_EFUSE_VREF) == ESP_OK) {
    33         printf("eFuse Vref: Supported
    ");
    34     } else {
    35         printf("eFuse Vref: NOT supported
    ");
    36     }
    37 }
    38 
    39 static void print_char_val_type(esp_adc_cal_value_t val_type)
    40 {
    41     if (val_type == ESP_ADC_CAL_VAL_EFUSE_TP) {
    42         printf("Characterized using Two Point Value
    ");
    43     } else if (val_type == ESP_ADC_CAL_VAL_EFUSE_VREF) {
    44         printf("Characterized using eFuse Vref
    ");
    45     } else {
    46         printf("Characterized using Default Vref
    ");
    47     }
    48 }
    49 
    50 
    51 void app_main(void)
    52 {
    53 
    54     //检查TP和Vreff是否烧录进eFuse
    55     check_efuse();
    56 
    57     //配置 ADC
    58     if (unit == ADC_UNIT_1) {
    59         adc1_config_width(ADC_WIDTH_BIT_12);
    60         adc1_config_channel_atten(channel, atten);
    61     } else {
    62         adc2_config_channel_atten((adc2_channel_t)channel, atten);
    63     }
    64 
    65     //描述 ADC
    66     adc_chars = calloc(1, sizeof(esp_adc_cal_characteristics_t));
    67     esp_adc_cal_value_t val_type = esp_adc_cal_characterize(unit, atten, ADC_WIDTH_BIT_12, DEFAULT_VREF, adc_chars);
    68     print_char_val_type(val_type);
    69 
    70     //连续采样ADC1
    71     while (1) {
    72         uint32_t adc_reading = 0;
    73         //多重采样
    74         for (int i = 0; i < NO_OF_SAMPLES; i++) {
    75             if (unit == ADC_UNIT_1) {
    76                 adc_reading += adc1_get_raw((adc1_channel_t)channel);
    77             } else {
    78                 int raw;
    79                 adc2_get_raw((adc2_channel_t)channel, ADC_WIDTH_BIT_12, &raw);
    80                 adc_reading += raw;
    81             }
    82         }
    83         adc_reading /= NO_OF_SAMPLES;
    84 
    85         //将ADC读取转换为毫伏的电压
    86         uint32_t voltage = esp_adc_cal_raw_to_voltage(adc_reading, adc_chars);
    87         printf("Raw: %d	Voltage: %dmV
    ", adc_reading, voltage);
    88 
    89         vTaskDelay(pdMS_TO_TICKS(1000));
    90     }
    91 }

    原文:https://gitee.com/EspressifSystems/esp-idf/tree/master/examples/peripherals/adc

  • 相关阅读:
    转载: ubuntu13.04下载android4.0.1源码过程
    Android横竖屏切换总结
    java.lang.reflection打印一个类的全部信息
    js实现ctrl+v上传图片
    阿里云oss,简单上传
    FastDFS搭建
    nginx配置反向代理和负载均衡
    nginx配置虚拟机
    linux下安装nginx
    linux安装jdk
  • 原文地址:https://www.cnblogs.com/kerwincui/p/13971224.html
Copyright © 2011-2022 走看看