【第7回】複雑なデジタル回路も一瞬で!――Custom Logic徹底解説

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp

なぜ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の図

追加した、custom logicのEdit画面を開きます。すると、下のような画面が表示されます。

custom logicのEdit画面

Model Nameには、これから作成する回路に対してつける名前を入力します。 ここでは、MajorityCircuitという名前を付けています。

続いて、Edit Modelをクリックします。
この画面で、モデル(自分が作りたいデジタル回路)を作成していきます。
Edit Modelをクリックして表示される画面

Edit Model

名前の通り、Inputs・Outputsには、それぞれ入力端子・出力端子の名前をカンマ区切りで入力します。
これらの名前は、下の図のように表示されます。
customlogic完成後の図

Info Textは、作成したcustom logicにマウスを当てた時に画面右下に表示される文章を入力します。
今回は、MajorityCircuitと入力しています。

Info Textが表示されている図

Definition

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を出力する」という意味になります。

Column:Definitionの優先順位

011=1,011=0のように矛盾した設定を一つのDefinitionに書くと、どうなるのでしょうか。 custom logicでは、先に書いた設定が優先される決まりになっています。 多数決回路で挙げた例でも、①~④と⑤の設定が矛盾していますが、先に書いた設定が優先されるため、入力が011,101,110,111のときは、⑤の条件が当てはまっていたとしても1が出力されます。

これで多数決回路を作成できました。OKボタンを押して、作成を完了しましょう。

作成したcustom logicを使う-多数決回路

では、作成したcustom logicを使ってみましょう。
追加したcustom logicと論理入力・論理出力の部品を使って下の図のような回路を作成します。

(回路データは、ここの「多数決回路(customlogic).txt」からダウンロードできます。)

回路図

回路作成アニメーション

シミュレーションを実行すると、前回作成した多数決回路と同じ動作をしていることが分かります。

多数決回路がHになっている

多数決回路がLになっている

4進アップカウンタを作る

続いて前回作成した4進アップカウンタをcustom logicで作成してみます。
多数決回路と同様、次の手順で、custom logicを作成します。

  1. custom logicを追加する
  2. Model Nameを入力してEdit Modelをクリック
  3. Inputs,Outputs,Info Text,Definitionを入力してOKボタンを押す
  4. custom logicを使う

2の図

Model Nameは、Counterとしています。

3の図

Definitionの説明-4進アップカウンタ

Definitionの説明

多数決回路のときと異なり、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が出力されることになります。

⑤の?は、クロックがどんな状態であっても、という意味を表します。注意が必要なのは、ここでの?には、クロックの立ち上がり・立ち下がりの状態だけでなく、クロックが変化しないという状態も含まれるという点です。(ただ、多数決回路でもやったように、先に書いた設定が優先されるため、⑤での?は「クロックが立ち上がっていなければ」という意味になります。)

結局、⑤の設定は「クロックが立ち上がっていなければ、出力はそのまま」という意味になります。

Column:?の位置に注意!

前のコラム、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セグメントデコーダーの回路が表示されます。

7セグメントデコーダーの図

この回路は、入力(2進数)の値をディスプレイに表示するものです。ディスプレイの端子a,b,c,d……f,gに1を入力すると、それぞれ対応する部分が点灯する仕組みになっています。
入力とディスプレイの間にある回路が7セグメントデコーダーです。見るとわかりますが、非常に複雑な回路となっています。これをcustom logicで置き換えます。

7セグメントデコーダーのcustom logicを作る

先に作った例を参考にして、7セグメントデコーダーのcustom logicを作ります。
詳細な作り方は、多数決回路と4進アップカウンタの例を参考にしてください。

custom logic作成アニメーション

表示させた図

見切れていて、図では全て見えませんが、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セグメントデコーダーの回路

元々の7セグメントデコーダーと同じように動作していることが分かります。

次回予告

今回のcustom logicの解説は、難しかったと思います。慣れてくれば簡単なのですが……
参考文献の公式マニュアルには、様々な回路が載っているので参考にしてください。

