【第7回】複雑なデジタル回路も一瞬で!――Custom Logic徹底解説
- なぜcustom logicを使うのか?
- custom logicとは?
- custom logicを作ってみる
- 作成したcustom logicを使う-多数決回路
- 4進アップカウンタを作る
- custom logicで7セグメントデコーダーを作ってみる
- 次回予告
- う-ん、よく分からん!
- 参考文献
なぜcustom logicを使うのか?
前回、多数決回路と4進アップカウンタを作成しました。
回路の仕組みを理解したい場合は、前回のように一から自分で部品を組み合わせて、回路を作っても構いませんが、ただその回路の機能だけが欲しい場合、たくさんの部品を使う必要があって、正直、面倒です。
custom logicという名前の部品を使えば、この面倒をなくすことができます。
custom logicとは?
custom logicとは、下のような文字を入力するだけで、多数決回路・JK-FF・カウンタ回路などのデジタル回路を作ることができる部品です。
+ 00=01 + 01=10 + 10=11 + 11=00 ? AB=AB
custom logicを作ってみる
では、custom logicを作成してみましょう。 今回は、前回も作成した「多数決回路」をcustom logicで作成していきます。
モデルを作成する
custom logicは、Digital Chips - Add Custom Logicから追加できます。
追加した、custom logicのEdit画面を開きます。すると、下のような画面が表示されます。
Model Nameには、これから作成する回路に対してつける名前を入力します。 ここでは、MajorityCircuitという名前を付けています。
続いて、Edit Model
をクリックします。
この画面で、モデル(自分が作りたいデジタル回路)を作成していきます。
Edit Model
名前の通り、Inputs・Outputsには、それぞれ入力端子・出力端子の名前をカンマ区切りで入力します。
これらの名前は、下の図のように表示されます。
Info Textは、作成したcustom logicにマウスを当てた時に画面右下に表示される文章を入力します。
今回は、MajorityCircuitと入力しています。
Definition
Definitionで、回路の動作を定義します。
上の図は、Definitionの内容とその説明を一つにまとめたものです。
入力がどのような状態のときに、出力をどのような値にするのかを一行(011=1,101=1……と書いてある)で設定しています。
=の左側は入力端子、右側は出力端子を表しています。各端子は、Inputs・Outputsで設定した端子に左から順に対応しています。
例えば、InputsにA,B,C,D、OutputsのE,Fを指定して0101=10と指定した場合、Aが0、Bが1、Cが0、Dが1のときに、Eに1、Fに1を出力するという意味になります。
Definitionの説明-多数決回路
上図①~④は、入力が011,101,110,111(0よりも1の数が多い)のとき1を出力するように設定しています。
では、⑤の入力にある?
は何でしょうか。これは、入力がどんな値であってもという意味です。
ですから、⑤はA2,A1,A0の入力がどんな値であったとしても、Eqに0を出力するという意味になります。
ただ、下のコラムでも説明しているように、先に書いた設定の方が優先されるため、結果としてこの設定は「上の4つの設定以外の入力値になっていたら、0を出力する」という意味になります。
011=1,011=0のように矛盾した設定を一つのDefinitionに書くと、どうなるのでしょうか。 custom logicでは、先に書いた設定が優先される決まりになっています。 多数決回路で挙げた例でも、①~④と⑤の設定が矛盾していますが、先に書いた設定が優先されるため、入力が011,101,110,111のときは、⑤の条件が当てはまっていたとしても1が出力されます。
これで多数決回路を作成できました。OKボタンを押して、作成を完了しましょう。
作成したcustom logicを使う-多数決回路
では、作成したcustom logicを使ってみましょう。
追加したcustom logicと論理入力・論理出力の部品を使って下の図のような回路を作成します。
(回路データは、ここの「多数決回路(customlogic).txt」からダウンロードできます。)
シミュレーションを実行すると、前回作成した多数決回路と同じ動作をしていることが分かります。
4進アップカウンタを作る
続いて前回作成した4進アップカウンタをcustom logicで作成してみます。
多数決回路と同様、次の手順で、custom logicを作成します。
- custom logicを追加する
- Model Nameを入力してEdit Modelをクリック
- Inputs,Outputs,Info Text,Definitionを入力してOKボタンを押す
- custom logicを使う
Model Nameは、Counterとしています。
Definitionの説明-4進アップカウンタ
多数決回路のときと異なり、4進アップカウンタは、入力の値だけでなく現在の出力も踏まえて、次の出力の値を決める必要があります。
custom logicでは、=の左側に入力端子の数を超えて、文字(0,1,+,-など)を入力すると、出力の条件に現在の出力を、含めることができます。
例えば、InputsをA,B、OutputsをC,Dとしたとき、0011=10と入力すると、入力A,Bが0,0、現在の出力C,Dが1,1のとき、出力C,Dに1,0を出力するという意味になります。
①~④の+は、クロックの立ち上がりを示しています。(逆に-だと、クロックの立下りを示す。)
⑤の現在の出力にある、A,Bは、それぞれ現在の出力のQ1の値・Q0の値を示しています。 そのため、=の右側にあるA,Bも現在の出力のQ1の値、Q0の値を表すことになります。もしA,Bに0,1と入っていたとしたら、出力にも0,1が出力されることになります。
⑤の?は、クロックがどんな状態であっても、という意味を表します。注意が必要なのは、ここでの?には、クロックの立ち上がり・立ち下がりの状態だけでなく、クロックが変化しないという状態も含まれるという点です。(ただ、多数決回路でもやったように、先に書いた設定が優先されるため、⑤での?は「クロックが立ち上がっていなければ」という意味になります。)
結局、⑤の設定は「クロックが立ち上がっていなければ、出力はそのまま」という意味になります。
前のコラム、Definitionの優先順位でも取り上げた通り、custom logicは先に書いた設定が優先されます。そのため、一番最初の行に?を使った設定(例えば???=111)を書いてしまうと、 後の行に、どんな設定を書いたとしても、その設定が動作に反映されなくなってしまいます。注意してください。
作成したcustom logicを使う-4進アップカウンタ
多数決回路と同じ手順で、4進アップカウンタを使ってみます。
多数決回路と同様に、追加したcustom logicと論理入力・論理出力・クロックの部品を使って下の図のような回路を作成します。
(回路データは、ここの「4進アップカウンタ(customlogic).txt」からダウンロードできます。)
シミュレーションを実行すると、前回作成した4進アップカウンタと同じ動作をしていることが分かります。
custom logicで7セグメントデコーダーを作ってみる
これで、custom logicの解説は終わりました。ここからは、複雑な回路である7セグメントデコーダー
をcustom logicで作成してみます。
7セグメントデコーダーって?
文章で長々説明するより、図を見たほうが早いでしょう。Circuit Simulator Appletの画面上部にある、Circuitsをクリックして、Combinational Logic-7 Segment LED Decoderをクリックすると、 7セグメントデコーダーの回路が表示されます。
この回路は、入力(2進数)の値をディスプレイに表示するものです。ディスプレイの端子a,b,c,d……f,gに1を入力すると、それぞれ対応する部分が点灯する仕組みになっています。
入力とディスプレイの間にある回路が7セグメントデコーダー
です。見るとわかりますが、非常に複雑な回路となっています。これをcustom logicで置き換えます。
7セグメントデコーダーのcustom logicを作る
先に作った例を参考にして、7セグメントデコーダーのcustom logicを作ります。
詳細な作り方は、多数決回路と4進アップカウンタの例を参考にしてください。
見切れていて、図では全て見えませんが、7セグメントデコーダーのDefinitionは、下のようになっています。
0000=1111110 0001=0110000 0010=1101101 0011=1111001 0100=0110011 0101=1011011 0110=0011111 0111=1110000 1000=1111111 1001=1110011 ????=0000000
0~9のいずれでもないときは、消灯するように設定しています。
11行もあって、複雑そうに見えますが、入力が0000(0)のとき、出力はこう、入力が0001(1)のとき、出力はこう……というのを設定しているだけです。
パターンとしては、多数決回路に似ています。
作成したcustom logicをもともとある7セグメントデコーダーに置き換えて動かしてみます。
(回路データは、ここの「7セグメントデコーダー(customlogic).txt」からダウンロードできます。)
元々の7セグメントデコーダーと同じように動作していることが分かります。
次回予告
今回のcustom logicの解説は、難しかったと思います。慣れてくれば簡単なのですが……
参考文献の公式マニュアルには、様々な回路が載っているので参考にしてください。
次回は、電圧の波形を音声にして実際に聞くことができる部品Audio Input/Audio Outputを紹介します。
う-ん、よく分からん!
この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。
参考文献
CircuitSimulatorApplet 全電子部品対訳表
CircuitSimulatorApplet上に表示される電子部品の名前は、全て英語です。
英語で書かれた電子部品の名前を見て、すぐに実際の電子部品が思い浮かぶ人はいいかもしれませんが、そうでない人が大半でしょう。
下の記事では、CircuitSimulatorAppletにある全ての部品の日本語訳を載せてあります。
「日本語では○○っていう部品なんだけど、英語では何ていうんだろう?」「この部品、CircuitSimulatorAppletのどこにあるんだ?」という時にお使いください。
Custom Logic
Custom Logicの公式マニュアルです。
いくつかの、ここで取り扱っていない回路の例が出ています。
http://www.falstad.com/circuit/customlogic.htmlwww.falstad.com
いい加減な説明も時には大事
「SSDってなに?」「クラウドって最近よく聞くけど、何なの?あれ」――あなたなら、この疑問、どう答えますか?
「ねぇ、CPUってなに?」
あなたの家族でも、友達でも構いません。あまりITに詳しくない人がこう聞いてきたら、あなたは何と答えますか?
正確に説明する
試しに、ウィキペディアの情報を参考にして説明してみます。
ja.wikipedia.org
CPUっていうのは、中央処理装置の略で、プログラムを読み込んで、実行する部品のことだよ。
CPUの説明としてあってはいます。そして、正確です。ですが、
- 中央処理装置
- プログラム
- 実行
という言葉の意味が分からないと、理解するのは難しいでしょう。では、プログラムの実行の仕組みから、丁寧に説明してみればいいのではないでしょうか。 やってみましょう。
コンピューターっていうのは、人が「あれこれ」命令しないと、動かない機械なんだよ。 で、その命令を集めたデータを「プログラム」っていうの。そして、そのプログラム、命令をもとにディスプレイとか、スピーカーとかに具体的な指示を出したり、計算、例えば足し算とかをする部品のことを「CPU」っていうんだよ。
この説明であれば、ひとまず「プログラム」や「プログラムが実行される仕組み」を理解できるでしょう。
……が、本当にITのことを全く知らない人にこれを話して、一発で理解してもらうことができるでしょうか。一回説明して、図を書いて、説明して…… を何回も何回も繰り返して、やっと理解してもらえるかどうかというところでしょう。
よくわかりやすい説明をする方法として、「専門用語を使わない」という方法がありますが、そうすると、説明の分量が多くなってわかりにくくなってしまうのです。 かといって、専門用語の意味が分からずに、わかりにくい説明になってしまうのは、先の例でみたとおりです。
正確な説明は本当に必要?
CPUの説明の例でみてきたように、正確にわかりやすく説明しようと思えば説明の分量が多くなりますし、かといって簡潔に説明しようと思えば、 専門用語が多くなって、こちらもわかりにくい説明になってしまいます。
正確な説明――これをやめない限り、ITのことを全く知らない人にわかりやすく説明することはできないのです。
というより、本当に正確な説明は求められているのでしょうか。 ITのことを全く知らない人が、IT関連のことを質問する、理解しなければならない場面というのは、
- ニュースなどで聞いて単純に興味があった
- (例えば親に)パソコンのパーツを買うためのお金をもらいたいとき
- パソコンの設置や増設、設定の変更などで、上司や先生に許可をもらうとき
のように、一から十まですべて理解してもらう必要がない場合が大半です。
極端な話、相手に「なるほど、よくわかった」と言ってもらえば、それでいいのです。
そもそも、5分から10分、せいぜい数十分で、正確でわかりやすい説明をすることは不可能なのです。 説明を短くしようと思えば、どうしても正確性を犠牲にする必要があります。
わかった気にさせる説明
先ほども話した通り、相手に「なるほど、よく分かった」と言ってもらうことが重要です。 つまり、「正確でわかりやすい説明」ではなく「わかった気」にさせる説明をする必要があります。
試しに、CPUの例で、「わかった気」にさせるような説明をしてみましょう。
CPUっていうのは、人間でいう頭脳にあたるの。要するに、コンピューターの脳みそ。脳みそだから、この部品で、ゲームを動かしたり、Windowsを動かしたりしてるんだよ。 人間でも、脳みそで考えたり、計算したり、してるでしょ?
どうでしょう。わかりやすく丁寧に説明したものより、格段にわかりやすくなっているのではないでしょうか。「人間」や「脳みそ」といった、誰でもすぐに思い浮かぶ例を使ってCPUの動作を説明しています。 もちろん丁寧に説明したものと比べて、正確性には欠けますが、それでも「なるほど、分かった」と言ってもらう分には十分でしょう。
分かった気にさせる説明をするコツとして、次の二つが挙げられます。
- 誰でもすぐにイメージできるような例えを使う
- 話を極端に単純にする
CPUの例で見てみると「人間の頭脳、脳みそ」という誰でもイメージできるような例を使っています。また、実際のCPUの動作は複雑ですが、ここでは「人間と同じように、コンピューターも計算したり、考えたりできる」という風に説明しています。
分かった気にさせる説明をもっと見てみる
分かった気にさせる説明をもっと見たい方は、以下のサイトをご覧ください。
多くのIT用語の説明が載っています。説明の方法も参考になるはずです。
https://wa3.i-3-i.info/wa3.i-3-i.info
注意!!
分かった気にさせる説明は、その名の通り分かった気にさせるだけです。
その内容を深く理解していないとまずい人(例えば、プログラマー・パイロットなどの専門職や、その内容に関する内容を学んでいる学生)に対しては、分かった気にさせる説明をしてはいけません。
分量が多くなって、分かりにくくなってしまったとしても、丁寧で正確な説明をするべきです。
【第6回】デジタル回路をシミュレートしてみよう!
今回は、デジタル回路のシミュレーションを行っていきます。
デジタル回路で使う部品
CircuitSimulatorAppletでは、前回作成したトランジスタやオペアンプなどのアナログ回路の他に、デジタル回路を作ることが出来ます。
カウンタなど、順序回路を作るときに使うフリップフロップも各種用意されます。
入力端子の数
AND・OR・XORの入力端子の数は、自由に設定することができます。
入力端子の数を変更するには、変更したい部品を右クリックし、Editをクリックして編集画面を開き、# of Inputs
に入力端子の数を入力します。
デフォルトの端子数は2であるため、図には# of Inputs
に2が入力されています。
NOT・AND・XOR・ORは、Logic Gates,Input and Outputから、フリップ・フロップは、Digital Chipsから追加出来ます。
0や1の入力・表示は、Logic Gates,Input and Output - Add Logic InputとLogic Gates,Input and Output - Add Logic Outputから追加することが出来ます。
多数決回路
下の図の回路を作成します。図を見ながら回路を自分で作成してもいいですし、下のリンクから、多数決回路.txtをダウンロードして、読み込んでも構いません。(読み込み方は、第2回をご覧ください。)
回路データへのリンク
左側の入力の値は、クリックすることで変更できます。
回路を動かしてみる
この回路は、入力のHの数がLの数よりも大きいとH、Lの数がHの数よりも大きいとLを出力する回路です。
いろんな入力を試してその通りになっているか、確かめてみましょう。
カウンタ回路
下の図の回路を作成します。図を見ながら回路を自分で作成してもいいですし、下のリンクから、4進アップカウンタ.txtをダウンロードして、読み込んでも構いません。(読み込み方は、第2回をご覧ください。)
回路データへのリンク
出力の表示をH・Lから、1・0表示に変更するには、出力の編集画面でNumericにチェックを入れます。
デジタル回路でよく用いる、クロック発生源は、Inputs and Sources-Add Clockから追加できます。
回路を動かしてみる
上の図の回路は、クロックが立ち上がるたびに、出力が00→01→10→11→00……と変化していく4進アップカウンタです。
シミュレーションを実行すると、00→01→10→11→00……と変化しているのがわかります。
フリップ・フロップには、クロックが立ち上がったときに動作するものと、逆に下がったときに動作するものが存在します。
前者をポジティブエッジ型、後者をネガティブエッジ型と言いますが、CircuitSimulatorAppletでは、フリップ・フロップのEdit画面のPositive Edge Triggeredで、ネガティブエッジ型にするか、ポジティブエッジ型にするか選ぶことが出来ます。
Positive Edge Triggeredにチェックをつけると、ポジティブエッジ型に、チェックを付けないとネガティブエッジ型になります。
タイムチャートを作る
クロックと二つの出力を縦に積んで表示した、いわゆるタイムチャートを表示させます。CircuitSimulatorAppletでは、表示した波形を縦に積む機能があるため、それを使ってタイムチャートを作成します。
波形を表示する
タイムチャートにする波形を全て表示させます。この時、タイムチャートで上の方に表示させたい波形から、表示させる必要があります。
タイムチャートで、波形1,波形2,クロックと上から表示させたい場合、波形も波形1,波形2,クロックの順で表示させる必要があります。
今回は、2ケタ目,1ケタ目,クロックの順でタイムチャートを表示させたいため、2ケタ目,1ケタ目,クロックの順で波形を表示させます。
波形を表示させる方法は、第2回を見てください。
クロックは、初めの状態では、電圧と一緒に電流も表示されています。電流の上でRemove plot
を押して、電流の値を表示させないようにしてください。(詳しくは、第4回をご覧ください。)
全ての波形を説明通り表示させると、下のような表示となるはずです。
波形を積み重ねる
一番右の波形で右クリックし、stackをクリックします。
すると、下の図のように、1ケタ目とクロックの波形が積み重なって表示されます。
同様に、一番左の波形で右クリックし、stackをクリックすると、下の図のようなタイムチャートが表示されます。
次回予告
CircuitSimulatorAppletには、基本的なデジタル回路の部品は存在します。ですが、カウンタや多数決回路といった回路を作るには、たくさんの部品を組み合わせる必要があります。回路の仕組みを知りたい場合はそれでもいいかもしれませんが、手っ取り早く回路を作りたい場合は不便です。
そこで、CircuitSimulatorAppletにはcustom logicという部品があるのですが……詳しくは次回。
う-ん、よく分からん!
この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。
参考文献
CircuitSimulatorApplet 全電子部品対訳表
CircuitSimulatorApplet上に表示される電子部品の名前は、全て英語です。
英語で書かれた電子部品の名前を見て、すぐに実際の電子部品が思い浮かぶ人はいいかもしれませんが、そうでない人が大半でしょう。
下の記事では、CircuitSimulatorAppletにある全ての部品の日本語訳を載せてあります。
「日本語では○○っていう部品なんだけど、英語では何ていうんだろう?」「この部品、CircuitSimulatorAppletのどこにあるんだ?」という時にお使いください。
多数決回路
本文中の多数決回路は、以下のサイトの回路を使用しました。 nw.tsuda.ac.jp
4進アップカウンタ
本文中の4進アップカウンタは、以下のサイトの回路を使用しました。 home.a00.itscom.net
素材ライセンスチェッカー試作版公開!
意外と地味に面倒な、素材のライセンス管理。
そんなライセンス管理を肩代わりするソフト――の試作版を公開しました。
素材ライセンスチェッカーって何だ?
ソフトに登録された、画像・効果音・BGM……といった素材のライセンスを自動的に管理します。
今までのように、手動でライセンスをいちいち確認する必要はありません!
もう少し詳しく
ソフトウェアを作るには、どうしてもイラストや音楽といった他の人が作った素材が必要になります。
「いや、俺は全部自分で作るんだ!」と意気込んでも……膨大な作業量に圧倒されることでしょう。
幸いにも、今は無料で素材を配布してくださる方が多くいらっしゃいます。 ですが、他の人が作った素材ですから、「利用規約」というものを守らないといけません。例えば次のようなものです。
当サイトで配布している素材を用いる際には、クレジット等に「サイト名」と「サイトのURL」を必ず記載してください。
使用する素材は、一作品につき50点までです。
この利用規約というのは、サイトごとで違う内容になっています。使っている素材配布サイトが一つだけなら、まだ人力で管理できるかもしれませんが、5,10……と増えていくと、もう人力で管理するのは、不可能に近くなります。
具体的に言うと、次のようなことが起こるでしょう。
- 今どの素材配布サイト使ってるんだっけ?
- あれ?確か、この素材配布サイト何か禁止事項書いてあった気がするけど……何だっけ?
- えーと、このサイトは「サイト名」と「URL」記載必須?で、このサイトは「名前」と「URL」記載必須?――あぁぁぁ!面倒くさーい!!
- ……本当に利用規約守って使ってるよな?大丈夫だよな?素材の数多すぎて、もうわけわからん。
このような面倒を解決するのが素材ライセンスチェッカーです。
まだ、完成していない!?
このソフトはまだ完成していません。試作版としての公開となります。
ダウンロードは、下のリンクから出来ます。
www.vector.co.jp
注意:現在のバージョン(prototype-final)で、素材を追加ウィンドウ中の参照ボタンを押してファイルを選択しても、テキストボックスに何も入力されないバグがあります。本バージョンでは、この項目の内容は動作に影響を与えないため、適当な値を入力してください。
現時点での最新版をダウンロードしたい方や、ソフトを使ってみて意見や要望がある方は、下のリンクからどうぞ。
【第5回】トランジスタとオペアンプをシミュレーションしてみる
今回は、トランジスタとオペアンプを使った回路をCircuitSimulatorAppletでシミュレーションしていきます。
- CircuitSimulatorAppletにあるトランジスタ
- CircuitSimulatorAppletにあるオペアンプ
- トランジスタを使ってみる
- オペアンプを使ってみる
- 回路集
- 次回予告
- う-ん、よく分からん!
- 参考文献
- 反転増幅回路
CircuitSimulatorAppletにあるトランジスタ
CircuitSimulatorAppletには、様々な種類のトランジスタが存在します。
すべてのトランジスタの使い方について、解説したいところですが、今回はバイポーラトランジスタを使った回路だけ作成します。
NPN型のバイポーラトランジスタは、Active Components-Add Transistor(bipolar,NPN)をクリックすると追加出来ます。
CircuitSimulatorAppletにあるオペアンプ
CircuitSimulatorAppletに存在するオペアンプには、以下の二種類があります。
現実のオペアンプは、実在するオペアンプをモデルにして作成しているようですが、どの程度正確にシミュレーションしているか分からない上に、モデルが現時点(2020年8月21日)で二種類しか選択できないため、使用しないほうがいいでしょう。正確なシミュレーション結果が欲しい場合は、LTspiceを使ったほうが正確な結果が得られます。
CircuitSimulatorApplet上の理想オペアンプは、一般的に言われる理想オペアンプと同じ特性を持っています。
ただ、コンピューター上で無限大の利得を表現することは出来ません。理想オペアンプの編集画面には、利得(Gain)を入力する欄があります。ここに、無限大の利得といってもいいほどの利得を入力しておけば、利得が無限大のオペアンプをシミュレーションすることが出来ます。(下の図はデフォルトの値です。100kは10万倍を表しますから、利得の値を変更する必要はないでしょう。)
現実のオペアンプは、Active Building Blocks-Add Op Amp(real)から、理想のオペアンプは、Add Op Amp(ideal -on top)から追加することが出来ます。【Add Op Amp(ideal +on top)との違いは、端子の位置のみ。】
トランジスタを使ってみる
トランジスタを使って、簡単なシミュレーションをしてみましょう。
下の回路を作成します。回路は、自分で作成してもいいですし、下のリンクの「電流帰還バイアス回路」からダウンロード出来る回路データを使っても構いません。
回路上の方にある一端子の電源は、Inputs and Source - Add Voltage Source(1-terminal)から追加できます。
トランジスタのhFEにスライダーを設定し、シミュレーション中にhFEを自由に変えられるようにします。範囲は100~1000までとしておきます。
上の回路は「電流帰還バイアス回路」といい、トランジスタのhFEが変化してもコレクタ電流の変化をほぼ無くすことが出来る回路です。
上で作成した回路では、トランジスタのhFEの値をスライダーで自由に変えられるようにすることで、hFEの値が変化しても、本当にコレクタ電流の値が変化しないか確かめます。
実行結果
下の図は、hFEを100から1000に変化させたときの、コレクタ電流の変化の様子です。
hFEの値が10倍になっても、0.07mA程度しか変化していないのが分かります。
オペアンプを使ってみる
オペアンプを使って「反転増幅回路」を作成します。
回路は、自分で作成してもいいですし、下のリンクの「オペアンプ反転増幅回路」からダウンロード出来る回路データを使っても構いません。
上の回路は、60Hzの交流信号を2倍に増幅する回路です。スライダーを使って、入力信号の振幅を調整できるようにしてあります。
入力信号の振幅は、0~20Vの範囲で調整可能なようにしてあります。
本回路の電圧計は、電圧の値ではなく、電圧の最大値を表示させています。電圧の最大値を表示させるには、電圧計の編集画面を開き、Valueを選択してMaxVoltageをクリックします。
オペアンプの編集画面
MaxOutputは、オペアンプが出力できる最大電圧を表します。MinOutputは、出力できる最小電圧を表します。
Gainは、オペアンプの利得を表します。
今回は、全てデフォルトの値となっています。
実行結果
入力信号の振幅をスライダーで変化させて、出力電圧がどうなるか見てみましょう。
下の図は、振幅を色々な値にしたときの、出力電圧と入力電圧の波形です。
赤色の波形は、入力電圧を、緑色の波形は出力電圧を示しています。
だいたい上手くいっているようですが、一部緑色の波形の頂点が平らになっているところがあります。
これは、入力波形の振幅を増幅した値が、オペアンプの編集画面で設定した出力の最大値・最小値である、±15Vを超えてしまったためです。
回路集
CircuitSimulatorAppletには、数十種類以上の回路が予め登録されています。
登録されている回路を見るには、画面上部のCircuitsをクリックして、見たい回路をクリックします。
試しに、Op-Amps - Full-Wave Rectifierを開いてみましょう。(全波整流回路)
全波整流回路の回路が表示されます。シミュレーションを実行してみると、右下のoutputと書かれているところに全波整流された波形が見えます。
これ以外にも、様々な回路が登録されています。
次回予告
今回は、前回までと比べてあっさりとした内容となりました。
次回は、AND回路やOR回路、フリップフロップなどを使って簡単なデジタル回路をシミュレーションしてみます。
う-ん、よく分からん!
この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。
参考文献
CircuitSimulatorApplet 全電子部品対訳表
CircuitSimulatorApplet上に表示される電子部品の名前は、全て英語です。
英語で書かれた電子部品の名前を見て、すぐに実際の電子部品が思い浮かぶ人はいいかもしれませんが、そうでない人が大半でしょう。
下の記事では、CircuitSimulatorAppletにある全ての部品の日本語訳を載せてあります。
「日本語では○○っていう部品なんだけど、英語では何ていうんだろう?」「この部品、CircuitSimulatorAppletのどこにあるんだ?」という時にお使いください。
電流帰還バイアス回路
以下のpdfのp259~p261より一部改変して引用。
http://doku.bimyo.jp/electronics/ShoddyElectronics882.pdf
反転増幅回路
以下のpdfのp135より引用。
http://doku.bimyo.jp/electronics/ShoddyElectronics882.pdf
【第4回】オシロスコープの使い方を詳しく解説!
CircuitSimulatorAppletには、電圧や電流などをグラフにして表示する機能があります。
既に軽くグラフの機能について触れていますが、今回は詳しく説明していきます。
更新履歴
- 2020/09/26:文章で存在しないアニメーションを指定していたため、その部分を削除
- 更新履歴
- 試してみる
- LPF(ローパスフィルタ)とは?
- LPFの動作を理解する
- 計測してみる
- 位相差を計測する
- コラム:あの式をどうやって導出したのか
- 今回使用した回路
- 次回予告
- う-ん、よく分からん!
- 参考文献
試してみる
下のリンクから、CircuitSimulatorAppletを実行出来ます。料金や会員登録は必要ありません。
http://www.falstad.com/circuit/circuitjs.htmlwww.falstad.com
LPF(ローパスフィルタ)とは?
今回、CircuitSimulatorAppletでLPF(ローパスフィルタ)をシミュレーションしていきますが、ここで軽くLPFについて説明しておきます。
LPFとは、簡単に言うと「低い周波数だけを通すフィルタ」のことです。
LPFに入力する周波数を上げていくと、出力される波形の振幅が小さくなっていきます。
LPFは様々な方法で作ることが出来ますが、今回は抵抗とコンデンサを組み合わせたシンプルなLPFをシミュレーションしていきます。
LPFの動作を理解する
下の図のような回路を作成します。
抵抗の値は1kΩ、コンデンサの値は10μF、周波数は10Hzから200Hzの範囲で変化させています。
交流電源を追加するには、Input and Sources-A/C Voltages Sources(2-Terminal)をクリックします。
回路が完成したら、周波数のスライダーを動かしてみましょう。
周波数を高くしていくと、コンデンサにかかる電圧(右側のグラフ)が低くなっているのが分かるでしょうか。
下の図は、時間とともに入力信号の周波数を上げていったときの、出力電圧の変化を示したグラフです。
計測してみる
電流のグラフを消す
今回計測したいのは、入力信号と出力信号の電圧です。
そのため、電流の値を計測する必要はありませんが、最初の状態では、電圧と電流が両方表示されています。
CircuitSimulatorAppletには、どちらかのグラフを消す機能があります。
電流のグラフを削除するには、電流のグラフにマウスが当たっている(電流の値が表示されている)状態で、右クリックしRemove Plot
をクリックする必要があります。
入力信号・出力信号、両方のグラフの電流のグラフを削除しておきましょう。
最大値を表示する
CircuitSimulatorAppletのグラフ機能を使って、入力の周波数がある値のとき、出力の最大値は、入力の最大値の何倍になっているのか、計測したいと思います。
グラフを直接読み取って、最大値を求めてもいいのですが、グラフのプロパティを開いてShow Info-Show Peak Valueにチェックを入れると、グラフの左上に最大値が表示されます。
グラフのプロパティは、グラフで右クリックしてProperties...をクリックすると表示出来ます。
入力、出力両方のグラフの最大値を表示させておきましょう。
やってみる
入力信号の周波数を28Hzと158Hzに設定して、計測してみます。(なんでこの値にしたかって? 倍率がキリのいい値になるようにがんばって計算したんです...)
入力周波数を変更するには、交流電源のEditメニューを開き、Frequencyに設定したい周波数を入力します。
28Hzと設定したいため、Frequencyに28と入力します。
シミュレーションを実行します。周波数が変わってしばらくは、最大値が変動するため、落ち着くまで待ちます。
値の動きが落ち着くと、下の画像のような値が表示されます。
上の図は入力信号の最大値、下の図は出力信号の最大値を表しています。
(手順通りに作業を進めていれば、左側に表示されているグラフが入力信号、右側に表示されているグラフが出力信号となっているはずです。)
出力電圧の最大値/入力電圧の最大値で、出力が入力の何倍か求めることが出来ます。
上の図の値で計算すると、2.471÷5=0.4942(倍)ですから、おおよそ0.5倍となっていることが分かります。
同様のことを、158Hzでも行います。
周波数を158Hzに変更してください。
最大値がグラフ上に表示されます。
出力最大値の単位が[mV]であることに注意して計算すると、501.118/5000=0.1002236(倍)となります。おおよそ0.1倍になっていることがわかります。
波形を見やすくする
周波数が高くなってくると、下の図のように波形が混みあって見づらくなる時があります。
そのような場合、グラフのプロパティ画面にある「Scroll Speed」を変更すると見やすくなります。
スクロールバーの右側に書かれている「1ms/div」というのは、「グラフの一マスを1ms(ミリ秒)にしている」という意味です。
位相差を計測する
最後に、入力信号と出力信号の位相差を計測してみます。
そのためには、入力信号と出力信号の二つのグラフを一つにまとめる必要があります。
入力信号・出力信号、どちらかのグラフの上で右クリックし、Combine
をクリックしてください。
すると、二つのグラフが一つのグラフにまとまって表示されます。
今回は、入力信号の周波数が10Hzの時の位相差を計測してみます。
周波数を10Hzに設定してください。
続いて、二つの電圧のグラフが同じ値であるとき、二つのグラフが何マス離れているか計測します。
マス目を数えるときに、マス目が小さくて見づらい場合は、下のアニメーションのようにグラフを拡大することが出来ます。
位相差を計算するためには、「一マスが何秒の経過を示しているのか」ということを知る必要があります。この値は、先ほど表示した「Scroll Speed」の値です。
今回は、1ms/divで計測しています。
以上、入力・出力信号の周波数・一マスの秒数・マス目の数が求まりました。ここから、次の式で位相差を計算することが出来ます。
ただし、入力・出力信号の周波数をf[Hz],一マスの秒数をt[s],マス目の数をn[個],位相差をθ[°]とします。
この式に先ほど計測した値を代入します。(一マスの秒数の単位が[s]になっていることに注意が必要です。)
おおよそ位相差が45°になることがわかりました。
コラム:あの式をどうやって導出したのか
本文中で、入力・出力信号の周波数・一マスの秒数・マス目の数から位相差を求める式を紹介しました。簡単な計算で求めることが出来ますが、一応導出する方法を書いておきます。
詳しく知りたい方だけ、下のリンクからGoogleDriveに飛び、「式導出方法.pdf」というファイルをダウンロードしてください。 読まなくても、今後扱う内容は理解できます。
今回使用した回路
今回使用した回路を.txt形式で配布します。
以下のリンクから、GoogleDriveに移動し「配布する回路.txt」をダウンロードしてください。
ファイルをCircuitSimulatorAppletに読み込ませる方法は、本連載第2回を参考にしてください。
次回予告
今回で、CircuitSimulatorAppletの基本的な使い方は解説し終わりました。
次回からは、トランジスタやオペアンプ、デジタル回路など様々な部品を使って色々な回路を作成していきたいと思います。
う-ん、よく分からん!
この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。
参考文献
CircuitSimulatorApplet 全電子部品対訳表
CircuitSimulatorApplet上に表示される電子部品の名前は、全て英語です。
英語で書かれた電子部品の名前を見て、すぐに実際の電子部品が思い浮かぶ人はいいかもしれませんが、そうでない人が大半でしょう。
下の記事では、CircuitSimulatorAppletにある全ての部品の日本語訳を載せてあります。
「日本語では○○っていう部品なんだけど、英語では何ていうんだろう?」「この部品、CircuitSimulatorAppletのどこにあるんだ?」という時にお使いください。
LPFについて
【第3回】スライダーを使って回路の動きを見よう!
CircuitSimulatorAppletでは、スイッチをクリック一つで動作させたり、抵抗の値をシミュレーション中に変更することが出来る機能が備わっています。
今回は、それらの機能を使ってみましょう。
試してみる
下のリンクから、CircuitSimulatorAppletを実行出来ます。料金や会員登録は必要ありません。
http://www.falstad.com/circuit/circuitjs.html
その前に(RESETボタン)
前回Run/Stopボタンの使い方を解説しましたが、その隣にResetボタンがあったのを覚えているでしょうか。
Resetボタンは文字通り、回路を一度リセット(初期状態に戻す)時に使います。以下実際の回路とともに、使い方を見ていきましょう。
回路を組んで実行
下の抵抗・電池・コンデンサ・スイッチが接続されている回路を作成してみましょう。
部品の配置方法など詳しいことは前回の記事をご覧ください。
コンデンサは、「Passive Components-Capatitor」を、スイッチは「Passive Components-Switch」を選択することで追加できます。
今回も前回と同様、作成までのアニメーションを作成しました。参考にしてください。
作成した回路には、スイッチが二つ付いています。
これらのスイッチを両方ともONにすると、「Voltage source/wire loop with no resistance!」というエラーメッセージが表示されて、シミュレーションが止まってしまいます。
エラーメッセージの内容通り、回路をショート(短絡)させてしまったときに表示されるエラーです。
シミュレーションを再開させるには、短絡状態でなくする、この回路だとどちらかのスイッチをOFFにする必要があります。
回路図が作成出来たら、シミュレーションを実行する前に右側にあるスイッチをOFF、左側にあるスイッチをONにしてください。
スイッチのON・OFFは、上のアニメーションにある通りクリックで切り替えることが出来ます。
また、コンデンサで右クリックし「View in Scope」をクリックし、グラフを表示させてください。(これでコンデンサに流れる電流と電圧が時間とともにどのように変化するか、分かります。)
RUN/STOPボタンを押して、シミュレーションをしばらく実行させると、次のようなグラフが描かれるはずです。
グラフの縦軸は電流や電圧の値、横軸はシミュレーション開始からの時間を、表しています。
今回のグラフでは、黄色い線がコンデンサに流れる電流、緑の線がコンデンサにかかっている電圧を表します。
コンデンサに流れる電流は時間とともに小さくなっていますが、電圧は逆に時間とともに大きくなっているのが分かります。
ある点の具体的な経過時間が見たい場合は、グラフにマウスを当てると表示されます。
コンデンサの放電
先ほど見た現象は、いわゆるコンデンサの充電と言われるものです。
次は、コンデンサの放電をシミュレートしてみましょう。
左側のスイッチをOFF、右側のスイッチをONの状態にしてください。
次のようなグラフが描かれるはずです。
RESETボタンを押す
以上の操作を行ったら、右側のスイッチをON、左側のスイッチをOFFにして、シミュレーションをしばらく実行し、もう一度コンデンサに電荷をためましょう。
この状態でRESETボタンを押すとどうなるのでしょうか。
押してみましょう。
一見何も変わりないようですが、右側のスイッチをOFF、左側のスイッチをONにしてコンデンサの放電を行ってみましょう。
コンデンサに電流が流れていません。
コンデンサに溜められていたはずの電荷が、RESETボタンを押したことによって、無くなったのです。
RESETボタンを押すと、回路の状態が初期状態にリセットされることが分かったでしょうか?
可変抵抗とLED
CircuitSimulatorAppletには、LEDという部品が存在し、LEDに電流を流せば、実際にLEDが光る様子を見ることが出来ます。
回路を作って、とりあえずLEDを光らせてみましょう。
実際の回路では、抵抗の値を適当に決めてはいけません。
LEDの順方向電圧などから計算によって求める必要があります。
分かっている方が大半だと思いますが、念のため注意を書いておきます。
今回作る回路は、下の図のような回路です。
LEDは、「Outputs and Labels-LED」にあります。
値を変更する
上のアニメーションでも行っていますが、部品の上で右クリックし「Edit」と書かれたメニューを選択すると、次のような画面が表示されます。
「Resistance(ohms)」に「100」と入力して、「OK」をクリックしてください。これで抵抗の値が変更されます。(単位を入力する必要はありません。)
今回は、100Ωという値を入力しましたが、2.2kΩや10MΩといったSI接頭語も入力することが出来ます。
下の表にCircuitSimulatorAppletで使用可能な、SI接頭語とそのリストを掲載しておきます。(これ以外にも、SI接頭語はありますが、CircuitSimulatorAppletで使えるのは、下の表に挙げたものだけです。)
接頭語 | ソフト上での記号 | 例 |
---|---|---|
G(ギガ) | G | 3G(V) |
M(メガ) | M | 3M(Ω) |
k(キロ) | k | 3.3k(Ω) |
m(ミリ) | m | 3m(A) |
μ(マイクロ) | u | 3u(F) |
n(ナノ) | n | 100n(F) |
p(ピコ) | p | 15p(A) |
先ほどの抵抗の例で、2.2kΩと入力したければ、「2.2k」と入力すればいいことになります。
RUN/Stopボタンを押して、シミュレーションを実行してください。上手くいっていれば、下のアニメーションのようにLEDが赤く光るはずです。
Editは、抵抗だけでなくCircuitSimulatorApplet上にある大半の部品で表示させることが出来ます。
「この部品の値をいじりたい」と思ったら、まずはEditをクリックしてみるといいでしょう。
スライダーとは?
今作成した回路にはLEDと直列に抵抗が接続されています。この抵抗の値をもっと楽に変える方法はないのでしょうか。
CircuitSimulatorAppletには、スライダーを使ってシミュレーション実行中に値を変えられる機能が備わっています。
スライダーを追加する
抵抗の上で、右クリックして表示されたメニューのうち「Sliders…」をクリックしています。
すると、部品のどの項目に対してスライダーを追加するかを選択する画面が表示されます。
Resistance(ohms)にチェックを入れると「スライダーの最小値(Min Value)」と「スライダーの最大値(Max Value)」と「スライダーの名前(Label)」を入力するところが表示されます。
MinValueとMaxValueはそのままで、Label(スライダーの名前)だけ「無抵抗」という名前に変えてみましょう。(スライダーの名前には日本語も入力することが出来ます。)
画面の右側に「無抵抗」という名前のスライダーが表示されました。
このスライダーを動かすと、抵抗の値が変わっているのが確認できます。
スライダーの機能が使えるのは、抵抗だけではありません。コンデンサ・コイル・LED・トランジスタ……といった部品でもスライダーの機能を使うことが出来ます。
スライダーはシミュレーション実行中にも使うことが出来ます。
回路の勉強をしているとき「ここの部品の値を変えたらどうなるのだろう」という疑問がよく浮かぶものです。そんな時スライダーを使えば、直感的に回路の動作を調べることが出来ます。
次回予告
今回までは、直流回路のシミュレーションしか行ってきませんでした。
しかし、CircuitSimulatorAppletでは交流回路のシミュレーションも行うことが出来ます。
次回は、コンデンサやコイルが接続された交流回路のシミュレーションを行います。
う-ん、よく分からん!
この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。
参考文献
CircuitSimulatorApplet 全電子部品対訳表
CircuitSimulatorApplet上に表示される電子部品の名前は、全て英語です。
英語で書かれた電子部品の名前を見て、すぐに実際の電子部品が思い浮かぶ人はいいかもしれませんが、そうでない人が大半でしょう。
下の記事では、CircuitSimulatorAppletにある全ての部品の日本語訳を載せてあります。
「日本語では○○っていう部品なんだけど、英語では何ていうんだろう?」「この部品、CircuitSimulatorAppletのどこにあるんだ?」という時にお使いください。