マイコンと周辺回路の基礎
マイコンはMicro Computer、文字通りの意味なら「小さなコンピュータ」です。
その昔、コンピュータといったら部屋一つが必要だった時代、机の脇に置けるくらいのコンピュータが登場して「ミニコン」と呼ばれるようになった次の時代として、LSI1個(当初は数個)にコンピュータの主要部分が収まるようになりました。

現在では、主に、身近なコンピュータであるパソコンの処理部分(=CPU)と比較して、「小さい」という意味で解釈されることが一般的となった一方、「組み込みマイコン」と「組み込み」という言葉がつくことが多くなりました。 組み込み、とは、なにかの機械/装置に組み込んで使う、ということを意味します。 パソコンや電卓は「計算する」(compute=計算する)ことが目的なので、それ自体の演算回路は組み込みとは呼ばれませんが、ビデオデッキや洗濯機に入っているマイコンは、あたかも多くの部品のなかの一つとして、装置を構成するという意味合いが強く、組み込みマイコンと呼ばれます。
これも歴史的には、なにか機械を制御するという場合、機械の外にコンピュータがあるのが当たり前だった時代からすると、そのコンピュータが装置に「組み込まれた」という意味もあります。
携帯電話のコンピュータは通信の制御をする目的というより、あれ自体が一つの情報機器になってしまっているので、洗濯機のマイコンとは役割の大きさがぜんぜん違います。が、これもまた、一般には「組み込み」と呼ばれています。考えようによったら、「箱としてのコンピュータ」ではないものが全部「組み込み」と言えるのかもしれません。

さて、「小さい」とはどういうことかというと、いろいろあります。

  • 文字通り、大きさが小さい
    足の数は後述の理由であまり変わらないことがありますが、その中の半導体本体のサイズ(=トランジスタの数)などはパソコン用と大きな差があります。
  • 演算能力が小さい(低い)
    携帯電話用のマイコンのように、一昔前のパソコンよりも性能が高い物もありますが、一般には、ずっと計算力は落ちます。 たとえば、パソコンは32bitが主流ですが、マイコンは8〜16ビットが当たり前ですし、パソコンのCPUがGHzオーダーなのにたいして、マイコンは数MHz〜数十MHz程度で動きます。
  • 電力消費が小さい
    単純に考えて、回路が小さく、それほど高速で働かなければ消費電力も小さくなります。パソコンのCPUが数十Wの電気を食うのに対して、小さなマイコンは電池で楽に動くmWクラスです。
  • 命令セットが小さい=命令数が少ない
    コンピュータは10個程度の命令があれば、最低限動くといわれています。たとえば、

    足し算があれば、ひたすら繰り返すことでかけ算ができる。
    引き算があれば、ひたすら繰り返すことで割り算ができる。
    整数の計算ができれば、小数の計算もできる
    ビット反転があれば、引き算はいらない。

    など、判断(これも必要命令ですが)や繰り返しによって、手間を掛ければ答えが出ます。 ただ、かけ算を一発でやってくれる命令(回路)があれば、その方が速く、プログラムを作る側も楽です。もちろん、その分、回路が複雑になり、高く、電気を食うようになります。
    ちなみに、パソコン用CPUのPentium4などでは命令数は数百、小さなマイコンでは50もありません。

マイコン、組み込みマイコンの話をするまえに、コンピュータの一般的な構造を知っておく必要があります。

コンピュータの、本当に重要な部分は、

  • 演算部分(CPU、MPU)
    • 演算回路(ALU、算術演算、論理演算(AND, ORなど))
    • 制御部分(デコーダ等、命令→どの回路を動かすか)
  • 記憶回路 (メモリ)
です。現在主流のコンピュータは、メモリの上にプログラムとデータの両方を置きます。別の見方をすれば、メモリの上には単なる0/1が大量に入っていて、それをCPUが参照して、はじめて、命令として使うか、データとして使うかが決まるとも言えます。
メモリはアドレス(番地)で区別されます。値を出し入れする場所には順にアドレスが振ってあって、CPUがアドレスを指定することで、メモリは渡す値を準備し、書き込むときはアドレスと値をセットにしてメモリに渡します。

