組み込みソフトを動かす基板
(マイコン・メモリ・センサ・通信用ICなど)

身近な家電製品から自動車、さらには医療機器や産業機械など多くの製品には「組み込み機器」が入っています。この機器は本体と比べれば小さくて、単なる箱のようにも見えます。

しかし内部には必ず電子基板があり、その上で組み込みソフトが常に動き続けているのです。基板にはマイコン、メモリ、センサ、通信用ICなどの電子部品が搭載されていて、それぞれが重要な役割を担っています。

組み込みソフト開発の際には、基板に載せられる部品構成や、それに伴う物理的な制約を踏まえて考えておかなければなりません。

組み込みの脳「マイコン(MCU)」とは

基板の中核を担うのが、マイクロコントローラ(通称:マイコン/MCU)やマイクロプロセッサ(MPU)です。これは人にたとえるなら脳に相当するパーツであり、プログラムを実行して計算や判断を行い、その結果に基づいて周辺の部品に指示を出す司令塔です。

さまざまなパーツと連動して機能を発揮

マイコンにもマイクロプロセッサにもCPU(中央演算処理装置)が積まれています。このCPUがプログラムの実行や計算、判断を行います。具体的にはセンサから情報を受け取り、その結果に応じてモーターを動かしたり、ランプの点灯や通信を行ったりします。マイコンには通常、これらのセンサやモータを接続するためのI/O(ペリフェラルと呼びます)が備わっており、1チップでそれらを接続してコントロールできます。一方マイクロプロセッサには、これらのI/Oをチップの外に依存する代わりに、通常はマイコンより計算能力を高くできる特長があります。I/Oをあまり使用せず、演算に特化したようなアプリケーション、例えば画像処理などにはマイクロプロセッサが適しています。

ただしマイコン自体が単独で動けるわけではありません。安定した電源供給、正常な動作タイミングを司るクロック回路、電源投入時に確実に起動するリセット回路、書き込みや不具合解析に使うデバッグ端子などが揃って、はじめて製品として使えるシステムが成り立ちます。組み込みソフト開発では、これら周辺回路の特性までを踏まえておく必要があります。

マイコンの作業場「メモリ」とは|ROM/RAMの役割と厳しいメモリ制約

マイコンと並んで重要なのがメモリ、組み込み機器では主にROM(不揮発性)とRAM(揮発性)が使われます。

ROMとRAM、それぞれの役割

ROMは電源を切っても内容が消えないため、プログラム本体や初期設定値、ログデータなどを保存する場となります。RAMは実行中の計算内容や一時的なデータを置く作業領域であり、電源を切ると内容は消えます。RAMには処理速度の速いSRAMと、容量が大きく安価なDRAMがあります。組み込み機器では電力効率や回路のシンプルさなどの理由により、基本的にSRAMが選ばれます。組み込み機器ではこれらのメモリを用途によって使い分けています。

パソコンやスマートフォンを使用する際に、メモリ不足を意識するケースはまずありません。しかし、組み込み機器ではメモリ容量がきわめて限られているため、使える分だけ使うという考え方では問題を起こすリスクがあります。特にRAMは処理内容が増えるほど消費されやすく、設計を誤ると長時間動作した後に突然停止するなどの不具合を起こします。そのため動的メモリの確保は、可能な限り避けるのが基本です。

メモリについては、使える分をすべて使うような発想ではなく、いかに使わずに済ませるかと考え、適切なマージンを確保する必要があります。

マイコンと現実世界との窓口「センサ」とは|種類と設計で失敗しないポイント

外界の状態を知るために使われるのがセンサです。センサは温度、加速度、圧力、光や音など現実世界のさまざまな物理量を電気信号に変換してマイコンに伝えます。最近ではジャイロセンサ、地磁気センサ、湿度センサ、ガスセンサなど多様な種類のセンサも小型化や低価格化し、幅広い製品に搭載されるようになりました。

センサの2タイプと設計のポイント

センサにはデジタルとアナログの2タイプがあり、デジタルセンサとマイコンとの接続には、I2C(Inter-Integrated Circuit)やSPI(Serial Peripheral Interface)などのデジタル通信方式が使われます。アナログセンサの場合はADC(アナログ・デジタル・コンバータ)を使って、アナログ信号をCPUが読み取れるデジタル信号に変換してからCPUに取り込まれます。

センサの設計で重要なのは、外界を知るタイミングとその頻度の設定です。あまり頻繁に読みすぎると処理負荷や消費電力の増加につながり、逆に間隔が空きすぎると必要な変化を見逃してしまいます。たとえば温度センサなら数秒から数分に1回程度の読み取りで基本的に十分ですが、振動検知なら数十ミリ秒単位でのサンプリングが求められるケースもあります。

