自作カーブトレーサ[UDAS-01]で半導体の特性を見る その1

[旧ブログからの移行記事]

Dscf0734

最近は USB 接続で動作する汎用のカーブトレーサを製作しています。
型番は UDAS-01 と名づけました。
これは USB Device Analyzer System の略称のつもりです。
未知のダイオードやトランジスタに対して、以下のようなグラフが取れます。
graph_1s2076a_01

このデバイスは HID デバイスの USB キーボードとして動作します。
Excel を起動した状態でスイッチを押すと、
自動的に取得したデータが打ち込まれていきます。

Dscf0733
(上面図)

写真に見るように、3ch の DAC と 16bit の ADC を搭載しています。
また、MCU には AVR の ATmega88V を使用しています。
上記写真右側のコネクタに V-I コンバータや V-F コンバータなどの
プラグインボードを接続して使用します。
汎用性を重視したつくりになっており、
半導体のみならずスイッチングレギュレータの特性など、
いろいろ計測することを想定しています。
スタンドアローンでも、15V 100mA 程度までグラフが引けます。

ちなみに、秋月で扱いのある半導体アナライザ (DCA-75) も
カーブトレーサ機能がありますが、100mA も電流を流せません。
もっとも、手軽さの点では市販品の方が優れていることは
いうまでもありません。

下記はいろいろな Tr の Ic-hFE 特性をグラフにしたものです。
(Vce = 3V (小信号) または 5V (中電力))

(1) 2SC1815
graph_2sc1815_01
2SC1815 は汎用の小信号 Tr です。
一般にバイポーラ Tr は定格付近で hFE が低下してしまいます。
今回使用した個体は GR ランクですが、hFE の落ち込みが顕著でした。
Ic<5mA で hFE がやや低いのは測定誤差によるもので、
基本的に Ic<50mA の領域で hFE はフラットです。

(2) 2SC2021
graph_2sc2021_01
2SC2021 は ROHM の定番汎用小信号 Tr です。
Ic 定格 100mA ですが、hFE の落ち込みは 2SC1815 ほど顕著ではありません。
一方、低 Ic の領域では、2SC1815 ほどフラットではないように見えます。

(3) 2SD468
graph_2sd468_01
2SD468 は日立の中電力 Tr です。(Ic=1A)
電源容量の都合で 180mA まで引きましたが、hFE は落ちません。

(4) 2SC827
graph_2sc827_01
2SC827 は富士通の SW 用 Tr です。 (Ic=0.5A)
2SC827

(5) 2SD2171S
graph_2sd2171_01
2SD2171 は ROHM の中電力 SW 用 スーパーβトランジスタです。
スーパーβトランジスタとは文字通り hFE の非常に高い Tr のことで、
グラフを見ての通り hFE の桁が違います。
この Tr が役立つところはえてして MOSFET の方が適格となるので、
意外と使いどころが難しいういやつです。

少 Ib 時の誤差が目立ちますので、これの解消が課題です。

USB バージョンを取得する (VC++)

PC に接続されている USB デバイスのバージョンがどう認識されているか
(ハイスピードの USB2.0 なのか、USB1.1 なのか…等)
知りたいことがあります。
これを取得する直接的な API はないようですが、
Microsoft の WinDDK に含まれる usbview サンプルが参考になります。

USB バージョンを調べるには、ルートハブからデバイスを走査していき、
DeviceIoControl 関数を使って USB_NODE_CONNECTION_INFORMATION_EX 構造体の情報を取得して、
デバイスディスクリプタの bcdUSB を見るというのが確実な方法だと思います。
bcdUSB には BCD で USB バージョンが入っています。

USB デバイスの VID と PID から USB バージョンを返す C++ のクラスをつくりました。
-> ダウンロード
CGetUSBVersion::GetUSBVersion(pid, vid) を呼び出すことで、
USB バージョンが BCD で帰ります。
(たとえば 2.0 なら 0x200)
取得失敗で負の値が帰ります。

なお GetRootHubName などの一部の関数は、WinDDK のサンプルから引用しています。

