デジタル回路とは(アナログからデジタルへ)
ファームウェア/ソフトウェアエンジニアが電気知識を身につける上でのベース知識として、まず デジタル回路は「電気」をどのようにしてデジタル信号としているのか 、を知る必要があると思います。
FWが書き込まれるMCUは、接続された周辺電子部品とデジタル信号でやり取りをし、FWはそのデジタル信号を用いて処理を行うことはご存じだと思います。
また、そのMCUは電気基板に実装されていて、周辺電子部品と「電気」でデータのやり取りをすることもご存じだと思います。
この「電気」をどのようにしてデジタル信号として扱われるのでしょうか。
アナログ信号とデジタル信号
まず、デジタル信号とは何か、対比するアナログ信号とは何か、をざっくり説明すると以下の通りです。
- デジタル信号:「電気」の振幅と時間の両方ともに離散値をとる信号のこと
- アナログ信号:「電気」の振幅と時間のどちらか一方でもとびとびの値ではなく連続した値(連続値)をとる信号のこと
そして、 デジタル回路 とは、デジタル信号を情報の表現に用いる電子回路のことをいいます。
デジタル回路で扱われるデジタル信号の多くは2進数ですので、以降は2進数のデジタル信号に絞ってお話します。
「電気」をデジタル信号へ
アナログ信号をデジタル信号として扱えるようにすることを AD変換 と言います。
英語のAnalog-to-digital converterの略で ADC と言ったりもします。
ここからは、「電気」の振幅と時間の両方を離散化するADCの説明です。
時間の離散化
こちらはメインではないのでさらっと。
MCUはシステムクロックを元にした周期で動作します。
MCUは、この周期に従ってデータのやり取りをするので、自然とそのデータの時間軸は離散化されます。
「電気」の振幅の離散化
こちらが伝えたいメインです。
デジタル回路での「電気」の振幅とは、ずばり電圧です。
つまり、信号を”0”, ”1”の2進数のデジタル値として扱うのに電圧の離散化が必要です。
電圧の離散化は、MCUの端子内部のHW特性によって決まる電圧の閾値によって行われます。
ある電圧以上を"1"とする、ある電圧以下を"0"とする、としているわけです。
まとめると、アナログ信号をデジタル信号として扱う流れは以下の通りです。
”0”, “1”を判定する電圧の閾値
電圧の閾値についてもう少し詳しく説明します。ちょっと電子部品の話です。
「データのやり取り」とは、相手のICがいて成り立ちます。
ある一方のICに着目すると、そのICで行っている「データのやり取り」は「入力」と「出力」に分解することができます。
ICの入力・出力それぞれで、電圧の離散化のための閾値を以下の表のように言います。
呼び名の由来は以下の略だと思います。
「V」はVoltage
「I」はInput、「O」はOutput
「L」はLow level (”0”のこと)、「H」はHigh level (”1”のこと)
もう少し詳しく書くと以下の通りです。
-
VIL:ICは、入力される電圧がこれ以下なら"0"と判定するよ、という閾値
-
VIH:ICは、入力される電圧がこれ以上なら"1"と判定するよ、という閾値
-
VOL:ICは、"0"としてこれ以下の電圧を出力するよ、という閾値
-
VOH:ICは、"1"としてこれ以上の電圧を出力すると、という閾値
この VIL / VIH、VOL / VOH は、基本的に電子部品のデータシートで確認することができます。
入力される電圧がVILとVIHの間の電圧 (「中間電位」と言う)になってしまうときは注意が必要です。
"0"と判定するか"1”と判定するか保証されませんし、ICの端子内部回路で不正に電流を流れてしまったりしてHW的にもよくありません。
基本的に電気エンジニアが、ICに中間電位が入力されないようにしなければいけないのですが、FWエンジニアも知識として知っておいて不具合解析などで電気的な議論にも参加できるようになると良いかなと思います。
参考資料
Renesas Engineer School
EDN Japan - アナログICの基礎の基礎 第1回アナログとデジタル
【入門】アナログ回路とデジタル回路の違い
AD変換とは!?アナログ信号からディジタル信号へ!