DSO Shell 用に作った光インターフェイス回路の解説
前回の記事ではDSO Shell (DSO 150)を改造して、光で波形データーを出力する方法について紹介しました。今回はその続きで、もう少し詳しい回路の説明などを波形写真を交えて解説したいと思います。
やりたいことをおさらいしておくと、DSO Shell から出る電気信号(シリアルデーター)を光に変換し、その後で再度電気信号に戻すのが目標です。こういうことをやりたい場合、最初に考えるのは次のような回路だと思います。
▼基本的な光インターフェイス回路

信号は負論理なのでPNPトランジスタで受けてLEDをドライブし、その光をフォトトランジスタで受けて電気信号に戻す回路です。まずは、これでうまくいくか確かめてみます。
▼テスト用の回路を組む

LEDとフォトトラは、セロテープで丸めてくっつけて、簡易的な芯合わせ状態にしています。いきなりDSO Shell の信号を使うのは実験がやり難いので、パルスジェネレーターから信号を入れて動かしてみます。VR1で波形が電源とGNDの間で均等に振り分けられるように調整します。
▼出力波形

上が入力、下が出力の波形です。一見うまくいっているように見えますが問題はそのスピードです。横軸は50μs/DIVなので、パルス幅は100μsあり、10kbpsの速度しか出ていません。
DSO Shell のデーター出力レートは115.2kbps なので、あと10倍高速にしないといけません。つまりこの回路は使えません。
こういう場合の対策をネットで調べてみると、前の記事に書いたように、JO-MIDI-FMさんの書かれた、汎用 4 ピンフォトカプラを使った MIDI 入力という記事の方法が使えそうです。いろいろ試した結果、少しアレンジを加えて以下の回路で行くことにしました。
▼回路図(前の記事と同じ回路図です)

回路図内のLEDとフォトトランジスタは秋月で購入可能な物です。以下、ポイントを説明していきます。
・C1はスピードアップコンデンサで、Q1をすばやくOFFにするために入れています。C1を入れないと、LEDがONの時間が1.5μsくらい長くなってしまい、デューティ比が悪化します。
・R2でLEDの明るさが決まりますが、この値が小さすぎると、フォトトランジスタ (PT1) が飽和してスピードが遅くなります。ちなみに、最初はR2を220Ωにしていたのですが、これでは光が強すぎでした。
・Q2で電流を検出し、同じ電流をQ3にミラーすることで出力電圧を出す回路になっています。
参考にさせて頂いたサイトでは、フォトトランジスタのコレクタと電源の+5Vの間にLEDを入れて、フォトトランジスタの発熱抑制と光入力の表示機能を兼ねさせていました。表示があると便利なのですが、LEDを入れるとパルスの応答特性が悪化したので外しました。原因としては、LEDのVfは電流によってかなり変わるので、ミラー効果の抑制効果が低下した。あと、LEDはバイアス履歴によっては変な挙動を示すことがあるので、そのあたりの悪影響があったのではないかと想像しています。それと、参考にさせて頂いたサイトは 31.25kbps の MIDI のデーターが対象なので、もう少しマージンがあったのかも知れません。
・VR1は出力波形(Q3のコレクタ波形)を見ながら調整します。VR1の値を小さくすると波形は上に引っ張られ、VR1の値を大きくすると波形は下に引っ張られます。ということで、ほど良い波形になるように調整が必要です。
以下、波形の調整の様子を見て行きますが、説明の都合で先に調整完了後の波形から始めます。
▼入出力波形

上が入力(CN1のピン4)、下が出力(CN2のピン4)です。なお、トリガは入力のプラスエッジで掛けています(流れているデーターの影響で、マイナスよりプラスエッジの方が見易かったためです)
入力に対して出力が1μsくらい遅れているようですが、全体がシフトしているだけなので、シリアルデーターの受信には全く影響無いと思います。
▼測定の様子

▼アイパターン (トリガディレイを掛けた画面です)

USBシリアルアダプタの入力は3.3V(5Vトレラント)なので、その中間の1.7V付近でクロスするようにVR1を調整しました。まあ波形の平坦部のレベルがしっかりと出ているので、ここまで追い込まなくても大丈夫だと思います。
さて、話をVR1の調整に戻します。
ここまでの説明では、別のオシロを使って波形を見ました(テクトロの400MHzアナログオシロ、2465Bです)。こういう波形をDSO Shell 自身で見ることが出来ればいいのですが、シリアルに波形データーを吐き出している最中なので、CPUは忙しくてそんな暇は無いだろうと思っていました。
ところが、驚いたことにトリガモードをNORM(ノーマル)にしておくと、シリアルに波形データーを約3秒かけて送信した後で、シリアルポートに流れたデーターの波形が液晶に表示されました。もちろんプローブは測定したい場所(CN2 の4ピン)に繋いでおきます。つまり、ちゃんとトリガがかかるように設定しておけば、シリアルにデーターを送っている最中でも、波形はメモリーに記録されているようです。ちなみに、遅い速度で記録すると波形は約3秒間記録されていたので、先頭からメモリーの許す範囲で記録されるようです。
実際の波形で説明します。以下の写真は出力ピン(CN2の4ピン)の波形で、左がアナログオシロ、右がDSO Shell の画面です。なお、アナログオシロの波形はカメラのシャッター速度1秒で撮影しています。つまり1秒間重ね合わせた波形です。
▼VR1の値が小さい場合

