概要
マイコン(MCU: Microcontroller Unit)は、CPU・メモリ(RAM・フラッシュ)・入出力ペリフェラル(GPIO・UART・SPI・I2C・ADCなど)を1つのチップに統合した小型コンピュータです。「マイクロコントローラ」とも呼ばれ、電子機器の制御・処理の中核を担います。
パソコンやMPU(マイクロプロセッサ)が外付けメモリやOSを前提とするのに対し、マイコンはその1チップだけで完結した動作が可能です。消費電力が小さく、低コストで、リアルタイム制御に適した設計になっています。センサー・モーター制御・通信処理など、あらゆる組み込み機器の頭脳として使われています。
歴史・背景
マイコンの起源は1971年にIntelが発売した「4004」に遡ります。これは世界初の商用マイクロプロセッサで、4ビットのCPUのみの製品でした。1974年にはIntelが8ビットの「8080」を、Motorolaが「6800」を発売。1970年代後半にはテキサス・インスツルメンツとIntelが周辺機能を統合したマイクロコントローラを投入しました。
日本では1970年代後半から組み込み用途での採用が広がり、家電・工業機器に組み込まれるようになりました。1990年代にはルネサス(旧日立・旧三菱電機)のH8シリーズ、NECのV850シリーズなど国産マイコンが産業機器で広く普及。2000年代以降はARMアーキテクチャを採用したARM Cortex-Mシリーズが主流となり、STM32・nRF52・NXP KinetisなどがARM Cortex-Mを採用しています。
近年はIoTの普及に伴い、ESP32のようなWi-Fi・Bluetooth内蔵マイコンが急成長。またRISC-Vベースのオープンソースマイコンも登場し、選択肢が増えています。
技術仕様
CPUアーキテクチャ
現代のマイコンで主流のアーキテクチャは:
| アーキテクチャ | 代表製品 | 特徴 |
|---|---|---|
| ARM Cortex-M0/M0+ | STM32F0, nRF51 | 超低消費電力・小面積 |
| ARM Cortex-M3 | STM32F1, LPC1768 | バランス型、Thumb-2命令 |
| ARM Cortex-M4 | STM32F4, nRF52 | DSP・FPU搭載 |
| ARM Cortex-M7 | STM32H7 | 高性能・キャッシュ付き |
| ARM Cortex-M33 | STM32L5, nRF9160 | セキュリティ強化(TrustZone) |
| Xtensa LX7 | ESP32-S3 | AI命令拡張 |
| RISC-V | ESP32-C3, GD32VF103 | オープンISA |
メモリ構成
マイコンのメモリは大きく3種類:
- フラッシュメモリ: プログラム格納用不揮発メモリ。マイコンによって16KB〜数MB。書き換え回数は通常10,000〜100,000回。
- SRAM: 実行時の変数・スタック・ヒープ格納。高速だが電源断で消える揮発メモリ。2KB〜1MB程度。
- EEPROM: 設定値など少量の不揮発保存。フラッシュの一部を代用するケースも多い。
クロック・消費電力
動作周波数は8MHz〜数百MHzまで幅広い。消費電流の目安:
- スリープ(Cortex-M0+): 1µA以下
- 通常動作(64MHz、3.3V): 5〜20mA程度
- 通常動作(240MHz ESP32、Wi-Fi送信時): 200〜300mA
ペリフェラル(周辺機能)
代表的な内蔵ペリフェラル:
・GPIO : 汎用入出力ピン(デジタル入出力)
・UART / USART : シリアル通信(非同期)
・SPI : 同期式シリアル通信(高速)
・I2C : 2線式バス(多点接続)
・ADC : アナログ→デジタル変換(8〜16bit)
・DAC : デジタル→アナログ変換
・PWM : パルス幅変調(モーター・LED制御)
・タイマー : 計時・割り込み生成
・DMA : CPUを介さないメモリ転送
・USB : USBホスト/デバイス
・CAN : 車載/産業用バス
・Ethernet MAC : 有線LAN(外付けPHYと組み合わせ)
動作原理
マイコンは以下の流れで動作します:
- リセット: 電源投入またはリセット信号でリセットベクタから実行開始
- 初期化: スタックポインタ・クロック・ペリフェラルの初期設定
- メインループ: アプリケーションコードの実行
- 割り込み処理: 外部イベント・タイマー割り込みでISRへ分岐
- スリープ: 低消費電力のスリープモードへ移行し、割り込みで復帰
フラッシュからコードをフェッチ→デコード→実行のパイプラインが動作し、DMAを使うことでCPUを止めずにメモリ転送が可能です。
// STM32 HALを使ったGPIO制御の例
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // PB0をHighに
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // PC13をトグル
HAL_Delay(500); // 500ms待機
用途・ユースケース
マイコンは幅広い用途で使われます:
- 家電製品: 洗濯機・電子レンジ・エアコンなどの制御基板
- 産業機器: センサー計測・モーター制御・PLC(PLCの内部もマイコン)
- 自動車: ECU(エンジン制御ユニット)・各種車載コントローラ
- 医療機器: 血圧計・血糖値計・医療ポンプ制御
- IoT機器: センサーノード・スマートホーム機器
- ウェアラブル: スマートウォッチ・フィットネストラッカー
実装・開発のポイント
選定の基準
マイコン選定では以下を考慮します:
- 処理能力: 計算量・必要な同時タスク数に合わせてコアとクロックを選ぶ
- メモリ: フラッシュはプログラムサイズ+OTAバッファ、RAMは変数・スタック・ヒープの合計
- ペリフェラル: 必要なUART数・SPI数・ADCチャンネル数
- 消費電力: 電池駆動なら動作時・スリープ時の電流を確認
- サプライチェーン: 長期供給・調達価格・代替品の有無
- 開発環境: IDE・デバッガ・サポート品質
開発フロー
1. 評価ボード(EVK)で機能検証
2. プロトタイプ基板でペリフェラル検証
3. [ファームウェア](/embedded/glossary/firmware/)開発(C/C++ + [RTOS](/embedded/glossary/rtos/)または[ベアメタル](/embedded/glossary/bare-metal/))
4. [インサーキットデバッガ](/embedded/glossary/in-circuit-debugger/)(JTAG/SWD)でデバッグ
5. 量産基板でのファーム書き込み・検査
よくある落とし穴
- スタックオーバーフロー: 再帰処理や大きなローカル変数でRAMを使い過ぎない
- フラッシュ書き込み寿命: 頻繁な書き込みは寿命を縮める。ウェアレベリングを考慮
- クロック設定ミス: ペリフェラルへのクロック供給を忘れると動作しない
- 割り込みの優先度: RTOS使用時は割り込み優先度をRTOSの範囲内に設定
他技術との比較
マイコン vs MPU
| 項目 | マイコン | MPU |
|---|---|---|
| 内蔵メモリ | あり(フラッシュ・RAM内蔵) | なし(外付け必須) |
| OS | ベアメタル or RTOS | 通常Linux等を使用 |
| 消費電力 | 低い(µA〜mAオーダー) | 高め(数百mA〜W) |
| 起動時間 | 速い(ミリ秒〜) | 遅め(数秒〜) |
| 単価 | 安い(数十円〜) | 高め(数百円〜) |
マイコン vs FPGA
FPGAは回路そのものを書き換えられるため、超高速・並列処理に優れますが、開発難易度・コストが高い。制御ロジックが明確な用途はマイコン、超高速処理や信号処理が必要な用途はFPGAという使い分けが一般的です。