# マイクロコントローラ

一般的なマイクロコントローラの外見（Atmel AVR）
**マイクロコントローラ** (英: microcontroller) とは、CPUに加えてRAM、ROM、I/Oポートなどを1つの集積回路（IC）にまとめた、いわば極小のコンピュータ。主に機器の制御に使われる。マイクロな（きわめて小さな）コントローラ（制御装置）なので、マイクロコントローラと命名された。略語は**MCU**（エムシーユー）。

日本語ではマイコンとも呼ばれる。

## 概要

CPUの機能を備えており1つの集積回路にまとめたものなので、マイクロプロセッサの一種である。ただし、マイクロコントローラは通常、1 MHzから200 MHz（メガヘルツ）程度のクロック周波数で動作しており、マイクロプロセッサの中では比較的動作速度が低いという特徴がある。主な用途として何らかの機器に組み込んで使うこと（組込システム）を想定しているので、電力消費量を減らすためにクロック周波数を抑えてある。よくあるパーソナルコンピュータのマイクロプロセッサのほうは、大量に電力を消費するわけだが、そちらはたいていは1 GHzから3 GHz（ギガヘルツ）ほどで動作しているので、そちらの数分の1から数千分の1程度の動作速度ということになる。マイクロコントローラは消費電力が抑えてあるので組込システムに使いやすい。

また、一般的なマイクロコントローラはCPUに加えて、主メモリ（全体、場合によっては一部）とI/Oポートを内蔵している。コンピュータがコンピュータとして動作するには、CPUだけでは足りず、メモリやI/Oポートも必要であり、PC用マイクロプロセッサの場合はそれらの必須の機能を得るにはそれを提供する集積回路を別途追加しなければならず、基板の上で集積回路の数が増えていってしまい、基板の上の回路のパターンは複雑化し、基板の面積も大きくなっていってしまう。それに対して、マイクロコントローラのほうはコンピュータに必要な集積回路のほとんどをひとつの小さな集積回路にまとめているので、（いくつか集積回路を足す場合でも、全体として）とても小さく、簡潔にまとまるので、組込システムなど特に「コンピュータの物理的な小ささ」が求められる用途に向いている。

マイクロコントローラはさまざまな組み込みシステムで使われている。マイクロコントローラは近年のあらゆる家電製品や電子機器類で使われているので、PCで使われるマイクロプロセッサより遥かに大量に存在している。

