リングオシレータでインバータの遅延時間を求めてみる

インバータ遅延時間を求めるために、リングオシレータを使います。
ただ、ディスクリートで作る人はいないかもしれません。
自分的には、LTspice階層化を試すことが目的です。

スポンサーリンク

リングオシレータ

ハウリング

最も簡単な発振器

周波数を問わず、最も簡単な発振器を作れと言われたら、マイクとスピーカを近づけて、ハウリングを起こすことが最も簡単だと思います。

リングオシレータはその次に簡単な発振器だと思います。
インバータを用意し、奇数個つなげるだけです。

ボルテージフォロワ

ボルテージフォロワ

ただし、一段だと、ボルテージフォロワになって発振しません。
(ユニティゲイン(すなわちボルテージフォロワ)での安定動作を保証しない一部のオペアンプなどで発振するかもしれませんが、それは言わない約束です)

素数の奇数段インバータからなるリングオシレータの例

素数の奇数段インバータからなるリングオシレータの例

インバータを数段縦続接続して、フィードバックが返ってくるまでに遅延を与えると、均衡点を行き過ぎるようになります。それを反対に戻そうとすると、さらに逆方向に行き過ぎてしまいます。このようにして振幅が増幅されると発振に至ります。

このときのインバータ段数素数が良いようです。約数があると、高調波が生じて、発振周波数が安定しなくなる可能性があります。このような理由を含めて、発生する揺らぎのことをジッタとも言います。

リングオシレータをシミュレーションする

インバータの回路図を作る

リングオシレータを作るには、インバータが必要です。

インバータ

インバータ

ここでは、バイポーラトランジスタをスイッチ動作させることにしました。
電源は手ごろな5Vにします。

Q1をONさせたときに約1 mA流すことにしましょう。Q1のVCE飽和電圧を約0 Vとすると、5 V/1 mA=5 kΩなので、E6系列から4.7 kΩを選ぶことにします。
Q1の電流増幅率βを100と仮定すると、ベース電流が0.01 mAを越えれば飽和領域に入れることができます。そこで、余裕を見て、その10倍の0.1 mAを流しこんで、完璧に飽和領域に入れようと思います。論理レベルを0 V~5 Vとすれば、5 V/0.1 mA=50 kΩなので、R1として、47 kΩを使うことにします。

トランジスタのモデルとしては、NPNの定番トランジスタである、2SC1815とほぼ同等の2N3904を使うことにします。

入力端子は、次のようにして作りました。

「Label Net」メニュー→「Port Type」から「Input」を選ぶ→名前を「INPUT」と付ける

出力端子も同様に、「Output」を選んでから、名前を「OUTPUT」にしました。

これでインバータの完成です。

「File」メニュー→「Save As」をクリック→「Inverter.asc」と名付けました。

インバータの階層化シンボルを作る

インバータの回路図を表示した状態で、
「Hierarchy」メニュー→「Open this Sheet’s Symbol」をクリック

デフォルトのシンボル

デフォルトのシンボル

デフォルトで、こんなシンボルが作られます。今時のISOはこうなのかもしれませんが、昔人間の自分には、インバータには見えません。

インバータのシンボル

インバータのシンボル

そこで、DrawメニューからLineやCircleを選んで使い、このようなシンボルを作りました。
これを保存します。

 

File→New Schematicで新しく回路図を作ります。

F2キーを押して、今しがた作成したInverterを見つけましょう。
もし、見つからない場合は、一旦、回路図をInverterと同じフォルダに保存すると、そのフォルダがTop Directoryにセットされて見えるようになると思います。

リングオシレータを作る

リングオシレータの回路図

リングオシレータの回路図

Inverterを奇数個接続します。前述のように、素数を選ぶことにします。僕は5段にしました。

続いて、「Simulate」メニューから「Run」を選びます。

でも、「Edit Simulation Command」というフォームが開くことと思います。
LTspiceには複数のシミュレーション機能があり、そのうちの1つを選ばないとLTspiceが実行を始められないからです。

ここでは、過渡解析をするため、「Transient」タブをクリックします。次いで、「Stop time」欄に50usとでも指定しましょう。usは、μsのことです。

「OK」を押すとシミュレーションが始まります。

シミュレーションが終わったら、どこかのノードにマウスを近づけてみましょう。すると、アイコンがプローブのような形に変わるので、クリック!

発振波形

発振波形

うまくいけば、発振波形が現れます。

違うトランジスタモデルを使っている場合は、シミュレーション時間をもっと短くしたり、長くしたりする必要があるかもしれません。

Lレベルは7.13μsでした。この値を5で割ると、1段あたりの遅延時間が約1.43μsと求まります。これがLレベルからHレベルになるとき、すなわち、トランジスタがONからOFFになるときに要する時間です。

Hレベルは4.83μsでした。よって、トランジスタがOFFからONに要する時間は約0.97μsになります。

このインバータの構成では、トランジスタがON(出力としてはLレベル)しているとき、ベースには電子が沢山溜まっている状態(いわゆる飽和)です。トランジスタがOFFするには、この電子がコレクタかエミッタに流れ出すか、ホールと再結合する必要があります。これらの実現には時間を要するため、出力がLからHになるには時間がかかります。
OFFからONになるときは、エミッタから多量の電子がベースに注入され、それがコレクタに届いた時点でスイッチングが完了します。ベースにおける電子の濃度には勾配があるので、電子は迷わずコレクタを目指せるので、動作は高速です。

シミュレーションでは、ONからOFFになるときの時間はOFFからONになるときの時間の約1.5倍になるという結果が得られました。これが、現実の値とどの程度一致するかは分かりません。ただ、spiceでは飽和状態のふるまいが考慮されていることは確認できました。

まとめ

リングオシレータを使ってインバータ1段当たりの遅延時間(=スイッチに要する時間)をシミュレーションしました。遅延値は約1usのオーダで、ONからOFFになる時間は、OFFからONになる時間の約1.5倍でした。

人間には認識できないほどの速さですが、僕が思っていたより10倍くらい遅かったです。論理振幅が小さくて、トランジスタを飽和領域に入れないECLで構成すれば、同じトランジスタでも100倍くらい早くなるのではないかと思います。(面倒なのでシミュレーションしていません)

LTspiceで階層化することは比較的簡単でした。ただ、シンボル図を作成するエディタで、線を一度引いてしまうと、角度や長さが変えられないのが残念でした。無料で使えるので、十分感謝はしているものの、LTspiceはしばしばアップデートをしているので、ユーザインタフェースをもう少し改善してくれるとありがたいと思います。

コメント

タイトルとURLをコピーしました