google-site-verification: google3bd66dd162ef54c7.html
fc2ブログ

ESP32でオシロを作る作業は難航中

◆まえがき
Arduino UNO (NANO) とOLEDで作るオシロはACモードまで作ったのでほぼ完成しました。こうなるともっと性能を上げた物を作りたくなる訳で、そのためにはCPUをもっと高性能な物に入れ替える必要があります。

◆ESP32を採用
これまで作ったプログラムの移植が簡単に出来てパワーのあるものに交換、ということでCPUをESP32に変更することにしました。マンデルブロ集合ビュワーを作った時の経験では、Arduino UNO (ATmega328P)からESP32に交換することで、演算速度は52倍高速化されることが判っています。また、メモリーも大きく増えるので、やりたくても出来なかったことが実現出来るかも知れません。

・ESP32
ESP32
評価用のボード(DEVKIT V2)の状態で使います。

◆プログラムの移植
ESP32に乗り換えるためには、プログラムの書き換えが必要になります。大きくは以下のような項目です。
1. アナログ入力周りの変更
2. ディスプレイ用ライブラリの変更(Adafruit から u8g2 に変更)
3. PROGMEMの変更 (PROGMEMを止めて普通の変数に変更)
4. 入力ボタンの割り込み処理の変更

ディスプレイライブラリは将来のことを考えて、このタイミングで汎用性の高いものに変えることにしました。

◆移植作業
変更が必要な個所は多いですが、単純な修正で済むところも多いので順調に移植作業が進んでいました。

・オシロっぽい表示が出来るようになった
ESP32で作るオシロ、開発中
電源の誘導ノイズを見ているところです。

ここまでは順調だったのですが、アナログポートの挙動がなんだか変なことに気付きました。信号源のインピーダンスが高い(500kΩ程度)場合に感度がおかしくなるみたいです。他にもおかしな挙動(ex:コンデンサをパラに接続すると電位が上昇)があるのですが正確に把握出来ないでいます。

・シリアルプロッタで調査
アナログ入力の特性調査中
矩形波を入力しているのに、じわりと電圧が変化していて、どう考えてもおかしいです。

・計測器を接続して調査
アナログ入力の挙動
あれこれやって調べています。

◆まとめ
挙動のおかしいところはソフトで補正して、このままオシロとしてまとめてしまう手はあります。しかしそれでは問題点が明確にならないばかりか、対症療法で逃げていると後になってもっと苦労することになりかねません。

そんなことで、ここで一旦足を止め、ESP32のアナログ入力の挙動について詳しく調べてみようと思います。

ESP32のアナログ入力についてはネットにいろいろな情報があるのですが、明らかに不正確と思われるものがあったりします。また、入力インピーダンスまで踏み込んだ情報は見つかりませんでした。こういう時はデバイスのデーターシートを読むべきなのですが、そういう細かい特性まで書かれているドキュメントまでまだたどり着けないでいます。まあ、楽しみながらゆっくり探すことにします。
関連記事

コメントの投稿

管理者にだけ表示を許可する

ESP32のADC

ラジオペンチ様

ご無沙汰です。
残暑お見舞い申し上げます。

ESP32のADCについては私も一時気にしておりましたが、精度を気にするような計測用途には使えないだろうと割り切ってしまいました。
まず、ESP32のデータシートには、他のマイコンのデータシートには当然のように書かれている、各ペリフェラルのブロック図や数値的なスペックが全く示されていないのが問題ですよね。
ADCについては特に非直線性(とオフセット)が気になりました。こういう特性を持つものは往々にして個体差や温度依存性が大きいことがあるので、詳細に調べてみても決定的な問題解決には至らない気がして私はあっさりとギブアップしてしまいました。
ESP32は高速なだけでなく、ATmegaに比べてメモリが潤沢ですから、大きなサンプリングバッファや画面バッファを割り当てることができます。もしそういう点を生かしてオシロを作るなら外部に例えばSPIインタフェースのADCを付けるのもアリだとも思いました(ESP32のADCは「高速」というほどではないですし)。
というのがESP32のADCについての個人的な感想です。

この問題について何か進展がないか、今回改めてネットで(ググってではなくて)ECOSIAってみると、こんな記事が見つかりました。
「ESP32のADCについて」(https://qiita.com/koichaman/items/8c98ee5b6028e8d80703
すでにご存じだったかも知れませんが、最近のチップであれば個体毎にADC値の補正をしてくれるAPIがあるとのことです。
(個人的にはそれでもあまりヤル気が起こりませんが)

vabenecosi

re:ESP32のADC

いろいろ情報ありがとうございます、それにしても毎日暑いですね。

データーシートですが、私と同じ印象を持たれている人がいて安心しました。そうですよね、いろいろ納得できないところがありますよね。

ADCの速度ですが、データーシートにはサンプリングレートが2MHzのモードもあるようなことが書かれているので、期待しちゃっています。たぶんDMAでぶん回すのでしょうが、その具体的なやり方が判らないです。Arduino からでは無理なのかも知れません。

それと、キャリブレーションに関する情報ありがとうございます。全然知らなかったのでゆっくり読んでみます。

re:re:ESP32のADC

キャリブレーションしても、正確に測れるのは限定的な電圧範囲というのがちょっと悲しいですよね。

以下、この記事のテーマから少し外れた余談です。

ArduinoIDEで開発できる、安価で、オシロ自作に適したマイコンということであれば、個人的にはSTM32FC103C8Bボード(Blue Pill)を推したいです。
DMA転送を使って連続して変換とサンプリングバッファへの書き込みができ、オーバーオールの実測で最大1.7Mspsのサンプリングレートを得られています(DSO ShellもSTM32FC103C8Bチップを使っていますよ)。
ArduinoIDEでプログラムするための準備は少し面倒です。

vabenecosi

re3:ESP32のADC

STM32ですか。頭の隅にはあるのですが、難しそうなので敬遠しています。

やるならまずは、マンデルブロ集合を描いてみることから始めることになると思いますが、うーん、その提案は悪魔のささやきです。
カレンダー
11 | 2023/12 | 01
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 - - - - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。
記事の内容のご利用は読者の自己責任でお願いします。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード