STM32の1つのオシロスコープの歴史





1年ちょっと前に、オシロスコープを作るのがいいと思いました。 それから私はそれが独自のTFTディスプレイを備えた独立したデバイスになりたかったのですが、実際、TFTディスプレイを扱うというアイデアは非常に有望であるように思えました。 しばらくして、 ALIでSSD1289ドライバーを搭載した3.2インチTFTが注文されました。



当時、私はすでにAVRマイクロコントローラーのプログラミング経験があったので、お気に入りのAtmega16でディスプレイを起動することにしました。 オシロスコープを作成することになるかどうかは知りませんでしたが、プロジェクトでTFTを使用することは確かだったので、サードパーティのライブラリを探しませんでしたが、現在も使用している独自のライブラリを作成することにしました。



ディスプレイを初期化することが可能になった後、Atmega16はオシロスコープを作成できないことが明らかになりました。 このサイズのディスプレイでは非常に遅いです。 そして、内部の何かが私にSTM32に切り替える時であると言ったが、それはまた私を止めた。 一般に、思考プロセスは短命であり、STM32F103VET6を搭載したボードはアリで注文されました。 しかし、上記の理由の他に、 STM32に切り替えるもう1つの理由がありました。これは、信号をデジタル化するために使用できる、1Mspsの内蔵12ビットADCです。



驚いたことに、STM32で数週間働いた後、それらに複雑なものは何もないことが明らかになり、なぜ以前に切り替えなかったのか理解できなくなりました。 AVR用に記述されたコードをSTM32に転送することは難しくありませんでしたが、ディスプレイを最大速度で動作させる必要があり、そのためにFSMCに対処しなければならなかったという考えは落ち着きませんでした 。 実際、ここではすべてがシンプルであることが判明しました。ある週末を要しました。 これで、ディスプレイの準備作業が完了し、オシロスコープの実装に直接進むことができました。



主なタスクは、ディスプレイに信号を表示する方法を学習することでした。このため、必要な数のADCサンプルを蓄積し、画面に表示し、画面を黒で塗りつぶします。 ところで、それでも、DMAを使用してデータをバッファに保存しました。



最初の一歩が踏み出され、私は仕事の喜びと誇りに満たされました。 さらに、正弦波を実行しないようにしたかったのですが、そのためには、トリガーによってADCの変換を開始する方法を学ぶ必要がありました。

これは、次の図に示すように、従来のコンパレータを使用して実行できます。









オペアンプのコンパレータ。



基準電圧は、PWMとRC回路を使用して生成される反転入力に印加されます。 また、ADC入力に供給されるのと同じ直接信号が直接入力に送信されます。



直接入力の電圧が反転入力の電圧よりも高くまたは低くなると、オペアンプ出力の極性が変化します。 この変更により、外部割り込み用に構成されたMCピンがキャプチャされます。 アクティブなフロントを変更することにより、外部割り込みのために、立ち上がりエッジと立ち下がりエッジの両方でキャプチャを実行できます。



さらに、割り込みでは、DMAがオンになり、バッファーがいっぱいになるまで動作します。 はい、私の実装で常に動作するのはDMA、ADCです。 スルーレートを上げるにはフィードバック抵抗が必要であり、オペアンプ自体がこの問題に対応するため、より高速に選択することを推奨します。



しばらくして、DSO 138のレビューが私の目を引きました。同じレビューから、そのスキームがインターネットで利用可能であることがわかり、そこから作品を借りることにしました。









DSO 138スキーマの詳細。



この回路は何をしますか?

ADCが動作できる電圧範囲は、基準電圧のレベル( + VREFおよび-VREF )を決定するため、マイクロコントローラーの電力範囲を超えてはなりません。 範囲の下限は0ボルト、上限は3.3ボルトに制限されています。 このことから、 ADCが負電圧を測定できないことが明らかになり、これが必要です。



ADCが負の電圧を感じるためには、信号がない場合、基準電圧の半分が1.6ボルトであることが必要です。 この場合、負電圧、たとえばマイナス0.3ボルトを測定すると、ADCの入力電圧は0.3ボルト減少し、1.6-0.3 = 1.3ボルトに等しくなります。 この電圧ADCは簡単にデジタル化できます。 この例は、回路のゲインを考慮していないため(この場合は1で取りました)、おおよそのものですが、明らかです。



また、オペアンプの電源がバイポーラであるという事実に注意を喚起したかったのです。これは、オペアンプが負電圧で動作できるようにするために必要です。 オペアンプの電源がユニポーラ(1つの出力に0が供給され、5 Vが2番目に供給される)で、負の電圧が入力に印加されると、オペアンプは単にそれを感じず、このように何もできません。



バイポーラ電源を実装するために、電話からの2つの充電を使用して、一方のプラスと他方のマイナスを接続し、この接続の電位を基準点、つまり接地として使用しました。



回路はブレッドボード上に組み立てられ、オシロスコープはトリガーによってキャプチャし、負の電圧を測定できるようになりました。ハードウェアの観点から次に何をすべきかわからなかったため、ソフトウェアに切り替えました。



その時点で、バッファーは循環型である必要があり、サイズはDSO 138から借用されていること、つまり4096ポイントであることを明確に理解していました。



なぜそんなに多くのポイントですか?

間引きを使用するこのような多数のポイントにより、ハードウェアでは実装できないスキャンを実装できます。 STM32の場合、変換期間は12.5サイクルです。サンプリング期間を見つけるために、SMPxビットフィールド[2:0]によって決定される値を変換期間に追加します。 現時点では、DSO 138はバッファサイズを1024ポイントに減らしましたが、残りは4096ポイントです。



それでは、リングバッファは何のためにあるのでしょうか?

高速スキャンでプリサンプルとポストサンプルの数の比率を変更するには、環状バッファーが必要です。 プリフェッチ-トリガーがトリガーされる前のサンプル、ポストサンプル-トリガーが起動した後のサンプル。 波形を描画した後の動作アルゴリズムは次のとおりです。



  1. 必要な数の事前サンプルを蓄積します。
  2. 外部割り込みを有効にします。
  3. MKは、外部割り込み信号が到着するまで、ある種のサードパーティタスクの実行を開始します。


この信号に基づいて、バッファにポストサンプルが追加され、波形全体が表示されます。

ユーザーは、バッファをバイパスしてキャプチャポイントが画面に描画された直後の高速スイープでのみ、プリサンプルの数を設定できます。 実際、もちろん、バッファーがあります。これは、描画のたびにワークスペースをペイントするのは不合理であることが時々明らかになっているため、同じ波形を黒だけで描画してマーキングを復元するだけで、1つの波形を描画して消える時間を短縮することができます。ちらつきのように。



結果はビデオで見ることができます。







当時のオシロスコープのプロトタイプは何でしたか?(そして、何ができましたか?)

掃引時間の変更、トリガーの種類の選択、アクティブエッジの選択、プリサンプルとポストサンプルの数の変更、トリガーレベルの変更、ベースレベルの変更が可能です。

トリガーのタイプに関しては、自動モードでは、外部割り込みを引き起こす100ミリ秒以内に信号が発生しない場合、タイマー割り込みが発生し、バッファーが満たされることを除いて、すべてが通常モードと同じように発生します。



残りの機能を実装するために、私は再び鉄に戻らなければなりませんでした。 そして、多くの人が疑問を持っていると思います、なぜDSO138から回路全体をzayuzatしませんか?

すべてがシンプルで、アッテネーターの位置をスイッチではなく電子機器で切り替えたいと思っていました。そして最も重要なことは、開いた入力を閉じた入力に変更したり、その逆にリレーをクリックした場合)

一般的に、自分の要件を満たすアナログ部品を見つけるという課題に直面しました。 実際、これは簡単な作業ではありません。

ある時点で、私はオシロスコープを持っていることを思い出し、その開発者は約1年前にSkypeでの使用に関する質問に答えてくれました。一般的に、私はそれに書き込むことにしました。

彼がオシロスコープを作る計画について彼に話した後、彼は私にアナログ部分のためのいくつかのオプションを提供し、私に最も理解しやすいスキームを選択し、彼に私が持っている質問を尋ね、それを実装することを設定しました 数か月後、オシロスコープの準備が整いました。



その結果、次の特性を持つオシロスコープを作成することが判明しました。

供給電圧:9 V

消費電力:110 mA

サンプリングレート:1 MSa / s

アナログ帯域幅:0-200 KHz

垂直解像度:12ビット

最大入力電圧:50 V

垂直感度:10 mV / div-10 V / div

水平スキャン時間:10μs/ divから200 ms / div

入力インピーダンス:1MΩ/ 20pF

入力モード:DC、AC、グランド

トリガーモード-スイープ:自動、通常、単一











結果はビデオで見ることができます。






All Articles