(メモ)I2C 絶縁回路


ADC などの I2C デバイスを絶縁させて動作させたい場合があります。
I2C は双方向バスなので、インタフェースに少し工夫が必要です。
上記はフォトカプラを使用した簡易的な I2C 絶縁回路で、
クロック 1kHz 程度なら問題なく動作します。
(なおクロックストレッチは対応せず)
回路定数は重要であり、フォトカプラの CTR も 100% 以上必要でしょう。
東芝 TLP521-GR が適当です。

TTL IC で自作する Atari Pong(4)

* ものは完成しているのですが、執筆が間に合っていません…

4 枚目はゲームコントロール回路、サウンド出力回路です。参考にした回路図には少し誤りがあるので、原本を参照したほうがよいかもしれません。右下の SW はゲーム開始ボタンです。

オリジナルの回路にはアンテナ入力があるのですが、役割がよくわかりません。この信号と /SRST 信号は Tr で組まれたラッチ回路の入力となっており、客が近づいたら ATTRACT モードになるという動作でいいのでしょうか?今回はこの部分も TTL IC に変更しています。また、オリジナルのオーディオ出力には DC 成分が残りますので、10uF でカップリングしています。

IC のデカップリングキャパシタですが、IC 1 列ごとに 3.3uF のタンタル C、フリップフロップに別途 0.1 uF のセラミック C を乗せています。少し足りないかとも思いましたが、この程度で十分のようです。ただし、使用した IC は半分以上 74LS なので、スタンダード 74N を使用するなら、もう少し多く載せたほうが良いかもしれません。

TTL IC で自作する Atari Pong(3)

3 枚目はボール位置のカウンタ、ボール速度の計算回路を載せています。
毎度美しくない配線ですが、このほうが後のデバッグに都合良いのです…

Pong の回路の面白いところは、上下左右に動くボールの「位置」を 74161 (同期式カウンタ…オリジナルでは Fairchild 9316 ですが) によって演算させていることです。どういう仕組みなのかというと、例えば次のフレームでのボールの縦位置は現在位置の ± N とするためには、ディスプレイの縦幅が 252 ラインなので、74161 のプリセットを 4+N (>0) とした modulo 256-(4+N) のカウンタ回路を構成します。このカウンタを水平同期信号でフリーランすると、カウンタがプリセットされるタイミングの V 位置 y(t) として y(t) = y(t-1)+N となるわけです。(説明を理解するより回路を見た方が早いでしょう)

ボールの垂直速度、水平速度は動的に変わってゆきます。垂直速度はボールがパドルに当たった位置によって変化するので、ボールの移動角 度が変わることになります。水平速度もゲームが進むにつれて高速になります。これらの工夫により、Pong というゲームは素朴ながらゲーム性が高くなっているわけです。

TTL IC で自作する Atari Pong(2)

基板 1 枚目

やはり 1 日がかりの作業となってしまいました。1 枚目の基板にはクロック(14.31818 MHz の 2 分周)を含む、映像タイミング生成回路を中心に乗せています。

ケーブルによる配線は基板の表面を這わせています。裏面を Point-Point で配線した方が表面からの見栄えが良く、配線スピードも速くなるのですが、配線ミスが見つけにくくなります。難しいところです。今回は表面での配線で統一しようと思います。

基板間の配線は L 型ピンヘッダを使用して、マザーボード経由の配線もしくはフラットケーブルによる配線を考えています。一昔前ならカードエッジコネクタでしょうが、今はそのほうがコスト大です。

このユニバーサル基板では、パターンの制約から、DIP IC を乗せて使うとあまりスペース効率が良くなりません。パターンカットすればこの 2-3 倍の IC を乗せることができるのですが、配線が窮屈になりすぎて不都合です。この点、サンハヤトの IC ユニバーサル基板は良くできているのですが、少し高価です…

TTL IC で自作する Atari Pong (1)

去年から ロジック IC をたくさん収集していましたが、そろそろ消費するフェーズかなと思います。冬休みということもあり、Atari のアーケードゲーム Pong を作ろうと考えました。