電源投入直後にはセンサの値が安定しないケースもあるため、ウォームアップの時間も必要です。また温度変化によって誤差が生じる場合や、個体ごとに微妙な誤差もあるため、温度補正やキャリブレーションなど誤差に対応する仕組みもソフトに組み込んでおきます。センサメーカによって提供されるデータシートには、これらの特性が記載されているため、目を通しておく必要があります。

マイコンシステムの全体構成例を表すイメージ図

組み込みの通信機能とは|「失敗」を前提とした安定化設計

組み込み機器は基本的に、他の装置やネットワークと連携して動きます。そのため通信用ICによる通信機能が欠かせません。通信方式としてはWi-Fi、Bluetoothなどの無線通信、Ethernet(有線LAN)や RS232C、RS485等の装置間通信などがあります。特にIoT機器では低消費電力で動作し、配線の不要な無線通信技術が使われています。

つながらない場合も考えて設計する

通信を考える際に頭においておくべきは「つながらない場合がある」という前提条件です。通信においてはノイズによるエラー、相手側の状態、一時的な接続切れ、電波干渉などのトラブルが、必ず発生するものと心得ておかなければなりません。特に無線通信では周囲の環境や障害物の影響を受けやすいため、安定した通信を維持するための工夫が求められます。

したがって組み込みソフトの設計においては、通信に失敗した場合の再送や復帰方法までを必ず含めておきます。送信失敗時の再試行の回数制限や、通信相手からの返信が来ないときのタイムアウト時間の設定などに組み込みソフトの優劣が表れます。正常時だけを想定するのではなく、通信は失敗するものと考えた設計が、現場で安定して動き続ける製品を作り出します。

組み込みの「電源設計」とは|ソフトのバグと誤認されるトラブル

基板上のすべての部品を支えているのが電源回路です。バッテリやACアダプタ、コンセントから供給される電力を、DC-DCコンバータやレギュレータによって必要な電圧に変換して各部品に供給します。多くの組み込み機器では、内部で使用している電圧値や、交流/直流の伝送方式が、機器外部から供給される電源と異なります。この電源回路が安定していないと、ソフトウェアが正しく書かれていても誤動作や突然の再起動などを起こしたりします。

電源由来のトラブルは見極めが重要

問題をややこしくするのは、これら電源由来のトラブルが表面上はソフトのバグのようにも見える点にあります。そのため原因の切り分けが難しくなるのです。たとえば電源ノイズによってマイコンが誤動作した場合などは、一見するとプログラムの論理エラーに見えるケースがあります。組み込みソフト開発ではこのような問題点を頭に入れたうえで、電源投入時の初期化手順や、電圧が降下した際の動作、さらに過電流保護などにも配慮した慎重な設計が求められます。

バッテリーで駆動する機器では、緻密な電力管理が重要となります。必要ない部品への電源供給の切断や、低電力モードを活用するなどバッテリーの持続時間を少しでも延ばす配慮が求められます。

組み込みソフト設計に必須となる基板の理解

組み込みソフトの基板には、明確な役割を持つ部品が配置されています。これらの部品を的確に制御し、限られたリソースの中で、決められた時間内に確実な処理をおこなうために組み込みソフトは設計されます。リアルタイム性が求められる制御では、タスクの優先度管理や割り込み処理の設計も重要です。

ハードウェアを理解してソフトの設計に臨む

組み込みソフト開発では、機能の高さよりも「止まらず、暴走せず、長時間確実に動き続ける性能」が重視されます。そのためには一連のハードウェアの制約を理解したうえで、ソフトを設計する姿勢が求められます。ハードウェアとソフトウェアの協調設計により、システム全体の最適化を図るのです。

一度製品として出荷されると、後からの修正が難しく、不具合があると事故につながりかねません。そのような事態を防ぐために、これまでに蓄積されたノウハウがガイドラインとしてまとめられています。IPAが発行する『ESCR(組み込みソフトウェア開発向けコーディング作法ガイド)』や、C言語の安全性と信頼性を高めるためのコーディングガイドライン『MISRA-C』などが参考になります。また各メーカーが発行している「データシート」や「ハードウェア開発ガイド」なども参照すべきです。これらの資料には推奨される回路構成や初期化手順、トラブルシューティングの方法などが記載されています。よく似た特性を持つ素子でも、その制御方法がメーカごとに細部が異なる場合がよくあります。

組み込みソフトを理解するためには、基板に載っている部品の役割や制約条件を理解しておく必要があります。マイコンの使用、メモリのサイズと速度、センサの精度と応答時間、通信速度と信頼性、電源容量と電圧安定性などハードウェアの特性すべてが、ソフトウェア設計に影響を与えます。ハードウェアとソフトウェアのバランスや役割分担の理解が、高品質な組み込み機器づくりのスタートです。そのうえで実機を使った検証とデバッグの繰り返しにより、信頼性の高いシステムが完成します。

組み込みソフトの世界 トップへ戻る