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 測得的電壓值基本沒有變化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章