次回は、電圧の波形を音声にして実際に聞くことができる部品Audio Input/Audio Outputを紹介します。

う-ん、よく分からん!

この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。

参考文献

CircuitSimulatorApplet 全電子部品対訳表

CircuitSimulatorApplet上に表示される電子部品の名前は、全て英語です。
英語で書かれた電子部品の名前を見て、すぐに実際の電子部品が思い浮かぶ人はいいかもしれませんが、そうでない人が大半でしょう。

下の記事では、CircuitSimulatorAppletにある全ての部品の日本語訳を載せてあります。
「日本語では○○っていう部品なんだけど、英語では何ていうんだろう?」「この部品、CircuitSimulatorAppletのどこにあるんだ?」という時にお使いください。

terapotan.hatenablog.jp

Custom Logic

Custom Logicの公式マニュアルです。
いくつかの、ここで取り扱っていない回路の例が出ています。 http://www.falstad.com/circuit/customlogic.htmlwww.falstad.com

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp

いい加減な説明も時には大事

SSDってなに?」「クラウドって最近よく聞くけど、何なの?あれ」――あなたなら、この疑問、どう答えますか?

「ねぇ、CPUってなに?」

あなたの家族でも、友達でも構いません。あまりITに詳しくない人がこう聞いてきたら、あなたは何と答えますか?

正確に説明する

試しに、ウィキペディアの情報を参考にして説明してみます。
ja.wikipedia.org

CPUっていうのは、中央処理装置の略で、プログラムを読み込んで、実行する部品のことだよ。

CPUの説明としてあってはいます。そして、正確です。ですが、

  1. 中央処理装置
  2. プログラム
  3. 実行

という言葉の意味が分からないと、理解するのは難しいでしょう。では、プログラムの実行の仕組みから、丁寧に説明してみればいいのではないでしょうか。 やってみましょう。

コンピューターっていうのは、人が「あれこれ」命令しないと、動かない機械なんだよ。
で、その命令を集めたデータを「プログラム」っていうの。そして、そのプログラム、命令をもとにディスプレイとか、スピーカーとかに具体的な指示を出したり、計算、例えば足し算とかをする部品のことを「CPU」っていうんだよ。

この説明であれば、ひとまず「プログラム」や「プログラムが実行される仕組み」を理解できるでしょう。

……が、本当にITのことを全く知らない人にこれを話して、一発で理解してもらうことができるでしょうか。一回説明して、図を書いて、説明して…… を何回も何回も繰り返して、やっと理解してもらえるかどうかというところでしょう。

よくわかりやすい説明をする方法として、「専門用語を使わない」という方法がありますが、そうすると、説明の分量が多くなってわかりにくくなってしまうのです。 かといって、専門用語の意味が分からずに、わかりにくい説明になってしまうのは、先の例でみたとおりです。

正確な説明は本当に必要?

CPUの説明の例でみてきたように、正確にわかりやすく説明しようと思えば説明の分量が多くなりますし、かといって簡潔に説明しようと思えば、 専門用語が多くなって、こちらもわかりにくい説明になってしまいます。

正確な説明――これをやめない限り、ITのことを全く知らない人にわかりやすく説明することはできないのです。

というより、本当に正確な説明は求められているのでしょうか。 ITのことを全く知らない人が、IT関連のことを質問する、理解しなければならない場面というのは、

  1. ニュースなどで聞いて単純に興味があった
  2. (例えば親に)パソコンのパーツを買うためのお金をもらいたいとき
  3. パソコンの設置や増設、設定の変更などで、上司や先生に許可をもらうとき

のように、一から十まですべて理解してもらう必要がない場合が大半です。

極端な話、相手に「なるほど、よくわかった」と言ってもらえば、それでいいのです。

そもそも、5分から10分、せいぜい数十分で、正確でわかりやすい説明をすることは不可能なのです。 説明を短くしようと思えば、どうしても正確性を犠牲にする必要があります。

