汎用 4 ピンフォトカプラを使った MIDI 入力
(通常の) MIDI 入力用のフォトカプラとしては、PC900V や TLP552 などの ディジタル出力タイプを使用するのが簡単であり、確実です。
しかし、ここでは、トランジスタ出力タイプの汎用フォトカプラを使用する実験を行って 良好な結果が得られたので報告します。
一般的な使用法
左の図の (a) はディジタル出力タイプの使用法です。 回路シンボルではフォトトランジスタしか書いてありませんが、実際には内部に波形整形回路が 組み込まれており、出力(4 番ピン)はオープンコレクタのロジック出力になっています。「負荷抵抗」に見える抵抗は、実際はオープンコレクタ出力のプルアップ抵抗です。 当然、プルアップ抵抗値が大きくなれば、立ち上がり時間が増大しますが、伝達遅延時間は 内部回路によって決まるので、プルアップ抵抗値には依存しません。
立ち上がり時間は、もともと十分に早く、PC900V の場合では、 RL = 10 kΩ でも tr は 0.5 us 以下です。
図の (b) は一般的なフォトトランジスタ出力のフォトカプラを使って、 ディジタル値を扱う方法です。 ディジタル値を扱うといっても、この回路自体はアナログ回路なので、 フォトカプラの特性により、 負荷抵抗 RL の最適な値は変わります。
ディジタル値として最大のノイズマージンを得るためには、フォトカプラの入力 LED に電流が流れた 時にフォトトランジスタが飽和して、出力が、ほとんど GND レベルまで下がることが必要です。
一方、伝達遅延や立ち上がり時間は、負荷抵抗が小さい程早くなりますが、 そうすると出力の「0」レベルが GND から浮いてくることになります。
このように、この方式では、応答時間と、「0」出力時の電圧レベルとの 間に相反するジレンマを持つことになります。
ここで、ひとつ注意していただきたいのは、出力波形の立ち上がり、立ち下りが遅いのは、 ビットタイムである 32 us を超えない限りは、本質的な問題とはなりません。
トランジェントが遅くて、ディジタル入力が誤動作するのなら、シュミット・トリガをはさめば 良いという話になります。
問題は、0 → 1、 1 → 0 のそれぞれの変化の伝達遅延およびトランジェントがアンバランスだと、 「0」 パルス幅と 「1」 パルス幅が本来の値からずれてしまうことです。
ずれがビットタイムの 50 % を超えると、UART のビット位置ずれのマージンを全部喰ってしまい、 フレーミング・エラーの原因になります。
応答の高速化
さて、トランジスタ出力型の汎用フォトカプラを、回路図 (b) の形式で使うと、 かなり遅いという印象を持たれると思います。ところが、フォトカプラを小信号のリニア領域で動作させた場合の周波数特性は、 たとえば、PC817 では、負荷抵抗 100 Ω の条件で、振幅が -3dB となる 周波数は 80 kHz で、それほど悪くはありません。
もちろん、数 MHz の信号が通るわけではありませんが、ビットレート 31.25 kpbs、つまり、 パルス周波数としては 15.625 kHz の信号に対しては十分余裕があります。
オシロスコープの立ち上がり時間 tr と -3dB 帯域幅 BW との間の有名な関係式
tr = 0.35 / BWに -3dB 帯域幅の値 80 kHz を代入すると、tr は約 4 us となり、 決して悪くありません。
それなのに、実際の応答が遅いのは、フォトトランジスタを飽和させ、 大振幅の電圧を取り出しているからです。
フォトトランジスタからはベース端子が引き出されていません。 そのため、飽和状態でベースに蓄積された電荷は、飽和からカットオフに移行する際に、 なかなか抜けずに滞って、応答が遅くなります。
また、コレクタ側から大振幅の電圧を取り出すため、トランジスタのミラー効果により、 応答が遅くなります。
このことから、汎用フォトカプラの本来の実力を発揮させるには、
- フォトトランジスタを飽和させない。(ベース蓄積電荷対策)
- フォトトランジスタ両端の電位差をなるべく固定する。(ミラー効果対策)
これは、フォトカプラの本来の機能、つまり、入力 LED に流れる 電流の CTR (Current Transfer Ratio) 倍の電流が出力フォトトランジスタに流れる電流源 として扱えばよいことになります。
具体的には、フォトトランジスタの電流が流れるパスから抵抗を排除し、 代わりに電流をセンスする手段を設けます。
実際の回路
左が実際の回路図ですが、単純にトランジスタ 2 個のカレント・ミラーを挿入しただけです。 フォトトランジスタの電流が流れるパスから抵抗を排除し、 接続されているのは順方向バイアスされた pn 接合だけです。ダイオード接続された Q102 で電流をセンスし、 Q103 でミラーされた電流パスに負荷抵抗を挿入しています。 トランジスタのマッチングは気にする必要はありません。 同じ型番の、同じ hFE ランクであれば十分です。
LED102 はオマケです。フォトカプラの入力電流の CTR 倍の電流が流れます。 たとえば、PC817C では、CTR は 200 % から 400 % ですから、LED102 には 10 mA から 20 mA 流れます。 LED に高輝度タイプを使うとまぶしい感じなので、普通のタイプが良いと思います。 LED を使わないときにはフォトカプラの 4 ピンを直接 Vcc につなぎます
実験すると、フォトトランジスタ両端の電圧 VCE が 2 V を下回るあたりから リニアリティが低下して飽和し始めるようです。 したがって、フォトトランジスタを完全なリニア領域で動作させるには、 4 ピンの電圧を少なくとも 2.5 V 程度以上にする必要があります。
したがって、Vcc = 5 V の時、5 - 2.5 = 2.5 V 程度の VF の LED まで使用可能です。 Vcc = 3.3 V の時は、3.3 - 2.5 = 0.8 V ですから、LED は接続できません。
LED102 のオマケでない機能としては、フォトトランジスタにかかる電圧を下げて、 消費電力を低減することです。 Vcc = 5V で LED なしでは、フォトトランジスタ両端に 5 - 0.6 = 4.4 V かかり、 そこに 20 mA 流れると消費電力は 88 mW 程度になります。
この電力はフォトトランジスタで消費され、熱となって温度が上昇し、 フォトカプラの特性を悪化させるだけで、何もメリットはありません。 そこで、LED に電力消費を負担させ、フォトカプラの消費電力を下げています。
カレントミラー回路を挿入したといっても、これはまだアナログ回路ですから、 Vcc = 5V および負荷抵抗 R103 = 1 kΩ に対して、カレントミラーのレシオも含んだ トータルの CTR が 100 % 以下では Q103 は飽和せず、「0」レベルが GND から浮きます。
トータルの CTR が 100 % を超えると、Q103 は飽和し始め、ディジタル出力ぽくなってきます。 Q103 が飽和するといっても、それはミラーされた電流に対するものですから、 大元のフォトトランジスタを飽和させることはありません。
実験回路
実験回路を下に示します。
前述の回路 (a)、(b)、(c) を並べ、標準的な MIDI 出力回路に準じた回路でドライブします。 Vcc は 5 V です。 ボーレートを 31.25 kbps に設定したマイコンの UART を使って擬似 MIDI 信号を発生しています。
ただし、LED のアノード側の抵抗値は本来は 440 Ωとなりますが、E24 系列の 430 Ωで代用しています。 また、本来はオープンコレクタでドライブしますが、CMOS 出力で代用しています。
(b),(c) の回路にはシャープの PC817C (CTR 200 % から 400 %) を使いました。 PC817C にした理由は単純で、秋月で 1 パック 8 個入り 100 円だったからです。 (b) の回路の PC817C と (c) の回路の PC817C は別の個体なので、 厳密に言えば比較は成立しませんが、(c) の回路では個体差がほとんど出ません。
(a) の回路では、手持ちの PC900 (現在は廃品種)を使いました。 データシートでは、なぜか負荷抵抗の値が 280 Ωとなっていますが、 ここでは E24 系列の 270 Ωを使用しました。
パルス波形
下の写真が「0」「1」交番波形 (15.625 kHz) に対する応答です。
上から順に、
回路(a) (PC900) 回路(c) (カレントミラー) 回路(b) (RL 小) 回路(b) (RL 大)の波形です。
時間軸は 10 us/div、垂直軸は 5 V/div です。
2入力のディジタル・オシロで観測しているので、リファレンスとしてメモリしたトレース2本を 合わせて、計4本のトレースを表示しています。
一番上のトレースの PC900 出力は、さすがに素早い立ち上がり、立ち下がりです。 ただし、「0」の幅が少し広く、「1」の幅が少し狭くなっています。
二番目のトレースの、カレントミラー使用の回路(c)の出力は、 確かにトランジェントこそ遅いですが、 MIDI 信号用としては PC900 とほぼ同等に使えるような応答になっています。
三番目のトレースの、負荷抵抗が小さい時(約 200 Ω)の回路(b)の出力は、 「0」レベルが 2 V ほど GND から浮いています。 5 V TTL レベルのディジタル信号としては、ノイズマージンがほぼゼロで、使い物になりませんが、 アナログ信号としては決して悪くありません。
立ち上がり、立ち下がりを読み取ると 4 us 程度で、前の項での計算と良く一致します。
負荷抵抗を大きくしていくと、「0」レベルの電圧は GND に近づいていき、ディジタル信号と してのマージンは大きくなっていきます。 一方で、アナログ波形としては歪んで形が悪くなっていきます。
一番下のトレースが、回路(b)でエラーが発生し始める限界近くの大きさの 負荷抵抗(約 500 Ω)の場合です。
まず、すぐに分かるのが、「0」の幅が広く、「1」の幅が狭くなっています。 立ち上がりは遅いですが、立ち下がりは(見かけ上)早くなっています。
「0」レベルは GND 近くまで落ちていますが、良く見ると平坦ではなく、 鍋底のように下に凸の形になっています。
負荷抵抗が大きいというのは、すなわち、電圧ゲインが高いということです。 3番目のトレースの場合、「0」レベルが 2 V ということで、
(5 [V] - 2 [V]) / 200 [Ω] = 15 [mA]がフォトトランジスタおよび負荷抵抗に流れていました。
負荷抵抗 500 Ωの場合、本来なら、
5 [V] - 15 [mA] * 500 [Ω] = -2.5 [V]まで「0」レベルはスイングするはずですが、負電圧が出るはずもなく、 実際には GND 付近で飽和した波形が観測されるわけです。
立ち下がりが早くなったように見えるのは、 立ち下がり始めの傾斜が急な部分が (500 / 200) = 2.5 倍に 拡大されて見えているせいです。 実際には、GND レベル付近で飽和しながらも、まだ、ジリジリと立ち下がり続けています。
同様に、立ち上がりも、飽和レベル内で立ち上がり始めているのに、なかなか飽和を抜けきれず、 かなり時間が経ってから Vcc に向かって立ち上がるのが観測されるわけです。
これが、「0」レベルが平坦ではなく、下に凸になっている理由です。
アイパターン
アイパターンとは、簡単に言えば、ディジタル変調波を、 サンプリング・ポイントをトリガの基準として波形を重ねて描き、 しかも、全てのビット変化パターンを網羅するような入力パターンとしたものです。
良好なシステムであれば、サンプリング・ポイント周辺では本来の値の周辺に収束し、 「目」が空いたパターンとなるので、「アイパターン」と呼ばれています。
MIDI は一般に良く利用されている、いわゆる「非同期」または「調歩同期」とも呼ばれる方法を利用して データを送っています。 具体的な数値を使って説明すると、送るデータがない時は信号線は「1」に保持されていますが、 データを送るときには、送信側では、まず 1 ビット分の「0」をスタートビットとして送ります。
受信側では、「1」→「0」のエッジで通信の開始を検知すると、1/2 ビットタイム である 16 us 待って、 信号線をサンプリングし、再び「0」であれば、正しいスタートビットが 検出されたものとして、32 us ごとにサンプリングして、残りのデータビットの受信を続行します。 最後に、常に「1」であると約束されているストップビットをサンプリングして、「1」で なければフレーミング・エラーを報告します。
スタートビット検出時、16 us 待った後にサンプリングされるデータが、もし「0」でなければ、 それはノイズであると解釈し、データ受信は中止して、 また最初の「1」→「0」エッジ検出に戻ります。
「非同期」では、送信側がクロックを供給せず、また、受信側がデータから クロックを抽出するわけではなく、受信側が自分のタイミングでサンプリングするので、 外部からは正確なサンプリング・ポイントはわかりません。
実験回路では、擬似 MIDI 信号を発生するマイコンで、スタートビットに同期するパルスを 同時に発生させ、オシロのトリガ信号として使っています。 アイパターンの描画には、ディジタル・オシロの蓄積機能を使いました。
左の写真の上の波形は回路(a)の PC900 出力、 下の波形は回路(b)の負荷抵抗 RL が大きい時のものです。 時間軸は 10 us/div、垂直軸は 2 V/div です。
ちょっと見にくいですが、画面左端の立ち下がりエッジががスタートビットの始まりです。 画面中央から左へ 3.2 div の位置にある実線の垂直線カーソルが、 スタートビットのサンプリング位置です。
中央の垂直線が b0 のサンプリング位置で、中央から右へ 3.2 div の位置の 破線の垂直線カーソルが b1 のサンプリング位置です。
このサンプリング位置は PC900 出力に合わせたもので、 他の波形ではスタートビットの立ち下がり位置がずれるので、正確ではありません。 目安として見て下さい。
上の波形の PC900 による回路(a)の出力では、「0」と「1」のパルス幅の変化により、 少しマージンが損なわれていますが、それでも サンプリング位置に対しては十分タイミング・マージンがあることが 分かります。
一方、下の波形の大きな負荷抵抗を付けた回路(b)の出力では、 データが「1」の場合に、波形のエッジが サンプリング・ポイントに引っかかりそうな位置に来ています。 つまり、タイミング・マージンが小さいということです。
左の写真の上の波形は回路(c)の出力、 下の波形は回路(b)の負荷抵抗 RL が小さい時のものです。 時間軸、垂直軸、垂直線カーソル位置は前の写真と同じです。
両方の波形とも、十分なタイミング・マージンがあります。
下の回路(b)の波形は、「0」レベルが GND から 2 V 浮いているので、 ディジタル信号としては失格ですが、波形的には 立ち上がり、立ち下がりが、ちょうど中間のレベルでクロスしていて、 アナログ信号としては優秀です。
評価
MIDI 入力インターフェースに要求される性能、および調整不要と言う観点からは、 カレント・ミラーを使用した回路(c)は、PC900V や TLP552 などの ディジタル出力フォトカプラにひけを取らないと言えるでしょう。
MIDI THRU 出力に出してカスケード接続するための入力としては、 十分な性能があるかどうかは分かりません。
V850 の最大構成版の基板に実際に回路を組み、 1 パック分の 8 個の PC817C で試した限りでは、負荷抵抗を調整する必要もなく、 すべて問題なく使えました。 CTR は測定していないので、8 個がどういう分布になっているかは分かりません。
他の型番のフォトカプラや、より低い CTR や、より高い CTR のフォトカプラに ついても問題ないかどうかは、テストしていないので分かりません。
6 ピン / 8 ピン IC であるディジタル出力フォトカプラに対し、 4 ピン汎用フォトカプラ + トランジスタ 2 個 + LED で同じ機能ということですから、 部品の実装面積という点では、少し不利です。
コストという点では、4 ピン汎用フォトカプラは安価ですが、 追加のトランジスタ 2 個と LED のコストが問題となります。
もっとも、「趣味の電子工作」という立場からは、 トランジスタや LED は手持ちがあれば、 新規に部品を買いに行く手間と費用がかからないという意味で 「ゼロコスト」と考えることもできます。