Monthly FB NEWS 月刊FBニュース 月刊FBニュースはアマチュア無線の電子WEBマガジン。ベテランから入門まで、楽しく役立つ情報が満載です。

My Project

第20回 【使い方いろいろ】4CH“直流”オシロスコープの製作

JP3DOI 正木潤一

近年になって測定器が手に入りやすい価格になりました。例えば、本格的な2CHのオシロスコープが5万円ほどで買えます。この『My Project』でもオシロスコープで測定した波形を載せることがあります。私は、シリアル通信の信号がマイコンから正しく出ているかを波形で確認するために、よくオシロスコープを使っています。また、回路への電源投入から立ち上がりまでの時間を測ったり、過渡的な電圧降下を調べたりするのにも使います。


<Tektronix製オシロスコープで捉えた電源ラインの電圧降下の様子>

手持ちのオシロスコープは2CHなのですが、低速通信のデータや複数のロジック電圧を同時にモニターするために、より多くの入力系統が欲しいと思っていました。波形を見る必要は無いので、単に電圧の変化を視覚的にモニターできる“オシロスコープのようなもの”があればよいと考え、「4箇所の電圧を同時に測定してグラフ化する」測定器を作ってみることにしました。

<参考:フリーソフトのオシロスコープ>
私は、オシロスコープに手が届くようになるまでフリーソフトのオシロスコープを使っていました。これは被測定信号をオーディオ信号としてパソコンに入力(ステレオなので2CH入力)し、オーディオ処理関係のプログラムを使って波形を画面上に描くというプログラムです。
なお、パソコンのオーディオ入力端子はインピーダンスが低いので、オペアンプを使ったバッファを挿入して入力インピーダンスを100kΩに上げて使っていました。


<PCオシロスコープによる2値FSKの復調波形(左)と、シリアルデータのクロックとデータ(右)。>

概要

My Projectでおなじみのマイコン『PIC12F675』に内蔵のA/Dコンバーターを使って作ったところ、直流電圧から低周波数の交流電圧まで測れる下記のような仕様になりました。本物のオシロスコープと違い基本的にAF信号は測ることができないので、“直流オシロスコープ”と呼ぶことにしました。

・0~5Vまでの電圧の測定、グラフ表示とファイル保存。
・同時に4箇所の電圧を測定可能。
・GNDとの電位差だけでなく、回路中の任意の箇所の電位差も測れる。
・アタッチメントを付けることで電流や温度、脈拍も測定可能。


<アプリケーション画面>


<タフネスノートパソコンと一緒に使うことを想定して、丈夫なアルミ製筐体に回路を収容。>

ノートパソコンと一緒に持ち出し易いように、本体と測定プローブ、USBケーブルをメモ帳ポーチに収めてみました。このポーチは移動運用の際にログブックやペンなどを入れて持ち歩いていたものです。


<適当なメモ帳ポーチに収めたところ>

回路構成

回路はとても簡単です。測定プローブからの入力信号はバッファを介して差動増幅回路に入力します。バッファは被測定箇所の電圧を降下させないように高インピーダンスで信号を入力するためのもので、利得は“1”です。差動増幅回路はOPアンプの非反転入力端子と反転入力端子との電位差を増幅する回路です。GNDに対する電位だけでなく、任意の2点間の電位差も測定することができます。


<ブロック図>


<バッファと差動増幅回路。(この回路が4系統分ある)>

差動増幅回路の出力は、同じく利得が“1”の増幅回路を介してマイコンのアナログポートに入力します。なお、この増幅回路は帰還抵抗(図中の*)の抵抗値を変えることで測定感度を上げられるようになっていますが、ここでは0Ωにして利得は“1”としています。もし、抵抗器の両端の電位差から電流を算出する用途であれば、10kΩや100kΩにして利得を10倍や100倍に設定してください。

GNDとの電位差を測る時は非反転入力端子(+)に被測定電圧を、反転入力端子(-)とコモン端子をGNDに接続します(下図左)。 任意の2点間の電位差を測ったり、抵抗器の両端に生じる電圧差から電流を求めたりする場合は、非反転入力端子(+)と反転入力端子(-)をそれぞれ測定ポイントに接続して、コモン端子をGNDに接続します(下図中央と右)。


<GNDとの電位差測定(左) 2点間の電位差測定(中央) 電流測定(右)>

電源はUSBケーブルからの5VをオペアンプとUSB-シリアル変換ICに供給しています。マイコンの電源はA/D変換の基準電圧としても使われるので、USB-シリアル変換IC内蔵のレギュレーターで安定化された3.3Vをマイコンに供給しています。また、背面から3.3Vを取り出せるようにして後述のような外部のセンサー回路に供給できるようにしています。


<背面。USBケーブル(左)と3.3V取り出し端子(右)>