わかった気にさせる説明

先ほども話した通り、相手に「なるほど、よく分かった」と言ってもらうことが重要です。 つまり、「正確でわかりやすい説明」ではなく「わかった気」にさせる説明をする必要があります。

試しに、CPUの例で、「わかった気」にさせるような説明をしてみましょう。

CPUっていうのは、人間でいう頭脳にあたるの。要するに、コンピューターの脳みそ。脳みそだから、この部品で、ゲームを動かしたり、Windowsを動かしたりしてるんだよ。
人間でも、脳みそで考えたり、計算したり、してるでしょ?

どうでしょう。わかりやすく丁寧に説明したものより、格段にわかりやすくなっているのではないでしょうか。「人間」や「脳みそ」といった、誰でもすぐに思い浮かぶ例を使ってCPUの動作を説明しています。 もちろん丁寧に説明したものと比べて、正確性には欠けますが、それでも「なるほど、分かった」と言ってもらう分には十分でしょう。

分かった気にさせる説明をするコツとして、次の二つが挙げられます。

  1. 誰でもすぐにイメージできるような例えを使う
  2. 話を極端に単純にする

CPUの例で見てみると「人間の頭脳、脳みそ」という誰でもイメージできるような例を使っています。また、実際のCPUの動作は複雑ですが、ここでは「人間と同じように、コンピューターも計算したり、考えたりできる」という風に説明しています。

分かった気にさせる説明をもっと見てみる

分かった気にさせる説明をもっと見たい方は、以下のサイトをご覧ください。
多くのIT用語の説明が載っています。説明の方法も参考になるはずです。

https://wa3.i-3-i.info/wa3.i-3-i.info

注意!!

分かった気にさせる説明は、その名の通り分かったにさせるだけです。
その内容を深く理解していないとまずい人(例えば、プログラマーパイロットなどの専門職や、その内容に関する内容を学んでいる学生)に対しては、分かった気にさせる説明をしてはいけません。

分量が多くなって、分かりにくくなってしまったとしても、丁寧で正確な説明をするべきです。

【第6回】デジタル回路をシミュレートしてみよう!

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp

今回は、デジタル回路のシミュレーションを行っていきます。

デジタル回路で使う部品

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を出力する回路です。
いろんな入力を試してその通りになっているか、確かめてみましょう。

出力がHになるとき
出力がLになるとき

カウンタ回路

下の図の回路を作成します。図を見ながら回路を自分で作成してもいいですし、下のリンクから、4進アップカウンタ.txtをダウンロードして、読み込んでも構いません。(読み込み方は、第2回をご覧ください。)
回路データへのリンク

カウンタ回路の図

出力の表示をH・Lから、1・0表示に変更するには、出力の編集画面でNumericにチェックを入れます。

Numericにチェックを入れる

デジタル回路でよく用いる、クロック発生源は、Inputs and Sources-Add Clockから追加できます。

回路を動かしてみる

上の図の回路は、クロックが立ち上がるたびに、出力が00→01→10→11→00……と変化していく4進アップカウンタです。

シミュレーションを実行すると、00→01→10→11→00……と変化しているのがわかります。

Column:ポジティブエッジ・ネガティブエッジ

フリップ・フロップには、クロックが立ち上がったときに動作するものと、逆に下がったときに動作するものが存在します。
前者をポジティブエッジ型、後者をネガティブエッジ型と言いますが、CircuitSimulatorAppletでは、フリップ・フロップのEdit画面のPositive Edge Triggeredで、ネガティブエッジ型にするか、ポジティブエッジ型にするか選ぶことが出来ます。
Positive Edge Triggeredにチェックをつけると、ポジティブエッジ型に、チェックを付けないとネガティブエッジ型になります。

タイムチャートを作る

クロックと二つの出力を縦に積んで表示した、いわゆるタイムチャートを表示させます。CircuitSimulatorAppletでは、表示した波形を縦に積む機能があるため、それを使ってタイムチャートを作成します。

