mi_what2

  1. Home>
  2. エレクトロニクス豆知識>
  3. マイコンとは?>
  4. マイコンの構成

マイコンの構成

マイコンの構成

マイコンは、I/O、CPU、ROM、RAM、周辺回路の部品で構成されています。
これら部品の組み合わせにより、“何らかの入力を受け、ある決められた処理をし、何らかの信号を出力する”というマイコンの動作を実現しています。
ここで、それぞれの部品の役割を説明します。
I/O:何らかの入力を受けて、何らかの信号を出力する部分。
CPU:ある決められた処理をする部分。
ROM:処理の内容を決めるソフトウェアが格納される部分。
RAM:処理結果など、一時的なデータが格納される部分。
周辺回路:マイコンの機能を豊富にする回路群。

マイコンは、I/O、CPU、ROM、RAM、周辺回路で構成される

電気ケトルを例にマイコンの動作を確認

ここからは、ボタン入力を受けてヒーターを加熱し、水を温める電気ケトルを例にし、マイコン内部がどのような動きをしているか見ていきます。

ボタン入力を受けて水を温める電気ケトルを例にして、マイコンの中身を見ていく

I/Oとは

I/O(Input / Output)は、外部に接続された部品から信号を入力したり、外部に接続された部品へ信号を出力したりします。
ここで電気ケトルの動作を考えてみてください。電気ケトルはボタン入力を受けてヒーターを加熱し水を温めます。電気ケトルでは『ボタン入力を受け付けること』と『電気ケトル内温度計の信号を受け付けること』と『ヒーターに制御信号を出力すること』がI/Oの役割になります。
ここでI/Oが無かった場合、ボタンや電気ケトル内温度計の入力、ヒーターへの制御信号の出力ができなくなります。
このように、I/Oはマイコンにとって入口と出口にあたる、とても重要な部分です。

I/Oは、マイコンにとっての入り口と

CPUとは

CPUは中央演算処理装置(Central Processing Unit)と呼ばれており、マイコンの中で司令塔の役割をします。電気ケトルのマイコンで例えると、ボタン入力を受けてヒーターへ加熱指示や水の温度上昇を受けてヒーター停止指示を出している部分がCPUです。
たとえば電気ケトルで水の温度を90℃にしたい場合、
『もしボタンが押されたら、ヒーターを加熱して水を温める』
『もし電気ケトル内温度計の温度が90℃になったらヒーターを停止させる』
というように、あらかじめ処理を定めておきます。
これにより電気ケトルに水を入れてボタンを押せば、90℃の熱湯を作ることができます。
ここで、このあらかじめ定められた処理のことをプログラムといいます。このプログラムには、予定された計画という意味があります。したがって、CPUは司令塔として、この予定された計画通りに処理を実行していきます。

CPUは司令塔で指示を出すところ

CPUが実行する処理(命令)について

CPUについてさらに具体的に見てみます。
『もし電気ケトル内の温度が90℃になったらヒーターを停止させる』
という処理を大きく分けると、以下の3つに分けられます。
1.数秒おきに電気ケトル内の温度センサー出力を受け取る。
2.取得した電気ケトル内の温度と閾値90℃を比較する。
3.もし温度が閾値90℃以上の場合ヒーターを停止させる。
上記の例はまだまだ細かく分けることができ、最小単位まで分けるとCPUが実行する処理(命令)となります。具体的に言うと、上記の例の『2.』および『3.』の、『比較する』と『ヒーターを停止させる』という処理は、CPUへの比較命令と分岐命令に当たります。これをマイコンの言語であるアセンブリ言語のように記述すると

・CMP 電気ケトル内温度、90℃(電気ケトル内の温度と90℃を比較する)
・BGE ヒーター停止(もし電気ケトル内の温度≧90℃ならヒーター停止に分岐する)

となります。マイコンによって異なるのですが、比較命令はCMP(=compare:比較)というように、アセンブリ言語の命令の多くは動作をイメージした記号が付けられています。その他命令には、転送命令MOV(move)、記憶命令ST(store)、分岐命令B(branch)などがあります。 ちなみに、C言語のように上記の命令を記述すると

if (電気ケトル内の温度 >= 90℃){
ヒーター停止();
}

