【第8回】シミュレーション結果を音で聞く――Audio Input/Audio Output

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp

この波形を音にして聞きたい!――そう思った時に使えるのが、Audio Input/Audio Outputです。今回は、これらの部品について解説します。

Audio Output/Audio Inputって?

AudioInput,AudioOutputの画像

画像左の部品が、Audio Input、右の部品がAudio Outputと呼ばれる部品です。
Audio Inputは、その名の通り、好きな音声ファイルの波形をシミュレーター中に入力できる部品です。
Audio Outputは、AudioOutputの端子に入力された電圧の波形を音声にして、聞くことが出来る部品です。 Audio Outputを配置すると、画面右側に、下の画像のようなボタンが表示され、このボタンをクリックすると、音声を再生することが出来ます。

PlayAudioのボタン画像

Audio Inputは、Inputs and Sources - Add Audio Inputから、Audio Outputは、Outputs and Labels - Add Audio Outputから追加できます。

Audio Input、Audio Outputを使ってみる

回路図

上の図のような回路を作成して、Audio Inputに入力した音声ファイルの波形をそのままAudio Outputで聞いてみましょう。 回路データは、ここAudio Output基本回路.txtをダウンロードしてください。(この回路データでは、AudioInputのファイルが指定されていないため、そのままシミュレートさせても上手く動作しません。)

Audio Output配置時に、次のようなメッセージが表示されることがありますが、気にせずOKボタンを押してください。

警告メッセージ

Audio InputのEdit画面

(Edit画面の開き方は、第3回を参考にしてください。)

Audio InputのEdit画面は、次のようになっています。
Audio InputのEdit画面

「ファイルを選択」ボタンをクリックすると、Audio Inputに入力したい音声ファイルを選択することが出来ます。

Duration[s]には、Audio Outputに電圧波形を記録する秒数を入力します。Sampling Rateは、名前の通り、オーディオ関連の話で出てくるサンプリングレートのことですが、「サンプリングレート」と検索すると、大量に記事が出てくるので、意味はそちらを参考にしてください。

シミュレーションを開始すると、Audio Outputの波形記録が始まります。 波形記録には、しばらく時間がかかります。Audio Outputの表示が、次の図のようになるまで待ちましょう。

記録完了

この表示になったら、画面左にある、Play Audioボタンを押して、音声を聞いてみましょう。 Audio Inputの音声ファイルの一部が聞こえてくるはずです。

Audio Outputに、色んな波形を入力する

Audio Input/Audio Outputの使い方の解説はこれで終わりです。 ただ、あまりに記事が短すぎるので、ここからは、Audio Outputに色んな信号を入力して聞いてみましょう。 入力する信号は、1000Hzの正弦波・三角波矩形波の三つです。

回路図

回路データは、ここAudio Output応用回路.txtをダウンロードしてください。

正弦波・三角波矩形波の信号は、Inputs and Sources - Add A/C Voltage Source(2-terminal)から部品を追加して、追加した部品のEdit画面から、Waveformの値を変えることで、追加することが出来ます。

Edit画面

正弦波を追加したい場合は、A/C三角波Triangle矩形波Square WaveWaveformの値を変更してください。

Audio Outputを複数追加した場合は、音声を再生するボタンも複数個追加されます。

複数配置される図

シミュレーションを開始してしばらく経ったら、ボタンを押して音声を聞いてみましょう。

次回予告

全波整流回路オペアンプの内部回路のように、複雑な回路を一つにまとめてあたかも一つのICのようにシミュレーター上で扱いたい時があります。そのような時に使う部品が、SubCircuitという部品です。

次回は、SubCircuitを解説します。

う-ん、よく分からん!

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

参考文献

CircuitSimulatorApplet 全電子部品対訳表

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

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

terapotan.hatenablog.jp

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp

【第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