STM32F103C8T6とTFT LCDで2CHオシロスコープDLO-138-SPI

更新日 2023.12.25 登録日 2023.12.10
*

オープンソースの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

議論のページ内を"7z"で検索すれば見つかります。タッチパネルを使うようにしたり、フロントエンドに倍率可変のオペアンプを付けたりしていて参考になりますが、トリガーは手つかずのままのようです。

ソースコード

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に戻します。

Known Bugs

  • Flash memoryを使ってEEPROMをシミュレートするライブラリの制約で256回程セーブすると再フォーマットする必要があるので保存した設定が消えてしまう。
  • STM32のADCの入力インピーダンスが低いので、信号源インピーダンスが高いと波形が乱れます。OPアンプのバッファを入れた方が良い。
  • ADCを最高2.57Mspsでフリーランさせて、ソフトウェアループで定期的に取り込んでいるので、ある意味いい加減です。ソフトウェアでリサンプリングしているとも言える。高速側はともかく、低速時はハードタイマーでADCを起動してサンプリングした方が良い。本来のDSO-138がどうやっているのかは未確認。
  • 改良可能性

  • ADCのWatchdog Interruptを使ってトリガを掛けられるはずなので、Pre-triggerに戻すことが出来るかもしれない。CH2でもトリガ出来るようになるはず。デジタル入力でもトリガ出来るかもしれない。
  • ソフトで電圧感度を変えられるようにしたい。
  • 時間軸拡大表示。
  • DSO-150向けに改良した https://github.com/michar71/Open-DSO-150 があるのでその機能を取り込みたい。
  • 機能概要

    機能 内容
    入力チャンネル数 アナログ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

    関連するオシロスコープ

  • Arduino UNO/Nano OLED版: ArduinoとOLEDで2CHオシロスコープ・Pulse generator・Function Generator・周波数カウンタ
  • Arduino UNO/Pro Mini LCD版: ArduinoとLCDタッチシールドで2CHオシロスコープ
  • ESP32 OLED版: ESP32とOLEDで2CHオシロスコープ・Pulse generator・Function Generator
  • ESP32 OLED WEB版: ESP32で2CH WEBオシロスコープ・Pulse generator・Function Generator
  • ESP32 LCD WEB版: ESP32とTFTタッチスクリーンLCDで2CH WEBオシロスコープ・Pulse generator・Function Generator
  • Raspberry Pi Pico OLED版: Raspberry Pi Pico WとOLEDで2CH WEBオシロスコープ・Pulse generator・Function Generator・周波数カウンタ
  • Raspberry Pi Pico LCD版: Raspberry Pi Pico WとTFTタッチスクリーンLCDで2CHオシロスコープ・Pulse generator・Function Generator・周波数カウンタ
  • STM32F103C8T6 OLED版: STM32F103C8T6とOLEDで2CHオシロスコープ・Pulse generator・Function Generator
  • STM32F103C8T6 LCD版: STM32F103C8T6とTFTタッチスクリーンLCDで2CHオシロスコープ・Pulse generator・Function Generator
  • STM32F103C8T6 DLO-138-SPI: STM32F103C8T6とTFT LCDで2CHオシロスコープDLO-138-SPI

  • <=Arduinoで電子工作に戻る
    <=Siliconvalley4066番地に戻る
    ゲストブックへ
    siliconvalley4066@yahoo.co.jp