となります。
CPUはこれら命令を実行していきます。

あらかしめ定められた処理:プログラム

CPUによる命令の実行

CPUの動作についてさらに深堀してみます。
CPUの内部は、プログラムカウンタ、命令デコーダ、演算回路から構成されます。
プログラムカウンタは、次に実行する命令の場所(アドレス)を保持する部分です。
命令デコーダは、命令をCPUが処理できる信号に変換する部分です。
演算回路は、命令を処理する部分です。
図の例を説明すると、
①プログラムカウンタにより比較命令CMPが格納されたアドレスが指定されます。
②プログラムカウンタで指定された命令を読み出し、デコーダに入力します。
③読み出した命令をデコーダにて、CPUが処理できる信号に変換し、演算回路に入力します。
ここで、プログラムカウンタは自動的にカウントアップし次の場所(アドレス)が指定されます。
単純な分岐命令Bを使用している場合はプログラムカウンタに分岐先が指定されます。
④演算回路により命令に合わせて処理します。演算回路では、各命令に合わせて足したり引いたりを行っています。例えば比較命令CMPは、引き算をしてどちらが大きいか確認しています。
⑤比較結果を使用する特殊な条件分岐命令を用いていた場合、処理の後プログラムカウンタに分岐先が指定されることがあります。
ここで、②はフェッチ、③はデコード、④はエグゼキュート(実行)と表現されます。
このようにCPUへの命令の組み合わせを準備することにより、CPUは順番通りひとつひとつを処理し、上記の動作を実現します。

CPUによる命令の実行

CPUが命令を実行する時間について

CPUの能力を示すパラメータの一つに命令を処理する時間があります。ここで、CPUが比較命令CMPを実行するための時間を記載します。
マイコンによって異なりますが、遅くても100μsec程度で命令を実行します。速いマイコンになると、数十nsecで実行できるものもあります。この命令を実行する速度を決めているものがクロックです。
クロックとは命令を実行する時間を定める信号で、単位は周波数[Hz]で表せられます。
このクロックが速ければ、命令を早く実行できます。CPUはこのクロックに合わせて、命令を順番通り実行していきます。

CPUの速度を決めるクロック

ROMとは

ROM(Read Only Memory)は、読み出しのみ可能なメモリです。基本的には、内容を書き換えないメモリです。
電気ケトルに例えると、
『もしボタンが押されたら、ヒーターを加熱して水を温める』
『もし電気ケトル内温度計の温度が90℃になったらヒーターを停止させる』
といったプログラムが格納される場所です。そのため、プログラムメモリとも呼ばれています。
ROMの内容は、電源起動時から読みだされ、また電源を再起動しても保持しています。
そのため、電気機器の電源を再起動したとしても、電気ケトルなどの電気機器は毎回同じ動作をします。
ちなみに、現在のROMの主流は、ROMの内容を書き換えたいときに書き換えられるフラッシュメモリです。これにより、マイコンの自由度が増し、さらに電気機器の開発期間の短縮やコストの削減が可能になります。

ROMは再起動しても毎回同じ動作をする

CPUと命令とROMの関係

CPUは、最小処理単位である命令をひとつひとつ処理します。そして、命令には、転送命令MOV、記憶命令ST、比較命令CMPなどがあります。
ROMには、これら命令がひとつひとつ格納されています。
ここで電気ケトルの例を振り返ってみます。
『もし電気ケトル内の温度が90℃になったらヒーターを停止させる』
という処理を大きく分けると、以下の3つに分けられます。

1.数秒おきに電気ケトル内の温度センサー出力を受け取る。
2.取得した電気ケトル内の温度と閾値90℃を比較する。
3.もし温度が閾値90℃以上の場合ヒーターを停止させる。

ここで『2.』および『3.』の処理をアセンブリ言語で記載すると

・CMP 電気ケトル内温度、90℃(電気ケトル内の温度と90℃を比較する)
・BGE ヒーター停止(もし電気ケトル内の温度≧90℃ならヒーター停止に分岐する)

となります。ROMにはこれら命令が保持されており、CPUはこれら命令を順番通りひとつひとつ処理していきます。

ROMに順番通りひとつひとつ記憶された命令を、CPUが処理する

