#pcomment(reply)
(2015/1/30:akita)
スタンダードセルやコンパレータなど、いろいろ部品がそろってきましたので、こいつらを組み合わせて、もう少し大きな回路をつくってみましょう。
アナログ回路でそこそこお手軽につくれるもの、といえば、発振回路で定番の「555」があります。
(「555」については、このあたりの説明が詳しいです→ http://www.marutsu.co.jp/pc/static/large_order/led_ic555 )
この555の中身を見ると、意外とシンプルで、次のものがあればできそうです。
- コンパレータ
- SR-FF (中身は2入力NOR×2個)
- nMOSトランジスタ(放電用)
- 抵抗
コンパレータは[[../コンパレータ]]でつくりました。
SR-FFは、[[../スタンダードセル]]でつくった2入力NORゲートをつかえばできそうです。
nMOSトランジスタは最初につくりましたね。
抵抗は、あさぎさんの[[../抵抗]]あたりを参考にすればつくれそうです。
というわけで部品はほぼそろったようなものなので、あとはこれらをつなげばOKですね。部品をつなぐだけですから、ブレッドボード上の配線とたいした差はありません。
というわけで、まずはnMOSトランジスタ(外付けの大きなキャパシタを放電するので大きめに・・・)と抵抗をつくっておきます。抵抗は、あさぎさんの[[../抵抗]]の作り方よりももっとシンプルに、細長いPolyだけにしています。
#ref(R5k.gex)
これで部品がそろったので、あとは並べて、ML1/ML2でつないでいきます。金属配線ML1/ML2がブレッドボードのワイヤ、みたいな感じですね。
#ref(./555.png,10%)
#ref(555.gex)
なおシミュレーションしてみたところ、cmp.gexのコンパレータの出力は、ちょっと立ち上がりが緩やかなため、発振回路が発振しない、という現象がありました。そこでコンパレータの出力にインバータを2段つなげて、出力の立ち上がり/立ち下がりを急峻にしています。(インバータ2段なので、値はもとと変わらない)
既につくった以下のセルを呼び出していますので、これらを同じフォルダに入れておきます。
#ref(cmp.gex)
#ref(nor2.gex)
#ref(inv1.gex)
※cmp.gexは、[[../コンパレータ]]で作ったものに少し手を入れています(出力端子にML2をおいただけ)。nor2.gexとinv.gexは[[../スタンダードセル]]でつくったものと同じです。
これをシミュレーションしてみましょう。
ただしWGexの回路抽出では、抵抗を抽出することができません。
(今回のPolyで結んだところは、抵抗0Ωでつながっている=ショートしているとみなされます)
そこでレイアウト図では抵抗をはずしておいて、「抵抗がつながるはずのところ」に、抽出後のネットリストに手動で抵抗を入れます。
以下の555.spでは、r1, r2, r3が、レイアウト上ではPolyの抵抗がつながるはずのところ、です。仮にそれぞれ5kΩをつないでいます。
これに加えて、555を発振回路として使うため、VDD-DIS間に抵抗Ra(この例では1kΩ)、DIS-TH/TRG間に抵抗Rb(この例では10kΩ)、TH/TRG-GND間にキャパシタCa(この例では1uF)をつないでいます。(ちなみにTHとTRGをつなぐため、1Ωの抵抗rsでつないでいます。0Ωでもいいかも)
#ref(555.sp)
555の発振回路の発振周波数f[Hz]は、「f = 1.44 / (RA + 2RB)CA」で与えられますから、今回のRa/Rb/Caだと、f=68[Hz]、つまり周期は15[ms]くらいになるはずです。
コンデンサCaの両端電圧が0V、という初期条件をあたえてシミュレーションするとこんな感じになります。(緑がTRG/TH、青がDIS、赤が出力Q)
#ref(./555sim.png,10%)
赤の周期を見ると、だいたい15[ms]になっててOKそうですね。
というわけで、こんな調子で、部品をつくったら、ブレッドボード上でつないでいくみたいな感じで、それらをつないで、どんどん大きな回路をつくっていけると楽しそうですね。
ファイルはいつもの通り、GitHubにおいておきます。https://github.com/akita11/mklsi/tree/master/555