電子工作の世界でも、マイクロコントローラを使うと電子部品の数が少なくて済むので非常に便利なパーツである。（自分で多数の電子部品を組み合わせて自作の回路を作る場合と比べて、はんだづけの手間も圧倒的に少なくてすみ、ミスが入り込みにくく、はんだづけ不良や接触不良も減るので動作も安定する。ブレッドボードに挿してわずかな部品数とわずかな手間で制御装置を実現することもできる。）また近年メーカー・ムーブメント（既成品に頼るばかりでなくデジタル技術も使い自分であれこれと自作してみようという潮流）でワンボードマイコンのArduinoも広まったわけだが、ArduinoはAtmel社のマイクロコントローラ en:ATmega328で動作している。電子工作の世界では(Arduinoを使わずとも）ATmega328や他のマイクロコントローラをブレッドボードに直接挿してリード線を伸ばしてさまざまな小さな機器を制御することも行われる。価格もお手頃のものが多く、たとえばATmega328は（その時々の為替レートや需給関係にもよるが）1個300円から500円ほどととてもお手頃な価格なので、「定番の電子部品」として親しまれている。

2010年代後半からはマイクロコントローラはIoTを実現する集積回路としても評価が高まっている。

## 歴史

マイクロコントローラが登場する以前、電子制御分野における制御シーケンスはアナログ回路や論理回路といったハードウェア的に回路で組まれていたため、手順を一部変更するだけでも回路の変更が必要だった。それら制御シーケンスを、コンピュータシステムを用いたシステムに置き換えた事から始まった。プログラム内蔵方式の特徴を生かしたコンピュータシステムの場合、回路は変更せず内蔵するプログラムを書き換えるだけで制御内容の変更や機能追加が行えるようになった。さらにコンピュータシステムをワンチップにしたものがマイクロコントローラーであった。

"世界最初のマイクロコントローラー"は、1971年9月に登場したテキサス・インスツルメンツ TMS0100シリーズの TMS1802NC (TMS0102)と言われている。だがTMS1802NCは、電卓専用だったため汎用性はなかった。

"汎用性があって大量に使用された最初のマイクロコントローラー"は、1974年に登場した**テキサス・インスツルメンツ TMS1000**シリーズであった。1971年ころからテキサス・インスツルメンツが4ビットのMCU、TMS1000の開発に着手。これは当時としては画期的なチップであり、4ビットCPU、1KB ROM、256ビットRAM、および入出力ラインを単一のチップ上に統合したものであった。1974年ころから出荷を開始。当時の低価格帯の電子式卓上計算機や、知育玩具の*Speak & Spell*などの制御装置として使われた。

1976年にインテルが8ビットの**Intel 8048**の出荷を開始。これはキーボードコントローラ、プリンタ、初期のゲーム機コントローラ、Sequential Circuits社のシンセサイザー *Prophet-5*などの制御装置として使われた。

1978年にはモトローラが**Motorola 6801**の出荷を開始。これは8ビットのMotorola 6800をベースに開発されたもので、6800の回路に加えてRAM 128バイト（そのうち64バイトは低電力保持可能）、ROM 2048バイト（2Kバイト）、29本のパラレルI/Oライン（Port 1,2,3,4として利用可）、16ビットのプログラマブル・タイマー、シリアル通信インタフェース、クロックジェネレータ、を内蔵・統合し、MC6800の命令セットに10個の新命令（主に16ビット演算や乗算命令など）を追加したものである。動作モードは2つ用意されており、(1)シングルチップ・モードは、内蔵のRAMとROM、I/Oを使用し、ワンチップMCUとして動作し　(2)外部バス拡張モードは、内蔵ROMを無効にし、MC6800と同様に外部メモリや周辺LSIを最大64Kバイトまで接続して動作するMPUとして機能する。Motorola 6801は自動車のエンジン制御や産業用ロボットなど、高度な組み込み制御システムに利用された。

1979年にZilogが8ビットのMCU、**Zilog Z8**の出荷を開始。モデム、プリンタなどの制御装置のほか、様々な汎用の制御装置として使われるようになった。

マイクロコントローラが進化するにしたがってチップに内蔵する回路が増えていき、外付けにしなければならない部品が減っている。1980年代から1990年代にかけて、マイクロコントローラの中でも最も成功したものは8ビットのインテル8051とザイログZ80の派生品である。通信機器では1980年代後半から1990年代にかけてMC68000とその派生品も多く使われた。

現在ではARMアーキテクチャとMIPSアーキテクチャの派生製品が、32ビット組み込みプロセッサの大きな割合を占めている。特に携帯電話端末におけるARMのシェアは高く、2006年の情報では出荷数が年間24億個を超えたとされる。

## 構成

組み込みシステムには4つの基本部品が必要となる。それは、CPUコア、プログラムを格納するメモリ(ROMかフラッシュメモリ)、ひとつ以上のタイマー(設定可能なものとウォッチドッグタイマー)、外部周辺機器などと通信するための入出力部である。マイクロコントローラはこれらが全てひとつの集積回路に組み込まれている。マイクロコントローラは、汎用CPUと比較した場合に周辺部品が少なくて済むため、コンピュータを組み立てるのが容易である。

一般的なマイクロコントローラはクロックジェネレータとRAMおよびROM（EPROMやEEPROM）を内蔵している。これを動作できるようにするには、ソフトウェアをROMに格納して、水晶振動子を接続する。マイクロコントローラは様々な入出力デバイスを内蔵している。アナログ-デジタル変換回路、タイマー、汎用非同期シリアル通信(UART)、またはI2Cバス、SPIバス、CANバスといった特殊なシリアル通信インターフェイスなどである。これらの周辺デバイスは特殊な命令で制御される。

マイクロコントローラと言った場合、一般的にはCPU機能とメモリや各種ペリフェラルを内蔵した集積回路を指すが、CPU機能のみの単機能集積回路（マイクロプロセッサ）でも組み込み用途で用いる場合はマイクロコントローラと呼ばれることがある。これは特にCPU機能が8ビットのローエンド製品に顕著である。逆にペリフェラルを内蔵するプロセッサであっても、特に8ビットより上位のCPU機能を含むものは、マイクロコントローラとは呼ばずにプロセッサと呼ばれることもある。

## 開発環境

当初マイクロコントローラは、搭載メモリの少なさからアセンブリ言語でのみプログラムが組まれていた。メモリ量やCPUの処理能力が向上すると、開発効率の観点からC言語が使われるようになった。

ホビーユースや学習用途では、上記言語より導入がスムーズで初心者にとって理解しやすいBASIC言語インタプリタなどの言語処理系があらかじめROMに書き込まれた半完成製品も存在し、後述のBASIC Stampなどが該当する。

## 主なマイクロコントローラ

### ARM

* ARM Cortex-M シリーズ

### アプライド・マイクロ・サーキット

従来IBMが製造販売していたマイクロコントローラシリーズ。このシリーズのライセンスはApplied Micro Circuits Corporation(en)に売却された。

* 403 PowerPC CPU
	+ PPC 403GCX
* 405 PowerPC CPU
	+ PPC 405EP
	+ PPC 405GP/CR
	+ PPC 405GPr
	+ PPC NPe405H/L
* 440 PowerPC Book-E CPU
	+ PPC 440GP
	+ PPC 440GX
	+ PPC 440EP/EPx/GRx
	+ PPC 440SP/SPe

### アトメル

* Atmel AT91 series (ARM THUMBアーキテクチャ)
* AT90, Tiny, Mega, AVR32, and XMEGA シリーズ – AVR (Atmel Norway design)
* Atmel AT89 series (Intel 8051/MCS51 アーキテクチャ)
* MARC4

### サイプレス・マイクロシステムズ

* PSoC
	+ CY8C2xxxx
	+ CY8C3xxxx
	+ CY8C5xxxx
* AN21xx (EZ-USB)
* CY7C68xxx (EZ-USB FX2)

### フリースケール・セミコンダクタ

モトローラの半導体事業部が分離/独立した会社。現在はNXPに買収されている。

* 8ビット
	+ 68HC05
	+ 68HC08 (CPU08)
	+ 68HC11
* 16ビット
	+ 68HC12 (CPU12)
	+ 68HC16 (CPU16)
	+ Freescale DSP56800 (DSPcontroller)
* 32ビット
	+ Freescale 683XX (CPU32)
		- 68360 (QUICC)
	+ ColdFire (68020互換RISC)
	+ M・CORE
	+ PowerPCコアファミリ
		- MPC500 (車載向けPowerPC)
		- MPC850/860 (PowerQUICC)
		- MPC8240/8250/8260 (PowerQUICC II)
		- MPC8540/8555/8560 (PowerQUICC III)

### 富士通

スパンションを経て、現在はサイプレスから販売されている。

* F2MC ファミリ (8/16ビット)
* FR ファミリ (32ビット)
	+ FR80
* Traveo (32ビット)

### Holtek(en)

* HT8

### インテル

→詳細は「インテル § 組込用途」を参照
* 8ビット
	+ 8XC42
	+ MCS48
	+ MCS51
	+ 8061
	+ 8xC251
* 16ビット
	+ 80186/88
	+ MCS96
	+ MXS296
* 32ビット
	+ 376
	+ 386EX
	+ i960
	+ StrongARM
	+ XScale（2006年にマーベル・テクノロジー・グループへ売却）

### Microchip

* 8ビットPIC
	+ PIC10シリーズ
	+ PIC12シリーズ
	+ PIC16シリーズ
	+ PIC18シリーズ
* 16ビットPIC
	+ PIC24シリーズ
* 16ビットdsPIC
	+ dsPIC30シリーズ
	+ dsPIC33シリーズ
* 32ビットPIC
	+ PIC32シリーズ

### ナショナル セミコンダクター

* COP8
* CR16

### ルネサス エレクトロニクス

* Renesas RXファミリ (32ビット)
* Renesas RAファミリ (32ビット)
* Renesas Synergy (32ビット)
* Renesas RL78ファミリ (16ビット)
* μCOMシリーズ (4ビット、8ビット、16ビット)
* 17K (4ビット)
* 78K0S (8ビット)
* 78K0 (8ビット)
* 78K0R (16ビット)
* 78K4 (16ビット)
* Vシリーズ
	+ V40/V50/V53 (16ビット)
* V850 (32ビット)
* RH850 (32ビット)
* VRシリーズ (MIPS64)
	+ VR41xx (MIPS64)
	+ VR5500 (MIPS64)
	+ VR7700 (MIPS64)
* H8
	+ H8/300H
* SuperH
	+ SH-1
	+ SH-2
* M32R
* M16C
* R8C/Tiny

### NXP

フィリップスの半導体事業部がファンドに買収され独立した会社で、NXPに社名が変更。

* LPC2000 (ARM7)
* LPC900
* LPC700

### STマイクロエレクトロニクス

* ST 62
* ST 7

### テキサス・インスツルメンツ

* TMS370
* MSP430
* TMS320 (DSP)

### 旧・東芝（現・東芝デバイス&ストレージ）

* TLCS-47 (4ビット)
	+ TMP47C4xx
* TLCS-870 (8ビット)
* TLCS-900 (16ビット)
* TMPZ84C0xx (Z80互換)
* TX19/TX39/TX49 (MIPS32, MIPS64)

### ウェスタンデザインセンター

* W65C134 (8ビット)
W65C02ベースのマイクロコントローラ
* W65C265 (16ビット)
W65C816ベースのマイクロコントローラ

### Ubicom（en）

* SX-28, SX-48, SX-54：高性能 8ビットマイクロコントローラ (PIC16互換)
* IP2022, IP3023 (マルチスレッド指向の独自アーキテクチャ)

### ザイログ

* Z80
* Z86E02
* Z8

### ザイリンクス

* MicroBlaze FPGA用ソフトコア 32ビットマイクロコントローラ
* PicoBlaze FPGA用ソフトコア 8ビットマイクロコントローラ

### アルテラ

* Nios FPGA用ソフトコア 32ビットマイクロコントローラ
* Nios II FPGA用ソフトコア 32ビットマイクロコントローラ

### Raspberry Pi

* Raspberry Pi Pico シリーズ（ARM Cortex-M）

### マイクロコントローラの半完成応用製品

#### BASIC組み込みマイクロコントローラ

マイクロコントローラに、BASICインタプリタ、電源装置などを組み合わせたパッケージとして販売している小企業が数多く存在する。PICが使われていることが多い。

##### Parallax, Inc.（en）

* BASIC Stamp：有名だが、低速で高価。
* SX-Key：プログラマは高価だが、チップ自体は安い。

##### 秋月電子通商

* PIC-BASIC：BASIC Stampの日本版とも言える製品で日本語の資料が充実している。

##### PicAxe（en）

PICにBASICをロードするよりも安価であることが特長。内蔵するBASICは機能が豊富だが構造的な制約が多い。

* 組み込みシステム
* インサーキット・エミュレータ (ICE)
* 電子制御