波形を表示する

タイムチャートにする波形を全て表示させます。この時、タイムチャートで上の方に表示させたい波形から、表示させる必要があります。
タイムチャートで、波形1,波形2,クロックと上から表示させたい場合、波形も波形1,波形2,クロックの順で表示させる必要があります。

今回は、2ケタ目,1ケタ目,クロックの順でタイムチャートを表示させたいため、2ケタ目,1ケタ目,クロックの順で波形を表示させます。

各波形の場所

波形を表示させる方法は、第2回を見てください。

クロックは、初めの状態では、電圧と一緒に電流も表示されています。電流の上でRemove plotを押して、電流の値を表示させないようにしてください。(詳しくは、第4回をご覧ください。)

全ての波形を説明通り表示させると、下のような表示となるはずです。

全ての波形

波形を積み重ねる

一番右の波形で右クリックし、stackをクリックします。

stackの場所

すると、下の図のように、1ケタ目とクロックの波形が積み重なって表示されます。
波形が積み重なった

同様に、一番左の波形で右クリックし、stackをクリックすると、下の図のようなタイムチャートが表示されます。

タイムチャートの完成

次回予告

CircuitSimulatorAppletには、基本的なデジタル回路の部品は存在します。ですが、カウンタや多数決回路といった回路を作るには、たくさんの部品を組み合わせる必要があります。回路の仕組みを知りたい場合はそれでもいいかもしれませんが、手っ取り早く回路を作りたい場合は不便です。

そこで、CircuitSimulatorAppletにはcustom logicという部品があるのですが……詳しくは次回。

う-ん、よく分からん!

この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。

参考文献

CircuitSimulatorApplet 全電子部品対訳表

CircuitSimulatorApplet上に表示される電子部品の名前は、全て英語です。
英語で書かれた電子部品の名前を見て、すぐに実際の電子部品が思い浮かぶ人はいいかもしれませんが、そうでない人が大半でしょう。

下の記事では、CircuitSimulatorAppletにある全ての部品の日本語訳を載せてあります。
「日本語では○○っていう部品なんだけど、英語では何ていうんだろう?」「この部品、CircuitSimulatorAppletのどこにあるんだ?」という時にお使いください。

terapotan.hatenablog.jp

多数決回路

本文中の多数決回路は、以下のサイトの回路を使用しました。 nw.tsuda.ac.jp

4進アップカウンタ

本文中の4進アップカウンタは、以下のサイトの回路を使用しました。 home.a00.itscom.net

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp

素材ライセンスチェッカー試作版公開!

意外と地味に面倒な、素材のライセンス管理。
そんなライセンス管理を肩代わりするソフト――の試作版を公開しました。

試作版が実際に動作している画像

素材ライセンスチェッカーって何だ?

何か紹介する画像

ソフトに登録された、画像・効果音・BGM……といった素材のライセンスを自動的に管理します。
今までのように、手動でライセンスをいちいち確認する必要はありません!

もう少し詳しく

ソフトウェアを作るには、どうしてもイラストや音楽といった他の人が作った素材が必要になります。
「いや、俺は全部自分で作るんだ!」と意気込んでも……膨大な作業量に圧倒されることでしょう。

幸いにも、今は無料で素材を配布してくださる方が多くいらっしゃいます。 ですが、他の人が作った素材ですから、「利用規約」というものを守らないといけません。例えば次のようなものです。

当サイトで配布している素材を用いる際には、クレジット等に「サイト名」と「サイトのURL」を必ず記載してください。

使用する素材は、一作品につき50点までです。

この利用規約というのは、サイトごとで違う内容になっています。使っている素材配布サイトが一つだけなら、まだ人力で管理できるかもしれませんが、5,10……と増えていくと、もう人力で管理するのは、不可能に近くなります。

