500円で作れるオシロスコープ Scoppyの電圧レンジ調整 (Raspberry Pi Pico RP2040, RP2350)
概要
Raspberry Pi PicoのADC入力を利用したオシロスコープ。ラズパイとAndroidとOTGケーブルで接続後、スマホアプリで使用できます。
有料版(買い切り450円)で2ch使用できます。無料版は1chのみ。
スペック
RP2040内蔵ADCのサンプルレートは 500 kS/s ですが、オーバークロックして 2.0 MS/sで動かせるらしい。
サンプリング定理より、 1 MHzの周波数まで理論上は見れるはず。実際は1/5ぐらいの200 kHzがいいとこみたいですが。

ADC入力範囲は 0~3.3 V なので、これより広いレンジを見るには回路側で工夫する必要があります。
その後、Scoppyアプリ側から回路で決めた電圧レンジを設定することで表示上も変えられる。
逆にレンジを 0~1 V とかにしてオペアンプで3.3倍に増幅して解像度を高くすることも可能。
回路
とりあえず、 -6 V ~ +12 V ぐらいが測れれば良いかな?
CH1の電圧レンジはこれを目標にします。
電圧レンジを決める R1, R2, R3 はキルヒホッフの法則で簡単に求まりますが、都合よくその抵抗値の抵抗があるとも限らないので、持ってる抵抗の一覧と、この希望レンジを渡して最適な抵抗の組み合わせをChatGPTに捜索させました。

この組み合わせの時、-6.6 V ~ +13 V までのレンジになるようです。
各抵抗の組み合わせに対する電圧レンジは次のように計算できます。
最小レンジ
= - A2 * 3.3 / C2
最大レンジ
= 3.3 * (1 + A2 * (1/B2 + 1/C2)) - A2 * 3.3 / C2
ダイオードは電圧レンジ範囲外の入力からオペアンプを保護します。その後、バッファしてからADC入力へ。
CH2は単に 0~3.3 V だけのシンプルな範囲にしました。

抵抗比は決まりましたが、スケールはどうしましょう?妥当そうなのは、(R1, R2, R3) = (2k, 680, 1k) or (20k, 6.8k, 10k) or (200k, 68k, 100k) あたり。
大きすぎてもノイズの原因になるし、小さすぎると測定対象から電流を引き抜きすぎるので、今回は (20k, 6.8k, 10k) を選定。
また、ADC入力直前ののR=100 Ω, C=4.7 nF はローパスフィルタ。ADCの測定可能周波数の上限以上の高周波が入力されるとノイズになるので、ここで減衰させます。

本当は3.9 nFのほうが良さそうだけど、4.7 uFしか手持ちがなかった。(ジャンク電源基板から引っこ抜いたやつ)
このときのカットオフ周波数は339 kHz。
オペアンプはMCP6002を選定した。GBWは1 MHzで、バッファとして使うだけなのでおそらく十分。
はんだ付け
あんまりKiCadの本来の使い方じゃない気がするけど、ユニバーサル基板の配線を事前に決めておくと便利



Scoppyアプリ
補正
左下のCH1をクリックしてレンジの設定を開く (画像は補正後)

抵抗比の計算で求まった min: -6.6, max: 13 を入力。
その後、CH1をGNDと+3.3 Vに繋いでみる。
GNDに繋ぐと +0.13 V
+3.3 Vレール(テスター実測3.297 V) に繋ぐと+3.46 V
と表示された。これを補正すると…

最後の補正式のVmeasに元の電圧レンジを代入すれば真値が求まるので、それを新しい電圧レンジとして設定します。
矩形波を測る
初期設定でGPIO22から矩形波を出力できる。これをCH1に入力して観測します。

1 kHz

2 usぐらい?立ち上がり時間がある

5 kHz

10 kHz

50 kHz
怪しくなってきた。

100 kHz

200 kHz
ほぼ正弦波。

フーリエ変換すると、矩形波は基本波、3倍、5倍、7倍…の高調波で表現されます。
RCローパスフィルタのカットオフ周波数が339 kHzだから、200 kHzの正弦波しか見えなくなるのは必然ですね。
R=47 Ω, C= 4.7 uF のほうが良いかもしれません。(カットオフ周波数 720 kHz)
というか、MCP6002でも高周波は減衰されるから(GBW=1 MHzなので)、わざわざRCローパスフィルタを入れなくても良かったかもしれない。







最近のコメント