ESP32 测试(九):ESP32 ADC 精度测试

一. 测试目的

经常会有开发者询问 ESP32 ADC 精度是否符合文档里的误差 6% 的标准,本文将进行此项测试。


二. 测试环境

为了保证测试结果的一致性,采用以下测试环境:

  • esp-idf
    本文使用 release/v3.3 版本进行测试,对应 commit 为 6ccb4cf5b。可通过以下命令确认:

    git log --oneline -1
    

    结果为:

    6ccb4cf5b (HEAD, tag: v3.3) Merge branch 'bugfix/btdm_security_vulnerability_on_encryption_key_size_v3.3' into 'release/v3.3'
    
  • toolchain 版本
    gcc version 5.2.0 (crosstool-NG crosstool-ng-1.22.0-80-g6c4433a) ,可通过以下命令确认:

    xtensa-esp32-elf-gcc -v
    

    结果为(log 过长,只需要关注最后的这部分。如下):

    Thread model: posix
    gcc version 5.2.0 (crosstool-NG crosstool-ng-1.22.0-80-g6c4433a) 
    
  • 测试主机
    Linux 环境,Ubuntu 16.04 LTS,可选用其他平台。

  • 开发板
    包含 ESP32-WROOM-32D 模组ESP32_DevKitc_V4 开发板,可选用其他基于 ESP32 的开发板。
    包含 ESP32-WROVER-B 模组ESP-WROVER-KIT 开发板,可选用其他基于 ESP32 的开发板。

  • 测试示例
    esp-idf 里的 adc 示例

  • 测试工具
    多路直流稳压电源 (TPR3002-2D)、Agilent 34401A 数字万用表。


三. 测试步骤

此次测试使用了 esp-idf 里的 adc 示例

1. 接入多路直流稳压电源

测试时将多路直流稳压电源的正极接 ESP32 上的引脚 GPIO34、负极接 ESP32 上的引脚 GND,然后在此正负极上并联一个万用表(此时被当做电压表使用)来确保多路直流稳压电源的电压输出精度。

2. 代码修改

首先你需要 下载并配置 esp-idf,配置完成后,你可以输入以下指令来进入对应的项目:

cd ~/esp/esp-idf/examples/peripherals/adc

然后你需要修改并采用不同的 atten。以下是具体的操作:

  • 修改并采用不同的 atten:修改 adc1_example_main.c 里第 22 行 static const adc_atten_t atten = ADC_ATTEN_DB_0; 中 atten 的值。 不同的 atten 值代表了不同的 ADC 电压有效测量范围。在这次测试中会将 atten 的值从 0 递增到 3,从而依次观察测试结果是否满足对应的电压有效测量范围以及精度。以下是 esp-idf 支持的 atten 值:
    ADC_ATTEN_DB_0   = 0,  /*!<The input voltage of ADC will be reduced to about 1/1 */
    ADC_ATTEN_DB_2_5 = 1,  /*!<The input voltage of ADC will be reduced to about 1/1.34 */
    ADC_ATTEN_DB_6   = 2,  /*!<The input voltage of ADC will be reduced to about 1/2 */
    ADC_ATTEN_DB_11  = 3,  /*!<The input voltage of ADC will be reduced to about 1/3.6*/
    

3. 固件烧写及串口监视

在正确配置 atten 的值后,你需要进行固件烧写及串口监视,首先需要针对串口进行配置:

make menuconfig

menuconfig 界面设置 ESP32 所使用的串口,然后就可以运行如下指令进行固件烧录及串口监视:

make flash monitor

在串口监视工具中,当看到在串口监视中已经在不断的打印 ADC GPIO34 引脚测得的电压值,就可以开始此次测试了。


四. 测试结果

运行此示例,在烧录并成功观测到测量电压的 log 之后,你即可开始调整多路直流稳压电源来观测对比 GPIO34 引脚上测得的电压值。以下是对应不同 atten 与 ESP32 模组 下的 ADC 量程与精度测试结果:

1. ESP32-WROOM-32D 模组

  1. atten = 0 (电压有效测量范围为 100 mV - 950 mV)

    直流电源输出电压 GPIO34 测得的电压 百分比误差
    100 mV 105 mV 5.00%
    200 mV 205 mV 2.50%
    300 mV 304 mV 1.33%
    400 mV 405 mV 1.25%
    500 mV 505 mV 1.00%
    600 mV 605 mV 0.83%
    700 mV 710 mV 1.42%
    800 mV 815 mV 1.88%
    900 mV 917 mV 1.89%

    实际测试的电压量程为 75 mV - 1045 mV。

  2. atten = 1 (电压有效测量范围为 100 mV - 1250 mV)

    直流电源输出电压 GPIO34 测得的电压 百分比误差
    200 mV 211 mV 5.50%
    400 mV 413 mV 3.25%
    600 mV 612 mV 2.00%
    800 mV 812 mV 1.50%
    1000 mV 1014 mV 1.40%
    1200 mV 1216 mV 1.33%

    实际测试的电压量程为 78 mV - 1365 mV。

  3. atten = 2 (电压有效测量范围为 150 mV - 1750 mV)

    直流电源输出电压 GPIO34 测得的电压 百分比误差
    300 mV 317 mV 5.66%
    600 mV 616 mV 2.66%
    900 mV 917 mV 1.89%
    1200 mV 1224 mV 2.00%
    1500 mV 1527 mV 1.80%
    1800 mV 1830 mV 1.67%

    实际测试的电压量程为 107 mV - 1888 mV。

  4. atten = 3 (电压有效测量范围为 150 mV - 2450 mV)

    直流电源输出电压 GPIO34 测得的电压 百分比误差
    400 mV 426 mV 6.25%
    800 mV 824 mV 3.00%
    1200 mV 1226 mV 2.17%
    1600 mV 1637 mV 2.31%
    2000 mV 2040 mV 2.00%
    2400 mV 2450 mV 2.08%

    实际测试的电压量程为 142 mV - 3139 mV。

2. ESP32-WROVER-B 模组

  1. atten = 0 (电压有效测量范围为 100 mV - 950 mV)

    直流电源输出电压 GPIO34 测得的电压 百分比误差
    100 mV 104 mV 4.00%
    300 mV 306 mV 2.00%
    500 mV 508 mV 1.60%
    700 mV 710 mV 1.43%
    900 mV 913 mV 1.44%

    实际测试的电压量程为 75 mV - 1026 mV。

  2. atten = 1 (电压有效测量范围为 100 mV - 1250 mV)

    直流电源输出电压 GPIO34 测得的电压 百分比误差
    100 mV 106 mV 6.00%
    400 mV 409 mV 2.25%
    700 mV 710 mV 1.43%
    1000 mV 1015 mV 1.50%
    1300 mV 1322 mV 1.69%

    实际测试的电压量程为 78 mV - 1341 mV。

  3. atten = 2 (电压有效测量范围为 150 mV - 1750 mV)

    直流电源输出电压 GPIO34 测得的电压 百分比误差
    200 mV 212 mV 6.00%
    600 mV 612 mV 2.00%
    1000 mV 1015 mV 1.50%
    1400 mV 1418 mV 1.29%
    1800 mV 1826 mV 1.44%

    实际测试的电压量程为 107 mV - 1854 mV。

  4. atten = 3 (电压有效测量范围为 150 mV - 2450 mV)

    直流电源输出电压 GPIO34 测得的电压 百分比误差
    200 mV 216 mV 8.00%
    700 mV 715 mV 2.14%
    1200 mV 1226 mV 2.17%
    1700 mV 1739 mV 5.57%
    2200 mV 2232 mV 1.45%

    实际测试的电压量程为 142 mV - 3124 mV。


五. 总结

通过以上方法可以发现在采用不同的 ESP32 模组 与 atten 逐点测试的情况下,实际测试的 ADC 电压量程与 datasheet 里的电压有效测量范围都吻合。其中绝大部分数值也都满足 ESP32 datasheet 6 % 的精度要求。故 ESP32 的 ADC 功能可以放心使用。

六. 附加测试

1. 进行了当工作电压 Vcc 不足 3.3 V 时(2.7 V - 3.3 V) 是否影响 ADC 精度的测试

测试结果:将 ESP32 的工作电压 Vcc 在 2.7 V - 3.3 V 间来回调试,发现 ADC 测得的电压值基本没有变化。

发布了53 篇原创文章 · 获赞 21 · 访问量 8368

猜你喜欢

转载自blog.csdn.net/zztiger123/article/details/103970688