具体的に言うと、次のようなことが起こるでしょう。

  • 今どの素材配布サイト使ってるんだっけ?
  • あれ?確か、この素材配布サイト何か禁止事項書いてあった気がするけど……何だっけ?
  • えーと、このサイトは「サイト名」と「URL」記載必須?で、このサイトは「名前」と「URL」記載必須?――あぁぁぁ!面倒くさーい!!
  • ……本当に利用規約守って使ってるよな?大丈夫だよな?素材の数多すぎて、もうわけわからん。

このような面倒を解決するのが素材ライセンスチェッカーです。

まだ、完成していない!?

このソフトはまだ完成していません。試作版としての公開となります。

ダウンロードは、下のリンクから出来ます。
www.vector.co.jp

注意:現在のバージョン(prototype-final)で、素材を追加ウィンドウ中の参照ボタンを押してファイルを選択しても、テキストボックスに何も入力されないバグがあります。本バージョンでは、この項目の内容は動作に影響を与えないため、適当な値を入力してください。

現時点での最新版をダウンロードしたい方や、ソフトを使ってみて意見や要望がある方は、下のリンクからどうぞ。

github.com

【第5回】トランジスタとオペアンプをシミュレーションしてみる

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp

今回は、トランジスタオペアンプを使った回路を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と書かれているところに全波整流された波形が見えます。

outputの波形

これ以外にも、様々な回路が登録されています。

色々な回路図1

色々な回路図2

次回予告

今回は、前回までと比べてあっさりとした内容となりました。

次回は、AND回路やOR回路、フリップフロップなどを使って簡単なデジタル回路をシミュレーションしてみます。

う-ん、よく分からん!

この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。

参考文献

CircuitSimulatorApplet 全電子部品対訳表

CircuitSimulatorApplet上に表示される電子部品の名前は、全て英語です。
英語で書かれた電子部品の名前を見て、すぐに実際の電子部品が思い浮かぶ人はいいかもしれませんが、そうでない人が大半でしょう。

下の記事では、CircuitSimulatorAppletにある全ての部品の日本語訳を載せてあります。
「日本語では○○っていう部品なんだけど、英語では何ていうんだろう?」「この部品、CircuitSimulatorAppletのどこにあるんだ?」という時にお使いください。

terapotan.hatenablog.jp

電流帰還バイアス回路

以下のpdfのp259~p261より一部改変して引用。
http://doku.bimyo.jp/electronics/ShoddyElectronics882.pdf

反転増幅回路

以下のpdfのp135より引用。
http://doku.bimyo.jp/electronics/ShoddyElectronics882.pdf

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp

【第4回】オシロスコープの使い方を詳しく解説!

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp

CircuitSimulatorAppletには、電圧や電流などをグラフにして表示する機能があります。
既に軽くグラフの機能について触れていますが、今回は詳しく説明していきます。

更新履歴

  • 2020/09/26:文章で存在しないアニメーションを指定していたため、その部分を削除

試してみる

下のリンクから、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)をクリックします。

回路図

回路図アニメーション

回路が完成したら、周波数のスライダーを動かしてみましょう。
周波数を高くしていくと、コンデンサにかかる電圧(右側のグラフ)が低くなっているのが分かるでしょうか。

下の図は、時間とともに入力信号の周波数を上げていったときの、出力電圧の変化を示したグラフです。

LPFの動作

計測してみる

電流のグラフを消す

今回計測したいのは、入力信号と出力信号の電圧です。
そのため、電流の値を計測する必要はありませんが、最初の状態では、電圧と電流が両方表示されています。

CircuitSimulatorAppletには、どちらかのグラフを消す機能があります。

電流のグラフを削除するには、電流のグラフにマウスが当たっている(電流の値が表示されている)状態で、右クリックしRemove Plotをクリックする必要があります。

RemovePlot

入力信号・出力信号、両方のグラフの電流のグラフを削除しておきましょう。

削除後のグラフ

最大値を表示する

CircuitSimulatorAppletのグラフ機能を使って、入力の周波数がある値のとき、出力の最大値は、入力の最大値の何倍になっているのか、計測したいと思います。

