オープンソースのDSO-138を改良したDLO-138をSTM32F103C8T6ボードとSPI TFT LCDで使えるようにしたものです。 中華製DSO-138は安価なオシロスコープとしてDIYでは有名です。ひと頃は2,000円くらいで買えましたが、最近は円安の影響か3,000円くらいになっています。 そのファームウェアを改良してアナログ2ch、デジタル2chにしたDLO-138というものがあります。
https://github.com/ardyesp/DLO-138
DLO-138はDSO-138のハードウェアで動作するようになっていますが、それを安価なSTM32F103C8T6ボードで使えるようにしてみました。
Blue Pillとも呼ばれるSTM32F103C8T6ボードは今でもAmazonで5個1500円くらいで買えるので気軽に使えます。
ハードウェア構成を簡単にするために、フロントエンドは抵抗分圧のみで、トリガー検出用のコンパレータを省略したので、Pre-trigger出来なくなっています。
開発環境は
Arduino IDE 1.8.19 + STM32F1xx/GD32F1xx boards by stm32duino version 2022.9.26です。
Arduino IDEの環境設定で追加のボードマネージャのURLに
http://dan.drown.org/stm32duino/package_STM32duino_index.json
を追加すると、ボードマネージャで"stm"を検索すれば出てきます。
高速描画のAdafruit_GFX_AS.hを使うためにSTM32用ライブラリのAdafruit_GFX_AS.cppの62行目辺りに
#define textsize textsize_x
を追記する必要がありました。これはArduino_STM32との比較で分かりました。Arduino_STM32の方はSPI.hでもコンパイルエラーが出ました。
2017年頃に同じ様なことをしている人がいて、ペンネームmausi_mickでソースコードが公開されています。
STM32 O Scope DLO138 SPI 01 : https://www.youtube.com/watch?v=P3nr-wi-jnA
DLO-138 OScope - Spark Logic : https://sparklogic.ru/projects/dlo-138-oscope.html
GitHubに置いてあります
https://github.com/siliconvalley4066/DLO-138-SPI
TFT LCDのライブラリはAdafruit_ILI9341を使用します。Arduino IDEのライブラリマネージャーから検索してインストールしてください。
10:1プローブを使うために入力インピーダンスを1Mohmに近付けたいのですが、STM32のADCの入力インピーダンスが10kohm程度と低いので、信号源インピーダンスが高いと波形が乱れます。とりあえず抵抗分圧だけで済ませているので、入力インピーダンスは20kohm程度です。MCP6022のようなrail-to railのオペアンプによるボルテージフォロワを付ければノイズが減ると思います。
SELボタン (ロータリーエンコーダーの場合は押し込み) の短押しで設定項目を次に移動。 +/-ボタン (ロータリーエンコーダーの場合は回転) で選択中の設定項目を変更。 OKボタンの短押しでHOLDしてシリアルポートから波形データを出力。 波形選択では+ボタンでA2 D1 D3の8通り全ての組み合わせを順次切り替え出来ます。A1は常に有効。 OKボタンの長押し(2秒以上) : 設定項目 動作 Trigger Level Trigger levelをアナログチャンネル1のADC中点に移動 波形Xスクロールバー 波形の先頭に移動 (trigger point) 波形Yカーソル ADCの中点(2048)に移動 その他 アナログCH1の計測値表示のOn/Off OKボタンを押しながら電源投入すると設定項目をdefaultに戻します。
機能 | 内容 |
---|---|
入力チャンネル数 | アナログ2、デジタル2 |
入力結合 | DC |
入力電圧範囲 | 0 to 3.3V |
入力インピーダンス | 不明。20kohm程度 |
電圧レンジ(volts/div) | 0.5V |
時間レンジ(time/div) | 20ms, 10ms, 5ms, 2ms, 1ms, 500us, 200us, 100us, 50us, 30us, 20us, 12us (2.2Msps) |
トリガモード | Auto, Normal |
トリガ極性 | rise/fall edge |
トリガソース | CH1 |
トリガレベル調整 | 画面内位置を上下に調整 |
外部トリガ | No |
波形位置調整 | 上下に調整可能 |
波形反転表示 | Yes |
電圧測定表示 | Max, Average, Min (AC入力でもDCレベルを表示) |
周波数&Duty測定 | Yes |
電圧・周波数・Duty表示 | 表示・非表示切り替え |
文字表示 | 文字サイズ大小選択可能 |
FFT | Yes |
A/D変換分解能 | 12bits |
サンプル数 | 2048samples/channel 表示300samples/channel 12bit/sampleを電圧レンジに応じて0から200にスケーリングして表示 |
表示解像度 | LCD: 300x200 dots, 水平25dots/div 垂直25dots/div |
等価時間サンプリング | No |
設定状態EEPROM保存 | Yes |
操作方法 | タッチパネル及び5方向スイッチ (Left, Right, Down, Up) |
プリトリガー | No |
ホールドオフ機能 | No |
時間軸拡大表示 | No |
X-Y表示 | No |
Pulse Generator | 1kHz 約3.3Vpp方形波 |
Function Generator | No |
周波数カウンタ | No |
PCへのデータ転送 | Yes |
SDカードへの波形保存 | No |