上側に引っ張られすぎています。Lowレベルが2V以上あるので、これではシリアルの信号として認識されません。
▼VR1の値が高い場合

上向きに引っ張る能力が不足しているため、振幅が5Vまで達していません。またデューティー比も50%になっていません。これでは文字化けやフレーミングエラーが多発して、正しい通信は出来ません。
▼VR1適正

正常なシリアルインターフェイスの波形です。右側のDSO Shellの波形でもデューティー比がほぼ50%付近であることが確認出来ます。
VR1の調整は、シリアルモニタで受信しながら、エラー無しで受信出来る範囲の中心に合わせるだけでもたぶん大丈夫だと思います。でも、このように波形を見ればより正確な調整が出来るはずです。
◆まとめ
・比較的高速なシリアルデーターを光で取り出すための回路の話でした。秋月で普通に手に入る部品でも、使い方を工夫すれば115200bps の速度を出すことが出来ました。
ここで使った、スピードアップコンデンサ、ミラー効果抑制のためのカレントミラー回路、トランジスタの飽和対策などは、古典的と言って差し支えないほど昔からある方法です。こういうテクニックはICの中に埋まっていて、普段は使うことが無いかも知れませんが、覚えておけば何かの時に役立つと思います。
・この回路の動作確認に私は別のオシロを使いました。でもDSO Shell は自分が出しているシリアルデーターの波形を自分の画面に表示出来ることが判りました。こうなると、別のオシロを準備する必要が無くなった訳で、この回路を実際に作って調整するためのハードルが大幅に下がったと思います。
ただ観察対象の波形はボタンを押した瞬間しか現れないので一発勝負です。つまり、波形を確実にトリガで引っ掛けるように設定することが必要で、信号のレベルとイベントの極性がどうなっているか正しく予想してオシロに設定しないといけません。これって結構難しいですが、このオシロの使い方をマスターするのに格好の素材だと思います。
やりたいことをおさらいしておくと、DSO Shell から出る電気信号(シリアルデーター)を光に変換し、その後で再度電気信号に戻すのが目標です。こういうことをやりたい場合、最初に考えるのは次のような回路だと思います。
▼基本的な光インターフェイス回路

信号は負論理なのでPNPトランジスタで受けてLEDをドライブし、その光をフォトトランジスタで受けて電気信号に戻す回路です。まずは、これでうまくいくか確かめてみます。
▼テスト用の回路を組む

LEDとフォトトラは、セロテープで丸めてくっつけて、簡易的な芯合わせ状態にしています。いきなりDSO Shell の信号を使うのは実験がやり難いので、パルスジェネレーターから信号を入れて動かしてみます。VR1で波形が電源とGNDの間で均等に振り分けられるように調整します。
▼出力波形

上が入力、下が出力の波形です。一見うまくいっているように見えますが問題はそのスピードです。横軸は50μs/DIVなので、パルス幅は100μsあり、10kbpsの速度しか出ていません。
DSO Shell のデーター出力レートは115.2kbps なので、あと10倍高速にしないといけません。つまりこの回路は使えません。
こういう場合の対策をネットで調べてみると、前の記事に書いたように、JO-MIDI-FMさんの書かれた、汎用 4 ピンフォトカプラを使った MIDI 入力という記事の方法が使えそうです。いろいろ試した結果、少しアレンジを加えて以下の回路で行くことにしました。
▼回路図(前の記事と同じ回路図です)