グラフを直接読み取って、最大値を求めてもいいのですが、グラフのプロパティを開いてShow Info-Show Peak Valueにチェックを入れると、グラフの左上に最大値が表示されます。

プロパティ

最大値

グラフのプロパティは、グラフで右クリックしてProperties...をクリックすると表示出来ます。

プロパティ

入力、出力両方のグラフの最大値を表示させておきましょう。

やってみる

入力信号の周波数を28Hzと158Hzに設定して、計測してみます。(なんでこの値にしたかって? 倍率がキリのいい値になるようにがんばって計算したんです...)

入力周波数を変更するには、交流電源のEditメニューを開き、Frequencyに設定したい周波数を入力します。

Editメニュー

28Hzと設定したいため、Frequencyに28と入力します。

入力後メニュー

シミュレーションを実行します。周波数が変わってしばらくは、最大値が変動するため、落ち着くまで待ちます。
値の動きが落ち着くと、下の画像のような値が表示されます。

入力の最大値表示

出力の最大値表示

上の図は入力信号の最大値、下の図は出力信号の最大値を表しています。
(手順通りに作業を進めていれば、左側に表示されているグラフが入力信号、右側に表示されているグラフが出力信号となっているはずです。)

出力電圧の最大値/入力電圧の最大値で、出力が入力の何倍か求めることが出来ます。
上の図の値で計算すると、2.471÷5=0.4942(倍)ですから、おおよそ0.5倍となっていることが分かります。

同様のことを、158Hzでも行います。
周波数を158Hzに変更してください。

周波数変更

入力の周波数変更

出力の周波数変更

最大値がグラフ上に表示されます。
出力最大値の単位が[mV]であることに注意して計算すると、501.118/5000=0.1002236(倍)となります。おおよそ0.1倍になっていることがわかります。

波形を見やすくする

周波数が高くなってくると、下の図のように波形が混みあって見づらくなる時があります。

混みあった波形

そのような場合、グラフのプロパティ画面にある「Scroll Speed」を変更すると見やすくなります。

ScrollSpeedを変更すると

スクロールバーの右側に書かれている「1ms/div」というのは、「グラフの一マスを1ms(ミリ秒)にしている」という意味です。

文の意味

位相差を計測する

最後に、入力信号と出力信号の位相差を計測してみます。
そのためには、入力信号と出力信号の二つのグラフを一つにまとめる必要があります。

入力信号・出力信号、どちらかのグラフの上で右クリックし、Combineをクリックしてください。

Combine

すると、二つのグラフが一つのグラフにまとまって表示されます。

まとまって表示

今回は、入力信号の周波数が10Hzの時の位相差を計測してみます。
周波数を10Hzに設定してください。

続いて、二つの電圧のグラフが同じ値であるとき、二つのグラフが何マス離れているか計測します。

離れているマス目

マス目を数えるときに、マス目が小さくて見づらい場合は、下のアニメーションのようにグラフを拡大することが出来ます。

拡大アニメーション

位相差を計算するためには、「一マスが何秒の経過を示しているのか」ということを知る必要があります。この値は、先ほど表示した「Scroll Speed」の値です。

ScrollSpeedの値

今回は、1ms/divで計測しています。

以上、入力・出力信号の周波数・一マスの秒数・マス目の数が求まりました。ここから、次の式で位相差を計算することが出来ます。
ただし、入力・出力信号の周波数をf[Hz],一マスの秒数をt[s],マス目の数をn[個],位相差をθ[°]とします。

数式1

この式に先ほど計測した値を代入します。(一マスの秒数の単位が[s]になっていることに注意が必要です。)

数式2

おおよそ位相差が45°になることがわかりました。

コラム:あの式をどうやって導出したのか

本文中で、入力・出力信号の周波数・一マスの秒数・マス目の数から位相差を求める式を紹介しました。簡単な計算で求めることが出来ますが、一応導出する方法を書いておきます。