RAMとは

RAM(Random Access Memory)は、読み出しと書き込みが可能なメモリで、データが一時的に格納されるためデータメモリとも呼ばれます。
電気ケトルでは、湯沸し温度の設定や電気ケトル内にある温度センサーの測定結果、ヒーターなどの現在の状態が保持されます。
実のところ、以前説明した転送命令MOV、記憶命令STのような単純な処理のみの場合、RAMは必要ありません。しかし、マイコンを使って実際の電気機器を作る場合には、複雑な処理が必要なためRAMは必要不可欠です。

RAMにはデータが一時的に保持される

RAMの処理

電気ケトルを例にしてRAMの処理を説明します。
例えば温度設定のできる電気ケトルの機能は以下とします。
①湯沸し機能
・湯沸し停止中に湯沸しのボタンが押されると湯沸しを開始する。
・電気ケトル内の温度が設定した温度(目標温度)に達したら湯沸しを停止する。
・湯沸し中に湯沸しボタンが押されると湯沸しを停止する。
②温度設定機能
・100℃、90℃、75℃の3段階の温度に設定できる。
・温度設定ボタンが押されるたびに、100℃⇒90℃⇒75℃⇒100℃⇒90℃と温度が切り替わる。
これらの機能を実現するためにもRAMが必要になります。

●湯沸し機能
湯沸し機能は、湯沸し停止中に湯沸しボタンが押されたことによって加熱を始めるので、湯沸し中か、もしくは、湯沸し停止中かが分かるようになっている必要があります。したがって、湯沸しON/OFFの状態をデータとして保持する必要があります。
ここでは、湯沸しON/OFFの状態をRAMに置いておくことにし、データの名前をHeaterStatusと付けることにします。
CPUは、湯沸しボタンが押された際は、RAMからHeaterStatusを読み出し、現在の状態を判断し、そしてHeaterStatusを書き換える動作をします。

沸騰しボタンが押された時の処理

ここで、HeaterStatusがOFFの場合に湯沸しボタンが押されると、ヒーターに電流を流しHeaterStatusをONにします。逆にHeaterStatusがONの場合に湯沸しボタンが押されると、ヒーターの電流を止めHeaterStatusをOFFに変更します。
もし、RAMのように変更できる領域がないと、現在の状態を保持できません。

沸騰しボタンが押された時の処理フロー

●温度設定について
温度の設定についても、設定温度は3種類あるので、どの温度に設定したのかを記憶しておく必要があります。また、温度設定ボタンを1回押すたびに設定温度が変わり、ボタンが3回押されたらもとに戻る必要があります。このように考えると、ボタンを押した回数と、その回数に該当する温度を目標温度のデータとしてRAMに保持しておけば温度設定が実現できます。
これらのように、RAMという自由に読み書きできる領域があることで、より柔軟な処理が可能になります。

周辺回路とは

周辺回路(ペリフェラル)は、マイコンの中に搭載されたマイコンの機能を豊富にする回路群です。電気ケトルの動作を例にして、具体的に見てみます。
『もし電気ケトル内の温度が90℃になったらヒーターを停止させる』
という電気ケトルの処理は、以下の3つに分けられます。

1.数秒おきに電気ケトル内の温度センサ出力を受け取る。
2.取得した電気ケトル内の温度と閾値90℃を比較する。
3.もし温度が閾値90℃以上の場合ヒーターを停止させる。

たとえば『1.』の『数秒おきに電気ケトル内の温度センサ出力を受け取る』の処理をする上で、数秒の測定にはタイマという時間を計測する周辺回路が必要になります。
また、温度センサ出力を受け取るためにはA/D(アナログーデジタル変換器)が必要になります。 したがって、タイマやA/Dといった周辺回路が実装されたマイコンは、『1.』の動作を実現できます。このようにマイコンの中に周辺回路を搭載することで、CPUやROM、RAMだけではできない機能を実現できます。

周辺回路は、マイコンの機能を豊富にする回路群

無料ダウンロード ADコンバータの仕組みと応用

汎用マイコンデータシートダウンロード

micon_local

共通スタイル・スクリプト - エレクトロニクス豆知識

サイドナビ - エレクトロニクス豆知識