回路図内のLEDとフォトトランジスタは秋月で購入可能な物です。以下、ポイントを説明していきます。
・C1はスピードアップコンデンサで、Q1をすばやくOFFにするために入れています。C1を入れないと、LEDがONの時間が1.5μsくらい長くなってしまい、デューティ比が悪化します。
・R2でLEDの明るさが決まりますが、この値が小さすぎると、フォトトランジスタ (PT1) が飽和してスピードが遅くなります。ちなみに、最初はR2を220Ωにしていたのですが、これでは光が強すぎでした。
・Q2で電流を検出し、同じ電流をQ3にミラーすることで出力電圧を出す回路になっています。
参考にさせて頂いたサイトでは、フォトトランジスタのコレクタと電源の+5Vの間にLEDを入れて、フォトトランジスタの発熱抑制と光入力の表示機能を兼ねさせていました。表示があると便利なのですが、LEDを入れるとパルスの応答特性が悪化したので外しました。原因としては、LEDのVfは電流によってかなり変わるので、ミラー効果の抑制効果が低下した。あと、LEDはバイアス履歴によっては変な挙動を示すことがあるので、そのあたりの悪影響があったのではないかと想像しています。それと、参考にさせて頂いたサイトは 31.25kbps の MIDI のデーターが対象なので、もう少しマージンがあったのかも知れません。
・VR1は出力波形(Q3のコレクタ波形)を見ながら調整します。VR1の値を小さくすると波形は上に引っ張られ、VR1の値を大きくすると波形は下に引っ張られます。ということで、ほど良い波形になるように調整が必要です。
以下、波形の調整の様子を見て行きますが、説明の都合で先に調整完了後の波形から始めます。
▼入出力波形

上が入力(CN1のピン4)、下が出力(CN2のピン4)です。なお、トリガは入力のプラスエッジで掛けています(流れているデーターの影響で、マイナスよりプラスエッジの方が見易かったためです)
入力に対して出力が1μsくらい遅れているようですが、全体がシフトしているだけなので、シリアルデーターの受信には全く影響無いと思います。
▼測定の様子

▼アイパターン (トリガディレイを掛けた画面です)

USBシリアルアダプタの入力は3.3V(5Vトレラント)なので、その中間の1.7V付近でクロスするようにVR1を調整しました。まあ波形の平坦部のレベルがしっかりと出ているので、ここまで追い込まなくても大丈夫だと思います。
さて、話をVR1の調整に戻します。
ここまでの説明では、別のオシロを使って波形を見ました(テクトロの400MHzアナログオシロ、2465Bです)。こういう波形をDSO Shell 自身で見ることが出来ればいいのですが、シリアルに波形データーを吐き出している最中なので、CPUは忙しくてそんな暇は無いだろうと思っていました。
ところが、驚いたことにトリガモードをNORM(ノーマル)にしておくと、シリアルに波形データーを約3秒かけて送信した後で、シリアルポートに流れたデーターの波形が液晶に表示されました。もちろんプローブは測定したい場所(CN2 の4ピン)に繋いでおきます。つまり、ちゃんとトリガがかかるように設定しておけば、シリアルにデーターを送っている最中でも、波形はメモリーに記録されているようです。ちなみに、遅い速度で記録すると波形は約3秒間記録されていたので、先頭からメモリーの許す範囲で記録されるようです。
実際の波形で説明します。以下の写真は出力ピン(CN2の4ピン)の波形で、左がアナログオシロ、右がDSO Shell の画面です。なお、アナログオシロの波形はカメラのシャッター速度1秒で撮影しています。つまり1秒間重ね合わせた波形です。
▼VR1の値が小さい場合


上側に引っ張られすぎています。Lowレベルが2V以上あるので、これではシリアルの信号として認識されません。
▼VR1の値が高い場合


上向きに引っ張る能力が不足しているため、振幅が5Vまで達していません。またデューティー比も50%になっていません。これでは文字化けやフレーミングエラーが多発して、正しい通信は出来ません。
▼VR1適正


正常なシリアルインターフェイスの波形です。右側のDSO Shellの波形でもデューティー比がほぼ50%付近であることが確認出来ます。
VR1の調整は、シリアルモニタで受信しながら、エラー無しで受信出来る範囲の中心に合わせるだけでもたぶん大丈夫だと思います。でも、このように波形を見ればより正確な調整が出来るはずです。
◆まとめ
・比較的高速なシリアルデーターを光で取り出すための回路の話でした。秋月で普通に手に入る部品でも、使い方を工夫すれば115200bps の速度を出すことが出来ました。
ここで使った、スピードアップコンデンサ、ミラー効果抑制のためのカレントミラー回路、トランジスタの飽和対策などは、古典的と言って差し支えないほど昔からある方法です。こういうテクニックはICの中に埋まっていて、普段は使うことが無いかも知れませんが、覚えておけば何かの時に役立つと思います。
・この回路の動作確認に私は別のオシロを使いました。でもDSO Shell は自分が出しているシリアルデーターの波形を自分の画面に表示出来ることが判りました。こうなると、別のオシロを準備する必要が無くなった訳で、この回路を実際に作って調整するためのハードルが大幅に下がったと思います。
ただ観察対象の波形はボタンを押した瞬間しか現れないので一発勝負です。つまり、波形を確実にトリガで引っ掛けるように設定することが必要で、信号のレベルとイベントの極性がどうなっているか正しく予想してオシロに設定しないといけません。これって結構難しいですが、このオシロの使い方をマスターするのに格好の素材だと思います。