オペアンプにはレール・ツー・レール型(フルスイング型とも呼ばれる)を使用して、出力電圧が0VからVCC(5V)まで振れるようにしています。今回はデュアルオペアンプ『NJM2732』を使いました。利得帯域幅は1MHzでスルーレートは0.4V/uSecです。1つの入力系統あたりバッファと差動増幅回路にオペアンプを4回路使用するので、合計で8個のデュアルオペアンプ使います。
なお、今回は誤差の大きい手持ちの炭素皮膜抵抗器を使ったため、バッファの利得を“1”と設定しても、誤差による若干の増減があります。(本来であれば誤差の少ない金属皮膜抵抗を使用します) その代わりとして、パソコンのアプリケーション側で補正値を加えることで、抵抗値とA/D変換の誤差を系統ごとに抑えています。


<8個のデュアルオペアンプ『NJM2732』>

バッファからの信号をマイコンに入力してA/D変換します。マイコンからは変換結果がシリアルデータとして出力され、USB-シリアル変換ICを介してパソコンに入力されます。

回路は、例によって銅箔テープを貼ってベタGNDにしたユニバーサル基板上に実装します。電源ラインは共通インピーダンスを持たないように、ICのVCCラインから直接引き出しています。また、ケースへのGND接続は1点アースにしています。


<実装図 (4系統分のバッファと差動増幅部)>


<USB-シリアル変換ICの上に重ねて実装したマイコン(PIC12F675)>
(実装方法はMy Project 2018年12月号を参照)

プログラム(マイコン)

