マイコンについて調べた
動機
組み込み周辺の知識がなさすぎてFPGAでできることがあまりイメージできなかったので、まずは現在使用されているマイコンについて学ぼうと思った。
マイコンとは
マイコンは半導体デバイスの一種で頭脳のようなものらしい。
冷蔵庫や洗濯機、電子ケトルや車など、殆どの電子機器にマイコンが搭載されている。
基本的な演算機能に加えて、センサ、ボタン、音声などのI/O周辺も対応している。
電子回路でそれを表現するのはすごく手間なので、マイコンを利用すると回路が簡単になる。
その代わり、マイコンの挙動を設定するためにプログラムをマイコンに書き込む必要がある。
その手軽さと汎用性の高さ、拡張性の高さから重宝されていたが、今はFPGAが台頭してきているとのこと。
マイコンの種類
マイコンには扱うデータの大きさや汎用性、処理速度や消費電力などによって多くの種類の製品が存在し、自分の用途に合わせて1つまたは複数のマイコンを回路に組み込んで仕様する。
マイコンは大が小を兼ねない製品なので最適なものを選ぶ必要があり、それならば自分でマイコンをカスタマイズしたほうが良いよねという流れからFPGAが台頭しているらしい。これには納得。
マイコンの使い方
センサ:物理的な数値を信号に変えるもの
アクチュエータ:信号から物理的な変化を発生させるもの
マイコンはこの2つを利用して電気信号世界と現実世界を行き来している。
制御対象が熱であっても圧力であってもマイコンに求められることは同じで、センサの値に応じてアクチュエータの挙動を制御するだけだ。変わるのはマイコンに接続するセンサやアクチュエータなどのI/Oデバイスだけである。
マイコンのしくみと動かし方―徹底図解 (トランジスタ技術special forフレッシャーズ) では保温機能付き電動給油ポットの仕組みを例に、マイコンの応用方法を解説してくれている。この本を読んでマイコンについて詳しく学んだ。
電動給油ポットの機能をまず挙げる。
1. 水を沸騰させてお湯を作る
2. お湯を保温する
3. お湯の温度を表示する
4. ボタン操作でお湯が出る
5. ロック機能を持つ
次にそれぞれの機能を複数の処理に分解する。
例えば、「1. 水を沸騰させてお湯を作る」なら以下の通り。
目標温度を100度に設定する
ヒータのON/OFF 操作
温度センサから温度情報を取得する
ここで温度情報を取得していることに着目し、「3. お湯の温度を表示する」を組み込む。
また、同様の機能で保温もできることから「2. お湯を保温する 」にも転用できることに気づく。
以上を踏まえてフローチャートを作ると以下のようになる。(面倒なので箇条書きで)
- 目標温度を100度に設定する
- ☆
- 温度測定
- 温度表示
- 測定温度と目標温度を比較する
- 測定温度<目標温度:ヒータON
- 測定温度>目標温度:ヒータOFF, 目標温度を90度に設定し☆に戻る
実際は保温時の温度設定にON/OFF間で幅を持たせてヒータの高速ON/OFF切り替えを避けるという工夫もされているらしい。
これをC言語で実装する。例えば測定温度に応じてヒータを操作する部分は以下のようになる。
void pot_control() { int temp_target; int flag_boiled; temp_target = TEMP_BOIL; /* = 100 */ frag_boiled = NO; /* unboiled */ for( ; ; ) { if(temp_sensor < temp_target) { port1 = HEATER_ON; if(flag_boiled == YES) { temp_boiled = TEMP_HIGH; } } else { port1 = HEATER_OFF; if(temp_sensor >= TEMP_BOIL) { flag_boiled = YES; } temp_target = TEMP_LOW; } }
この無限ループの実行中に温度測定と温度表示の処理をタイマ割り込みさせる。
沸騰・保温・温度表示を例に挙げたが、他の機能についても同様にフローチャートの作成、プログラムを作成、マイコンに書き込むことでそれらの機能を実現させている。
マイコンの仕組み
マイコンにはCPUとメモリ、I/Oポートが組み込まれている。
CPUはMPU(Micro Processing Unit)と呼ばれることもあるらしい。
機械語の仕様はマイコンごとに異なるので少し面倒そう。
パソコンと同じじゃねーかと言う話だが、マイコンは周辺装置を通じて外部機器を制御することが目的らしい。
マイコンを制するものは電子機器を制する気がしてきた。
マイコンの詳しい仕組みは既習事項であるアーキテクチャの話になるのでカット。