詳しく知りたい方だけ、下のリンクからGoogleDriveに飛び、「式導出方法.pdf」というファイルをダウンロードしてください。 読まなくても、今後扱う内容は理解できます。

PDFダウンロード先

今回使用した回路

今回使用した回路を.txt形式で配布します。
以下のリンクから、GoogleDriveに移動し「配布する回路.txt」をダウンロードしてください。
ファイルをCircuitSimulatorAppletに読み込ませる方法は、本連載第2回を参考にしてください。

terapotan.hatenablog.jp

回路ダウンロード先

次回予告

今回で、CircuitSimulatorAppletの基本的な使い方は解説し終わりました。
次回からは、トランジスタオペアンプ、デジタル回路など様々な部品を使って色々な回路を作成していきたいと思います。

う-ん、よく分からん!

この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。

参考文献

CircuitSimulatorApplet 全電子部品対訳表

CircuitSimulatorApplet上に表示される電子部品の名前は、全て英語です。
英語で書かれた電子部品の名前を見て、すぐに実際の電子部品が思い浮かぶ人はいいかもしれませんが、そうでない人が大半でしょう。

下の記事では、CircuitSimulatorAppletにある全ての部品の日本語訳を載せてあります。
「日本語では○○っていう部品なんだけど、英語では何ていうんだろう?」「この部品、CircuitSimulatorAppletのどこにあるんだ?」という時にお使いください。

terapotan.hatenablog.jp

LPFについて

ja.wikipedia.org

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp

【第3回】スライダーを使って回路の動きを見よう!

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp

CircuitSimulatorAppletでは、スイッチをクリック一つで動作させたり、抵抗の値をシミュレーション中に変更することが出来る機能が備わっています。
今回は、それらの機能を使ってみましょう。

試してみる

下のリンクから、CircuitSimulatorAppletを実行出来ます。料金や会員登録は必要ありません。

http://www.falstad.com/circuit/circuitjs.html

その前に(RESETボタン)

前回Run/Stopボタンの使い方を解説しましたが、その隣にResetボタンがあったのを覚えているでしょうか。

Resetボタンは文字通り、回路を一度リセット(初期状態に戻す)時に使います。以下実際の回路とともに、使い方を見ていきましょう。

回路を組んで実行

下の抵抗・電池・コンデンサ・スイッチが接続されている回路を作成してみましょう。

部品の配置方法など詳しいことは前回の記事をご覧ください。

terapotan.hatenablog.jp

コンデンサは、「Passive Components-Capatitor」を、スイッチは「Passive Components-Switch」を選択することで追加できます。

作成する回路図

今回も前回と同様、作成までのアニメーションを作成しました。参考にしてください。

作成までのアニメーション

Column:Voltage source/wire loop with no resistance!

作成した回路には、スイッチが二つ付いています。
これらのスイッチを両方ともONにすると、「Voltage source/wire loop with no resistance!」というエラーメッセージが表示されて、シミュレーションが止まってしまいます。
エラーメッセージの内容通り、回路をショート(短絡)させてしまったときに表示されるエラーです。
シミュレーションを再開させるには、短絡状態でなくする、この回路だとどちらかのスイッチをOFFにする必要があります。

回路図が作成出来たら、シミュレーションを実行する前に右側にあるスイッチをOFF、左側にあるスイッチをONにしてください。

スイッチOFFのアニメーション

スイッチのON・OFFは、上のアニメーションにある通りクリックで切り替えることが出来ます。

また、コンデンサで右クリックし「View in Scope」をクリックし、グラフを表示させてください。(これでコンデンサに流れる電流と電圧が時間とともにどのように変化するか、分かります。)

RUN/STOPボタンを押して、シミュレーションをしばらく実行させると、次のようなグラフが描かれるはずです。

コンデンサに描かれるグラフ

グラフの見方

グラフの縦軸は電流や電圧の値、横軸はシミュレーション開始からの時間を、表しています。

今回のグラフでは、黄色い線がコンデンサに流れる電流、緑の線がコンデンサにかかっている電圧を表します。