My Projectではおなじみのマイコン『PIC12F675』を使います。汎用入出力ポートにはロジック電圧(High/Lowの2値)しか入力できないのに対して、アナログポートには任意の電圧を入力して数値に変換することができます。
(ダウンロード: https://drive.google.com/open?id=0B_FIFCYEaSemS1U4TGhLWXlpRmc)


<A/D変換の流れ>

マイコンは、アナログポート1→アナログポート2→アナログポート3・・・という順番でA/D変換をおこない、その都度5バイト構成のシリアルデータでパソコンに送ります。データは、2バイトのプリアンブル"255"、ポート番号、2バイトの測定データという構成です。ボーレートは約100kbpsです。


<データフォーマット>

プログラム(アプリケーション)

入力されたシリアルデータから電圧を算出し、グラフ上にラインで表示します。シリアルポートがデータを受信すると、それがどの入力系統からの電圧なのかを調べ、系統に対応した色のラインを引いて電圧を表示します。4つの入力系統の電圧はすべて同じ画面上に描写されますが、右横のスライダによって縦位置を自由に変えられます。別々の入力系統同士を比較したいときに便利です。また、上部にあるスライダで時間軸を拡大/縮小できるようになっています。
(ダウンロード: https://drive.google.com/open?id=0B_FIFCYEaSemS1U4TGhLWXlpRmc)


<電圧モニターアプリケーション>(画面は変わることがあります)

COMポート選択:
[設定]項目から、本機が接続されたCOMポート名を選択します。

画面更新頻度設定:
[設定]項目から電圧を測定する周期を変更できます。例えばソーラー電池の1日の発電電圧や温度など、長時間にわたって緩やかに変化する電圧を見たい場合は測定頻度を下げます。逆に、比較的短い周期で変化する電圧の場合は、測定頻度を上げます。

データをCSVファイルで保存:
取得した測定電圧データをCSV形式のテキストファイルで保存します。表計算ソフトに取り込んでグラフにすることができます。

電流測定モード:
電流を測りたい箇所に1Ωの抵抗を割り込ませ、両端の電位差から電流値を測定します。“V”をクリックすると測定単位が“A”(アンペア)に変わり、“I=E/R”から電流を求められます。

デューティー比測定:
周期的にピークを持つ信号のデューティー比を測ることができます。画面上でダブルクリックすると、その場所に赤い横線(閾値ライン)が現れます。この線を上回る電圧と下回る電圧の比が画面右下表示されます。ダブルクリックした位置に横線が移動するので位置を微調整できます。

心拍数測定:
フォトリフレクタ(物体に光を当てたときの反射を検出するセンサー)を使った脈拍検出回路をプローブの代わりに接続して脈拍を測ることができます。閾値ライン(赤い線)を適切に置くと、心拍に合わせてハート型のアイコンが点滅、画面更新と同時に心拍数(BPM)が表示されます。


<フォトリフレクタとオペアンプを使った脈拍センサー回路(左)とブレッドボードに組んだ様子(右)>

脈拍に合わせて赤外線LEDの反射光の強弱が変化し、それに連動した電圧がフォトインタラプタから出力されます。この電圧を、負帰還抵抗でゲインを持たせたアクティブLPFで増幅して入力します。画面上には、下のようにパルス状の波形が表示され、閾値(しきいち)を示す赤い線を横切るラインの数から12秒間の脈拍をカウントします。これを5倍することで心拍数(BPM: Beat Per Minute)が得られます。


<実際の脈拍波形(BPM=80)>(画面は変わります)

使い方

各系統の入力プローブは、電圧入力が2本とGNDが1本の3本構成です。差動増幅回路の反転入力側を最初からGNDに接続しておけば電圧入力とGNDの2本でよいのですが、任意の2点間の電位差も測れるように3本に分けました。


<4系統分の測定プローブ>


<被測定機器との接続:GNDとの電位差の測定(左)。任意の2点間の電位差の測定(右)。>

なお、場合によっては機器の破損や感電の恐れもありえるので、AC駆動の機器は、AC駆動のパソコンを使って測定するのは避けてください。


<測定接続のパターン>

いろんなパラメータを測ってみる

この機械を測定器と呼べるか分かりませんが、いろんな実験をしてみることができます。センサーで得た情報を電圧に変化すれば測定できるので、専用のプローブを作れば実験の幅も広がります。

太陽電池の発電圧:
明るさで発電圧が変わる様子が分かります。太陽電池に手をかざして動かすと、それに連動して電圧が変化します。長いスパンでデータを取り、CSVファイルで保存して表計算ソフトを使って1日の発電量をグラフにしてみましょう。

この動画では、蛍光灯に向けたときに発電圧が高くなり、横に向けたり伏せたりすると低くなる様子が分かります。

電解コンデンサの放電カーブ:
容量によって放電に掛かる時間が違う様子を調べてみましょう。また、コンデンサと直列に接続した抵抗器によって充放電時間が長くなるのを確認できます。

この動画では、22uFと1000uFで放電カーブの傾きが異なることが分かります。また、直列に入れた可変抵抗器を回したときの、抵抗値の変化に対する電圧の変化(追従)が緩やかになっている様子も写しています。

ロータリーエンコーダの出力パルス:
ロータリーエンコーダを回したときのパルスを見てみましょう。右と左、回す向きによって出力パルスのパターンが変わるのが分かります。

この動画では違いが分かりにくくなっています。前述のように測定精度が低いこととチャタリングが発生しているためです。

脈拍の観測:
フォトリフレクタ(反射型フォトマイクロセンサ)の出力が脈拍と連動するのを観測できます。血液中の酸素濃度によって赤外線の吸収率が異なることを利用して、脈拍に合わせて変化する赤外線LEDの反射光の強弱を電圧に変えて測定します。画面上のパルスのピークから心拍数が分かります。安静にしている時と走った後とで比べてみましょう。

動画では指の脈拍に応じてパルスが発生している様子がよく分かります。脈拍に合わせて右下のハートマークが点滅します。

無線機の回路制御信号:
アマチュア無線機の制御信号ラインにプローブを当てて、操作によってロジック電圧がHighやLowに切り替る様子を見てみましょう。

この動画は、今年のハムフェアの自作品コンテストで落選となった、50MHz AMトランシーバーの回路制御信号の様子です。チャンネルを変えたり、送信操作(波は出ていない)をすると、PLLへのシリアルデータ、受信回路制御信号、送信回路制御信号、ボタン押下検出電圧が切り替わります。

<参考:周波数の高い信号を高い精度で測るには?>
今回作ったのは、あくまで簡易的なA/D変換機能を使った電圧測定器のため、基本的に交流(AF)信号を測ることはできません。本来、AF帯のA/D変換は如何に高い精度で変換処理して、如何に早く画面上に表示するかがポイントになります。そのため、高い精度でA/D変換するには専用のICが必要です。今回は、PICマイコンに内蔵されたA/D変換機能を使ったため、下記のような要素により測定精度はかなり低くなっています。
・測定精度・・・マイコンによるA/D変換の精度が高くない。(基準電圧とクロック、直列処理による)
・通信速度・・・マイコンとパソコンの通信が遅く、安定していない。(約100kbps)
・描写速度・・・データを受信してからアプリケーション画面上に電圧を描写するのが遅い。

下の画面は、SGから数十Hzの正弦波を入力した様子です。波形が段状になっていることから、A/D変換の分解能が低いことが分かります。また、所々で波形が寸断されているのは、画面上のライン描画処理が追いつかず描画がスキップしているものと思われます。


<SGからAF信号を入力した様子。A/D変換が荒いためイビツなのがよく分かる。>

最後に

今回は、マイコンに内蔵のA/D変換器を使ったり、100kbpsという通信速度をマイコンの内蔵クロックを使って出したりと、測定器(のようなもの)を作るにしてはかなり乱暴なアプローチでした。 ただ、A/D変換を原理から理解する目的ならば、こうして“1から手作り”するのがもっとも確実で簡単なアプローチではないでしょうか。上記の段状になった正弦波の波形は、SDRなどのA/D変換の分解能やサンプリング周波数の説明に必ず出てくるイラストそのものです。つまり、これを滑らかな曲線にするにはどういった要素や条件が必要かを回路やソフトの製作を通して学べるのです。 さて、My Projectは今回で20回目を迎えました。開始当初からの「(比較的)気軽に取り組めるような内容」と「1から手作り」をテーマに、もうしばらく続けたいと思いますので、これからもお付き合をお願いします。

My Project バックナンバー

2019年12月号トップへ戻る

次号は 12月16日(月) に公開予定

サイトのご利用について

©2019 月刊FBニュース編集部 All Rights Reserved. 発行元: 月刊FBニュース編集部