メモリには、読み書き可能なRAMと、読むだけのROMがあります。ROMは主に「消えてしまっては困る物」を置くために使われます。ふつうのRAMが電源を切ると消えてしまうのに対して、ROMは消えません。また、プログラムの異常などで、へんなものを書き込もうとしても、ROMはそもそも書けません(一般には特殊な手続きで書き込む)。 そのため、パソコンの場合は、電源を入れたときに最低限起動するのに必要なプログラム(大部分はハードディスクなどからRAMに読み込める)を、組み込み系の場合には全てのプログラムとそれでつかう固定データを書き込んであります。
(そのため、パソコンのROMは比率的にはとても小さく、組み込み系はROMが大半です)。

蛇足ですが、RAMの仲間にはいくつか種類があります。演算回路に近い順に

  • アキュムレータ:そろばんに相当する、演算時に常用する「数値1個」分の記憶回路
  • レジスタ:アキュムレータのほかに、演算回路のそばにある数値置き場。
    昔はアキュムレータとレジスタには大きな違いがあったものの、中規模以上のCPUでは最近は差が少なくなる/そもそもアキュムレータが無くなるというケースが多い。
  • キャッシュ:部品としてのCPUに内蔵、もしくは極近距離に置く、小容量高速なRAM。一般に、メモリは大きくなるほど値を取り出すのが遅くなりやすいため、頻繁に使う内容を、手近にコピーして使う。たとえるなら、壁際の本棚に対する机の上の本棚。パソコンでは当たり前ながら、組み込み系ではふつうはない。
  • メインメモリ:主たるRAM。
  • 仮想記憶(HDDなど):メインメモリが足りなくなったときに、使っていなさそうなところをどっかに待避させる(書庫にしまう?)。もちろん必要になったときに取り出すのは時間がかかる。パソコンでソフトをいくつも動かしたときにハードディスクがごりごりいってしばらく反応がなくなるのは、この出し入れ作業のため。
などがあります。

さて、演算部分と記憶で何ができるかというと、処理しかできません。
コンピュータが役立つ機械になるためには、データの入出力が必要です。
入力の例:
キーボード、マウス、マイク
出力の例:
ディスプレイ、プリンタ、スピーカ
入出力双方向:
ディスクドライブ、ネットワーク、USB
当然ながら、これらには複雑な回路などが必要ですが、CPUという立場からすると、
・ディジタル値が入力できること
・ディジタル値が出力できること
の二つに集約されます。入力のための回路は、入力された値を何らかの形でディジタル値の組にします(単に値をならべる、順番に値をわたす、など)。 出力のための回路は、与えられた値をもとに、出力すべき信号を作り出します。
これらの回路も番地で区別され、それがずらっと並んだような物が、装置としてのコンピュータです。 また、これら回路を「インターフェイス回路」と一般に呼びます。
※CPUの種類によって、メモリと同列に見える物、メモリとは別物に見える物があります。 いま、ふつうに「マイコン」として市販されている物の多くは「組み込みマイコン」です。

組み込みマイコンの特徴は、一言で言えば「全部はいっている」です。

  • CPU
  • メモリ(ROM, RAM)
  • 入出力回路
パソコン用のCPUが、CPUの部分だけ、すなわち、メモリや各種回路は別に用意しなければならないのに対して、組み込みマイコンでは最初から全てが入っていて、プログラムをいれて電源をいれれば、様々な機能を発揮します。最近はあまり聞かなくなりましたが、そのことを称して「ワンチップマイコン」とも呼ばれていました。
そのかわり、パソコンにはいろいろな物を追加できる、変更できる拡張性があるのに対して(たとえば、メモリを追加すれば容量が増える)、組み込みマイコンでは追加できないか、追加するのにかなり手間がかかります。 そのため、マイコンは一般にメモリの大きさや入っている回路で膨大な種類があり、そこから目的に応じて必要なものを選択して使うことになります。また、一番リッチなものでも収まらない場合、頭をかかえることになります。
ここでは、マイコンの一般的な入出力について見ていきます。