コンデンサに流れる電流は時間とともに小さくなっていますが、電圧は逆に時間とともに大きくなっているのが分かります。

ある点の具体的な経過時間が見たい場合は、グラフにマウスを当てると表示されます。

時間を表示する

コンデンサの放電

先ほど見た現象は、いわゆるコンデンサの充電と言われるものです。
次は、コンデンサの放電をシミュレートしてみましょう。

左側のスイッチをOFF、右側のスイッチをONの状態にしてください。

スイッチONOFF切り替えスイッチ

次のようなグラフが描かれるはずです。

表示されるグラフ

RESETボタンを押す

以上の操作を行ったら、右側のスイッチをON、左側のスイッチをOFFにして、シミュレーションをしばらく実行し、もう一度コンデンサ電荷をためましょう。

この状態でRESETボタンを押すとどうなるのでしょうか。
押してみましょう。

一見何も変わりないようですが、右側のスイッチをOFF、左側のスイッチをONにしてコンデンサの放電を行ってみましょう。

RESET後もう一度放電

コンデンサに電流が流れていません。

コンデンサに溜められていたはずの電荷が、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が赤く光るはずです。

Column:Editについて

Editは、抵抗だけでなくCircuitSimulatorApplet上にある大半の部品で表示させることが出来ます。
「この部品の値をいじりたい」と思ったら、まずはEditをクリックしてみるといいでしょう。

LEDが光る

スライダーとは?

今作成した回路にはLEDと直列に抵抗が接続されています。この抵抗の値をもっと楽に変える方法はないのでしょうか。

CircuitSimulatorAppletには、スライダーを使ってシミュレーション実行中に値を変えられる機能が備わっています。

スライダーを追加する

抵抗にスライダー追加

抵抗の上で、右クリックして表示されたメニューのうち「Sliders…」をクリックしています。
すると、部品のどの項目に対してスライダーを追加するかを選択する画面が表示されます。
Resistance(ohms)にチェックを入れると「スライダーの最小値(Min Value)」と「スライダーの最大値(Max Value)」と「スライダーの名前(Label)」を入力するところが表示されます。

スライダー値変更

MinValueとMaxValueはそのままで、Label(スライダーの名前)だけ「無抵抗」という名前に変えてみましょう。(スライダーの名前には日本語も入力することが出来ます。)

画面の右側に「無抵抗」という名前のスライダーが表示されました。

スライダー追加完了

このスライダーを動かすと、抵抗の値が変わっているのが確認できます。

スライダーの機能が使えるのは、抵抗だけではありません。コンデンサ・コイル・LED・トランジスタ……といった部品でもスライダーの機能を使うことが出来ます。

スライダーはシミュレーション実行中にも使うことが出来ます。

回路の勉強をしているとき「ここの部品の値を変えたらどうなるのだろう」という疑問がよく浮かぶものです。そんな時スライダーを使えば、直感的に回路の動作を調べることが出来ます。

次回予告

今回までは、直流回路のシミュレーションしか行ってきませんでした。
しかし、CircuitSimulatorAppletでは交流回路のシミュレーションも行うことが出来ます。
次回は、コンデンサやコイルが接続された交流回路のシミュレーションを行います。

う-ん、よく分からん!

この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。

参考文献

CircuitSimulatorApplet 全電子部品対訳表

CircuitSimulatorApplet上に表示される電子部品の名前は、全て英語です。
英語で書かれた電子部品の名前を見て、すぐに実際の電子部品が思い浮かぶ人はいいかもしれませんが、そうでない人が大半でしょう。

下の記事では、CircuitSimulatorAppletにある全ての部品の日本語訳を載せてあります。
「日本語では○○っていう部品なんだけど、英語では何ていうんだろう?」「この部品、CircuitSimulatorAppletのどこにあるんだ?」という時にお使いください。

terapotan.hatenablog.jp

SI接頭語

www.dainippon-tosho.co.jp

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp