マイコンとは? 家電や車を動かす小さなコンピュータ
マイコン(マイクロコントローラ、MCU)は、1つのチップにまとめた小さなコンピュータです。命令を実行する回路、プログラムをしまうメモリ、外の機器とやり取りする回路が入っています。炊飯器、リモコン、車のブレーキなどの「制御」を受け持ちます。センサで読む、判断する、モーターなどを動かす、をくり返しています。
この記事でわかること
- マイコンの中に入っているもの(CPU・メモリ・周辺回路)
- パソコンやスマホのプロセッサとの違い
- 「読む→決める→動かす」のくり返しと、割り込みのしくみ
- 決まった時間を守ることと、電池で長く動くための工夫
- 車にたくさんのマイコンが入っている理由と、古い世代の工場で作られる理由
前提知識: 特にありません。「CPUとは?」を読んでいると、前半がわかりやすくなります。
身近なところでは
炊飯器のスイッチを押すと、ご飯の量に合わせて火加減が変わり、炊けると保温になります。こうした機械の中で判断をしているのが、マイコンです。
日本の政府広報誌(2020年)によると、米の量に合わせて加熱を調整するマイコン式の炊飯器は、1979年に登場しました。今では、給湯器やおもちゃなど、電気で動く多くの製品に入っています。車には、100個を超えて載るものもあります。
「マイコン」は、マイクロコントローラを縮めた呼び方です。英語の略ではMCU(Micro Controller Unit)と書きます。
1つのチップに、小さなコンピュータ一式
コンピュータには、命令を実行する回路、プログラムやデータを覚えるメモリ、外とやり取りする口が要ります。パソコンでは、これらの多くが別々の部品です。マイコンは、全部を1つのチップに入れたものです。
中心は、命令を1つずつ取り出して実行する回路です。パソコンのCPUと同じ働きをする部分で、「CPUコア」と呼びます。
多くのマイコンでは、プログラムはチップの中の、電源を切っても消えないメモリにしまってあります。この種類のメモリを、フラッシュメモリと呼びます。USBメモリと同じ仲間です(細かな方式は違います)。電源を入れると、CPUコアはすぐにここから命令を読み始めます。
測った温度や計算の途中の数は、作業用のメモリに置きます。マイコンでは多くの場合、SRAMという種類が使われます。読み書きが速く、電源を切ると中身は消えます。量は品種により、1KBに満たないものから数MBまでです。1KBは、半角の英数字でおよそ1,000文字分です。
外の世界とつながる「周辺回路」
マイコンらしさがいちばん出るのが、外の世界とやり取りする回路です。まとめて「周辺回路」と呼びます。代表的なものは次のとおりです。
- 入出力の端子: チップの足(ピン)の電圧を、0か1かとして読んだり出したりします。ボタンを読む、LEDをつける、などに使います。GPIOと呼ばれます。
- アナログを数字に変える回路: 温度センサなどは、温度に応じて少しずつ変わる電圧を出します。この連続した値を、数字に置き換える回路です。ADC(A/D変換器)と呼びます。
- タイマ: 一定の間隔で来る合図(クロック)を数えて、時間を測ります。
- オン・オフで強さを変える回路: 出力のオンとオフを速くくり返し、オンの時間の割合で平均の強さを変えます。LEDの明るさやモーターの速さの調整に使います。PWMと呼びます。
- 通信の回路: ほかのチップと、決まった手順でデータを送り合います。UART、I²C、SPIなどの方式があります。違いは「I2C・SPI・UARTの違い」で表にしています。
無線の回路などを持つ品種もあり、組み合わせの違いで品種はとても多くあります。
パソコンやスマホのプロセッサとの違い
パソコンやスマホの中心のチップも、CPUを持つ点は同じです。ただし、たくさんのアプリを速く動かすことを優先して作られています。作業用のメモリ(DRAM)は別のチップで、容量は数GBにもなります。Windows や Android のような、機械全体を管理する大きな基本ソフト(OS)も動かします。
こうしたチップを、マイコンと区別して、マイクロプロセッサ(MPU)と呼びます。スマホの中心のチップ(SoC)の中身は「スマホの中にはどんな半導体が入っている?」で紹介しました。マイコンのほうは、決まった仕事を、安く、少ない電力で、確実にこなすことを優先しています。
| 比べる点 | マイコン | パソコン・スマホのプロセッサ |
|---|---|---|
| 主な仕事 | 機械を決まったとおりに制御する | たくさんのアプリを動かす |
| 作業用のメモリ | 主にチップの中。1KB未満〜数MB | チップの外のDRAM。数百MB〜数GB |
| OS | なし、または小さなOS | Windows・Android などの大きなOS |
| 電源を入れてから | すぐに動く | OSの起動に数秒以上 |
表は大まかな傾向で、境目ははっきりしていません。両方を1台に使い、画面やネットはプロセッサ、時間に厳しい制御はマイコン、と分担する製品も多くあります。詳しくは「MCUとMPUの違い」で比べています。
しくみ: 「読む→決める→動かす」をくり返す
マイコンのプログラムの多くは、同じ手順の輪をくり返す形です。炊飯器を例に、ごく単純にして見てみましょう。
- 読む: 温度センサの電圧を、ADCで数字にして読む
- 決める: その数字を、目標の温度と比べる
- 動かす: 低ければヒーターに電気を流し、高ければ止める
この3つを、短い間隔でずっとくり返します。測った結果で次の動きを決め、その結果をまた測るので、温度は目標の近くに保たれます。結果を見ながら調整するこのやり方を、フィードバック制御と呼びます。実際の炊飯器は、水を吸わせる、沸騰させる、蒸らすなど、段階ごとに目標を変えます。ここでは、その1つの段階だけを取り出しています。
割り込み: 急ぎの合図に、すぐ応える
輪の中で毎回ボタンを確かめる方法もあります。ただ、確かめる間隔が空くと、反応が遅れたり、短い押し方を見逃したりします。
そこでマイコンには、合図が来たら今の仕事を一時止めて、決めておいた処理を先に実行するしくみがあります。終わると、止めたところから元の仕事を続けます。このしくみを割り込みと呼びます。合図を出すのは、ボタンの端子、タイマ、通信の回路などです。
割り込みは、眠っているマイコンを起こす合図にもなります。毎回確かめる方法(ポーリング)との違いは「割り込みとポーリングの違い」で表にしています。
決まった時間を必ず守る
マイコンの仕事では、速さよりも「決まった時間までに必ず終えること」が大事な場合があります。例えば車のエアバッグは、ぶつかったことをセンサが感じてから、ごく短い時間のうちに開かなければ役に立ちません。
期限を1度でも守れないと失敗になる、こうした厳しい時間の条件をハードリアルタイムと呼びます。マイコンは仕事が少なく単純で、中で何が起きるかを予測しやすいので、この条件に向いています。パソコンは多くのアプリを公平に動かすことを優先し、時間の細かな保証は苦手です。
OSがあるマイコン、ないマイコン
パソコンでは、アプリの切り替えやメモリの管理をOSが受け持ちます(「OSとは?」)。マイコンでは、OSを使わず、上で見た輪と割り込みだけでプログラムを作ることもよくあります。OSのない、むき出しのハードウェアで動かすという意味で、「ベアメタル」とも呼ばれます。
仕事が増えて、1つの輪では管理しきれなくなると、小さなOSを使います。期限を守ることを重視して作られたOSで、RTOS(リアルタイムOS)と呼びます。仕事ごとに優先度を決め、急ぎの仕事が来たら素早く切り替えます。
電池で長く動く: ほとんどの時間は眠っている
エアコンのリモコンは、電池を長いあいだ替えずに使えます。中のマイコンは、ボタンが押されたときしか仕事がなく、残りの時間は眠って待っているのです。
仕事のない間、マイコンはCPUコアや多くの回路への合図(クロック)や電気を止め、ごくわずかな電力で待ちます。この状態をスリープモードと呼びます。ボタンが押されると、その割り込みで目を覚まし、信号を送ったら、また眠ります。
電池がどれだけ持つかは、「数字で見る」で計算してみます。
8ビット・16ビット・32ビット
マイコンの説明では、「8ビット」「32ビット」という言葉をよく見ます。大まかに言うと、CPUコアが1回の計算でまとめて扱える数の、0と1の桁数です。8ビットなら0〜255、32ビットなら約43億までの数を、1回で扱えます。これは単純にした説明で、実際には扱えるメモリの広さなどもからみます(0と1で数を表すしくみは「コンピュータは0と1でどうやって計算するの?」)。
桁が多いほど、大きな数や多くのメモリを扱う仕事が楽になります。一方、8ビットのマイコンは回路が小さく、単純な仕事には今も使われています。工作用の基板Arduino Uno(R3)も、8ビットのATmega328Pを使っています。
ただ、売上で見ると主流は32ビットです。調査会社IC Insightsは2021年、その年の車向けマイコンの売上の約77%を32ビットが占めると予測しました。16ビットは約18%、8ビットは約6%です。
32ビットのマイコンでよく使われるCPUコアの設計が、英Arm社の「Cortex-M」シリーズです。Arm社が設計を提供し、各社が自社のマイコンに組み込みます。Arm社の発表では、2020年10〜12月の3か月で、Cortex-Mを使ったチップが44億個出荷されました。
車の中のマイコン
車の中で、エンジン、ブレーキ、パワーウインドウ、エアバッグなどを受け持つ小さな制御装置をECUと呼びます。ECUは、マイコンと、センサやモーターにつなぐ回路を基板に載せたものです。
技術誌IEEE Spectrumの2021年の記事によると、安い車でもECUの数は100個に近づいています。高級車には、150個以上のものもあります。
車のマイコンは、エンジンのそばの熱、冬の寒さ、振動に、長い年月さらされます。そのため、決められた試験で耐えることを確かめた部品を使います。代表的な試験の基準が、米国の自動車用電子部品評議会(AEC)が定めたAEC-Q100です。
なぜ最先端の工場で作らないのか
スマホのSoCは「3nm」のような最先端の世代で作られます。一方、マイコンの多くは、それより何世代も前の、実績のある世代で作られます。McKinseyの2022年の分析では、車向けのチップの多くは90nm以上の世代です。世代の名前の意味は「「2nm」「3nm」は何の長さ?」で説明しています。
理由の1つは、プログラムをしまうフラッシュメモリです。フラッシュは、書き込みと消去に高い電圧を使います。その電圧を扱うトランジスタは、世代が進んでも同じ割合では小さくなりません。工程も増えて、費用がかさみます。調査会社Yole(2024年)によると、28〜22nmあたりが限界というのが業界の共通の見方です。
ルネサスは2018年、28nmでフラッシュを内蔵した車載マイコンの試作品を出し始めました(同社は「業界初」)。その先へ進むため、フラッシュの代わりの新しいメモリを使う動きもあります。NXPとTSMCは2023年、16nmの世代で、磁気を使うMRAMを車向けに作ると発表しました。
もう1つの理由は、費用です。マイコンの仕事に最先端の速さはたいてい要らず、安く、同じ品質で長く作り続けられることが大事です。ただ、この世代の工場の不足は、2020〜2022年に車の生産が止まった理由の1つにもなりました(「半導体不足はなぜ起きた?」)。
プログラムはどうやって書くの?
マイコンのプログラムは、多くの場合、C言語のような人が読み書きしやすい言葉で書きます。それをパソコンで、CPUコアが実行できる0と1の並び(機械語)に変換します。できた機械語は、USBケーブルなどを使ってマイコンのフラッシュに書き込みます。
こうして機器の中に組み込まれ、ふだんは書き換えないプログラムを、ファームウェアと呼びます。
マイコンは、個人でも手軽に試せます。2021年1月には、Raspberry Piが4ドルの基板「Raspberry Pi Pico」を出しました。載っているのは自社設計のマイコンRP2040で、Cortex-MのCPUコアを2つ持っています。
ただし、RP2040はフラッシュを内蔵していません。プログラムは、基板に載った別のフラッシュのチップに置きます。「フラッシュを内蔵」は多くの品種の傾向で、例外もあるのです。なお、Picoの付かない「Raspberry Pi」は、Linuxが動く小さなパソコンで、マイコンではありません。
よくある誤解
誤解: マイコンは、遅くて性能の低いCPUにすぎない
実際は、目指すものが違います。マイコンが優先するのは、決まった時間を守ること、電力が少ないこと、外の機器とじかにやり取りできることです。パソコンのCPUを炊飯器に入れても、値段も電力も大きすぎます。クロックの数字だけを比べると遅く見えるので、「安物のCPU」と思われがちです。
誤解: コンピュータが入っているのは、パソコンやスマホのような高い製品だけ
実際は、炊飯器やリモコン、おもちゃにも入っています。最初期のマイコンTMS1000(1974年発表)は、大量に買えば1個約2ドルでした(米国の計算機歴史博物館)。画面もキーボードもないので、中にコンピュータがあると気づきにくいだけです。
誤解: マイコンも、いつもOSを動かしている
実際は、上で見たとおり、OSを使わずに動くマイコンがたくさんあります。Windows や Linux のような大きなOSは、必要なメモリが多すぎて、一般的なマイコンには載りません。パソコンやスマホではOSが当たり前なので、マイコンにもあると思われがちです。
数字で見る
| 項目 | 数字 |
|---|---|
| Cortex-Mを使ったチップの出荷(Arm社) | 2020年10〜12月の3か月で44億個 |
| 車向けマイコンの売上の内訳(IC Insights、2021年の予測) | 32ビット約77%、16ビット約18%、8ビット約6% |
| 車1台のECUの数(IEEE Spectrum、2021年) | 安い車でも100個近く、高級車では150個以上のものも |
| RP2040の作業用メモリ(SRAM) | 264KB。iPhone 16 Proのメモリ(8GB)の約3万分の1 |
スリープの効果を、ボタン電池で計算してみます。CR2032という電池の容量は、Panasonicの資料で225mAhです。225ミリアンペアの電流なら、1時間流せる量です。眠っている間と起きている間をならした平均の電流が、0.01ミリアンペアだとします。すると、22,500時間、約2.6年もちます。平均が10倍の0.1ミリアンペアなら、約3か月です。これは単純にした計算です。電池が自然に減る分、温度、一瞬だけ流れる大きな電流の影響は省いています。
もっと詳しく学ぶ
- 違いを表で見る: NAND型とNOR型フラッシュメモリの違い、ARM・RISC-V・x86の違い、CAN・LIN・車載イーサネットの違い(ECUどうしの通信)
- 次の一歩の用語: ウォッチドッグタイマ、逐次比較型ADC、ゾーンアーキテクチャ
- 数字で試す: PID制御のステップ応答シミュレーター(フィードバック制御の動き)、LEDの抵抗計算ツール(マイコンにLEDをつなぐとき)
- 関連する記事: 「パワー半導体とは?」(マイコンの指示で大きな電力を切り替える部品)