ただ、実はこれらはマイコンに限らず、パソコンでも可能です。 もちろん、パソコンに標準搭載はされておらず、必要なときは、その機能の回路をパソコンに追加することになります。
アドテックシステムサイエンス社インタフェース社 以下に一般的な入出力の機能を列挙します。

  • パラレル入出力
    ディジタル値を1bit、もしくは1byte単位などで入力または出力する機能。
    用途:スイッチの入力、表示灯のオンオフ、モータのオンオフ、ステッピングモータのコイルのオンオフなど、基本的にオンオフのあるもの。数ビット束ねて使うこともある。
  • シリアル入出力
    ディジタル値を1本の端子から、順番に出し入れする機能。
    パラレルのうちの1本から、プログラムによって同様なことを実現することもできるが、その間他のことができなくなる。 そのため、順番に入ってきた物を1バイトにまとめたり、逆に1バイトの値を一定の速度で順に出力するための回路が入っている。
    用途:通信、シリアル型の部品を接続。
  • アナログ入出力
    マイコンに、A/D変換器、D/A変換器を内蔵し、アナログ電圧の入出力を可能とする。
    特定の番地に値を渡すとアナログ電圧が出て、特定の番地からアナログ電圧が得られる、といったもの。 便利ではあるが、分解能、精度は期待しない方がよい(8〜10bit程度)。
    用途:センサ値の読み取り、出力調整など
  • カウンタ、タイマ
    パルス数をカウントする回路によって、カウントするほか、時間を計れる機能。
    一般に様々な用途があり、外来パルスのカウント、時間計測、PWM信号の出力、特定周波数の信号出力(簡易的な音楽)、CPUの時限タイマor時計(目覚まし時計)、などにつかわれる。
    経験上、マイコンで一番最初に数が足りなくなり易い。
こういった物が、マイコンの規模に応じて、搭載されています。
逆に、最初から盛りだくさんに積んであるため、CPUとしてはそれほど性能は高くないものの、部品としてみたときに足の数が100を超える場合があるなど、大きめなことがあります。
  • アナログ系センサ
    マイコンのA/D入力につなぎますが、一般に、マイコンのA/D入力は0〜5といった入力レンジを持つのに対してセンサ出力は様々です。 そのため、(1)電圧レンジをあわせること (2)センサの値域がマイコンA/Dの値域にあうように増幅すること、のための、オペアンプによる回路などが必要になります。 また、ノイズを除去したり、値の取り込み周期より細かな変化を取り除くために、アナログフィルタを入れることも一般的です。 全般に言えることですが、マイコンの場合、「ある機能が壊れた」は、その部分だけ修理するわけにいかず、全交換になることが一般的のため、「範囲外の値は絶対入れない」ように気をつける必要があります。
  • ステッピングモータ
    マイコンにステッピングモータを駆動できる回路が直接搭載されていることはふつうはなく、マイコンのパラレル出力にスイッチング回路を接続し、そこにモータのコイルを接続します。
    一般的な、2相型モータの場合、4本のコイルのオンオフで回ります。そのため、出力線4本をつなぎ、そこの01を順次プログラムで切り替えていく、という方法が簡易的です。(車輪2個回したければ8本=1バイト)
    ただ、切り替えるタイミングが、そのまま回転のなめらかさにつながるため、CPUがかかり切りで切り替えるか、タイマを使うことで、特定の時間毎に切り替えるようにする必要があります。
  • DC(サーボ)モータ
    もちろん、これも直接はまわりません。
    ステッピングモータは、切り替えるタイミングで速度が変わりますが、直流モータの場合、与える電圧などでかわります。 そのため、出力調整するには、PWMによるスイッチングを行います(まれにD/Aを使います)。
    PWM信号はカウンタ回路から出力させます。正転逆転が必要な場合は、そのほかにパラレル出力端子から1本もってきて、それで決めます。
    ステッピングモータは、与えたパルス数で回転角度がわかります。直流モータの場合は、センサをつけなければ、回転角度がわかりません。センサとして使われることが多いのは、ロータリーエンコーダと呼ばれる、回転に応じてパルスが出力されるセンサです。この場合、それをカウンタ回路で数えます(PWMとエンコーダでカウンタが2個必要)。物によってはポテンショメータを使うことがあり、この場合は適当な回路を経てA/D変換に接続します。
    直流モータの場合、電流とトルクが比例します。そのため、「あるトルクを出したい」という場合は、電流検出も必要になります。電流検出は一般に小さな値の抵抗を直列に入れ、その電圧降下で電流を見ます。 この電圧もA/D変換から取り込みます。

以上は、接続の概要です。 ただ、実際には、それに伴うプログラムを作らなければなりません。
マイコン制御によるメカトロ装置の神髄は「とりあえず全部つないでおいて後はソフトでなんとかする」ですが、逆に言えば、そのソフトで性能が大幅にかわります。そのため、「メカトロニクス」という単語に「コンピュータ」は含まれていませんが、実際には、コンピュータの比重がかなり高い物となっています。