本稿の題名は「TTL IC で自作する Atari Pong」としましたが、オリジナルの Pong は 74 シリーズの汎用ロジックで組まれているので、サービスマニュアルの回路図を元に製作することにします。サービスマニュアルや回路図は archive.org 等で手に入りますが、このページ(Dan B’s Video Game Tech Page)に清書済みの PDF があるので、参考にさせてもらいます。

製作にあたって設けたルールは以下の通りです。

  • 使用する IC は 74N、74LS (+555) に限る
  • 配線には UEW を使わない
  • チップ部品を使わない

製作にはおおむね 60 個程度の TTL IC を使用しますが、ほとんど手持ちストックの中から揃えることができました。ただし、ストックの都合で、以下の IC は別の IC で代用することにします。

  • 7425 -> 7432 (+7404)
  • 7450 -> 74LS51
  • 74107 -> 7473, 74LS113
  • 9316 -> 74LS161
  • 7483 -> 74LS283

 
ストックから集めた IC

今回は以下のようなユニバーサル基板を調達しました。「新印 8.5CM*20CM」と書かれており、ロジック IC の実装に便利そうです。これ 1枚に 16 個程度の IC が楽に乗せられるので、複数枚を用いてモジュール構成とします。


IC 向けユニバーサル基板

以下次回。

ニキシー管テスタのその後

以前紹介していた TR-6364 マルチメータですが、
電源ケーブル欠品という問題がありました。

特殊な規格のコネクタのようで、どうしてもケーブルが手に入らなかったので、

写真のように、普通のメガネコネクタに付け替えてしまいました。
(ちなみにこれはマルツで購入したもの)

これで、電池動作に加えて、内蔵トランスからの動作ができるようになりました。
電池動作との動作の違いは、内部動作が電池電圧直結から安定化 +15V になることで、
これにより
・AC-DC 変換部分オフセットの安定化
・内部 DC コンバータのピー音の解消
などのメリットがありました。


実は半年前に改造・調整していたのですが、
今動かしても ACV レンジでちゃんと 0 が出ます。
よかった。

自作VFD電卓 その3

クロック回路の設計


TMS1030/1031 にはクロックドライバが無いので、
1 ピン(CK) にクロック信号を入力する必要があります。
周波数は 100k – 200kHz ほどで、14V p-p (Vdd-Vgg) の振幅が必要です。

当時の製品では、Tr 2石のマルチバイブレータでクロックを生成させているケースが多いのですが、
部品点数と消費電流が気になるので、今回は CMOS インバータによる発振回路を作ります。
こういう高電圧系の応用に CMOS の 4000B / 4500B は便利です。

 
4584B (シュミットトリガインバータ) を使った発振回路は、図のようになります。
4069UB を使うことも考えましたが、その場合貫通電流の影響で、
消費電流が 図の回路に比べて 10 倍ほどになってしまいます。
出力の 1k は保護用で、接続先のピン配置がまだ確実ではないので入れたのですが、
そもそも 4584 の出力 Z がそれくらいあるので、無くても同じかもしれないです。


ここまでの基板写真です。

ドライバ回路の設計

この IC にはディスプレイのドライバ回路もなく、単にオープンドレイン出力となっているだけで、
定格などは資料が無いため不明です。
VFD を駆動するために、外部 Tr によるドライバ回路が必要です。


これは、上図のような単純な回路で十分です。
図中 グランド記号で示されている電位は、VFD のカットオフ電圧なので、
Vgg より低い電圧です。
2SC2021 は ROHM の汎用トランジスタですが、外形が FTR なので高密度実装が可能です。


ここまでの基板写真です。
抵抗などはチップ部品を使っているので、部品面に実装してあります。

IC の生存確認

ここまででの実装で、もし IC が生きていれば、
少なくともプルダウンされたグリッド出力には信号が出力されるはずです。
というわけで…

動作かくにん!よかった
製造後 40 年あまりにして、IC にはじめて電源が入れられたわけです。