ESP32-S3をPlatformIO Arduino版でADC‥キャリブレーションは?

カテゴリー: ESP32  タグ:

VScode PlatformIOでのESP32コーディングはArduino版で行うことが多くなってきた。そこでESP32-S3のADC設定した過去記事「PlatformIO版ESP-IDF V6に移行する – ADC」をArduino版で再コーティングしてみました

対象はESP32-S3-WROOM-1-N16R8です

ESP-IDF版ではADCのキャリブレーション用構造体をセットしAPIを実行するとゲイン誤差が数%→1%以下に収まった、というものでしたが、Arduino版ではどうか?、という顛末です

Arduino版で単発/連続変換やキャリブレーションなど細かい設定は?

※今回確認のPlatformIOは「v6.1.1.15」、Arduino版は「Arduino Core for the #ESP32 v2.0.16」です。

 

細かい変換モードは設定できないようです。そのかわり、

  • 入力アッテネータ
  • 解像度

をセットできます

基準電圧は1.1V。それ以上の電圧変換の場合は入力アッテネータを0dB 以外の

  • ADC_2_5db
  • ADC_6db
  • ADC_11db

にセットしますが、その分分解能が落ちることになります

今回は1V未満の応用なのでアッテネータは0dBです

※出典「Lang-Shipさんの記事」より

コーティング行数は6分の1に

とりあえず、VScodeのコード補間を利用してさっとコーティング。ESP-IDF版のコードは前の記事を参照されたい

Arduinoの簡潔なAPIのおかげでESP-IDFの6分の1の行数で済む

1#include <Arduino.h>
2#include "freertos/FreeRTOS.h"
3 
4#define ADCIN   8
5 
6void setup(void) {
7    pinMode(ADCIN,INPUT);
8    analogSetAttenuation(ADC_0db);  // Input Attenuator:0db(through)
9    analogReadResolution(12);       // ADC Resolution:12
10}
11 
12#define AVENUM  50
13 
14void loop() {
15    int data;
16    int total = 0;
17    while(1) {
18        while (1) {
19            total = 0;
20            for (int i = 0; i < AVENUM; i++) {
21                data = analogReadMilliVolts(ADCIN); // Read MilliVolts
22                total += data;
23                vTaskDelay(1);
24            }
25            total /= AVENUM;
26            printf("volt:%dmV\r\n",total);
27            vTaskDelay(300);
28        }
29    }
30}

キャリブレーションは?

キャリブレーションのAPIが見つからないが、そのまま同じ個体でESP-IDF版のキャリブレーションした変換データと今回のArduino版とをプログラム書き換えて比較。

明示的にキャリブレーションしなくても、内部でやっていた

グラフが重なっているので、ESP-IDF版とArduino版での違いはほとんどわからない。Arduinoモードでは自動的にキャリブレーションしているようだ

オフセットがマイナス側に10mV程度あるのもほぼ同じ。別の個体でもこの傾向は同じです

変換精度に関してはキャリブレーションしたデータを使えることが分かったのでよかった

変換時間は?

analogSetSamples()関数がコード補完では見当たらず、廃止されたのかもしれない。純粋に毎回ADCチャネルをセットしてアクイジョン待ちし、一回のサンプリングをしているようだ。

CPUフル速度で、パルスを出してオシロで観察してみた

 analogReadMilliVolts()関数:約90us

 analogRead()関数:約60us

結構かかる

お気軽にコメントをどうぞ。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)