組み込み機器開発でのソフト、電気、機械エンジニアの役割分担について
ソフト、電気、機械エンジニアの組み込み機器開発における役割分担について解説したいと思います。組み込み機器とは現在の世の中で使われるあらゆる電子機器のことを指しており、スマートフォンから家電、自動車、産業機器、医療機器、航空機、宇宙船など応用範囲は幅広いです。このような幅広い機器の開発で用いられるため、対象の製品毎に求められる機能、安全性などの仕様が異なり、それぞれの業界で開発の際に重点を置く点は異なります。
組み込み機器とは
そもそも組み込み機器とは何を指すのか解説したいと思います。組み込み機器とはプロセッサー(CPUなどの処理機器)、メモリ(RAM、ROMなどの記憶機器)、I/O(入出力機器, I/OはInput/Outputの略)の3つから構成される処理システムを持つ機器と言えます。プロセッサーとメモリは基板に配置され情報の処理を担当し、I/Oは情報の入出力を担当し、I/Oの形状に合わせて機器の形状は決まることになります。
下記はApple Watch Series 4の解体写真でPCB#1と書かれている部分にプロセッサーとメモリが配置されています。この様な小さいデバイスにもきちんと基板が存在しています。このデバイスではディスプレイやスピーカー、アンテナ、心拍計など様々なI/Oが搭載されています。参照元
※特定の機能に特化したもののみを組み込み機器と定義する場合もあるので、その場合はパソコン等の汎用製品は組み込み機器に含まないとされますが、個人的には汎用機能も”特定の機能”に含まれ、パソコンの部品構成も他の組み込み機器の構成と変わらないので組み込み機器に含んでよいと考えています。
I/Oはディスプレイやスピーカー、スイッチなどなので何をするかイメージがつきやすいですが、プロセッサーとメモリについては何をするかよくわからない方も多いかと思います。良く例えられるのが料理です。プロセッサーが調理人、メモリが調理場の広さとして表現されます。大きなメモリがあると調理場が大きくなりスムーズに調理(プログラムコード)を処理できます。またプロセッサーが高速であったり、複数コアであったりすると調理人の調理が早くなったり、調理人が増えるようなイメージです。そして、ここで登場した調理(プログラムコード)がソフトウェアと呼ばれる部分で、プロセッサーが何を処理すればよいかが書かれています。組み込み機器ではプログラムというソフトウェアとプロセッサー、メモリ、I/Oのハードウェアに分けて製品を開発していくことになります。
ソフト、電気、機械エンジニアの違い
ここでは組み込み機器開発におけるソフトエンジニア、電気エンジニア、機械エンジニアの違いについて説明していきます。それぞれを人間で例えると、脳の反応を決めるのがソフトウェアエンジニア、脳、神経や血管を構築するのが電気エンジニア、腕や足を作るのが機械エンジニアとなります。自分自身が電気エンジニアということもあるので電気エンジニアを推す書き方になっているかもしれません^^;
・ソフトエンジニア
ソフトウェアエンジニアとも呼ばれます。コーディングルールに従って機能要求に合ったコードを作成していきます。主に使用する言語はC,C++などですが業界によって異なります。車載業界ではAutosarと呼ばれるOSに近いアーキテクチャを標準的に使用するようになってきています。また安全性の高い制御を行うため、リアルタイムOSを用いた開発を行います。PC等では決まったタイミングで定期的に処理を行いますが、車の制御でこれを行うと緊急自動ブレーキなどの致命的な処理が間に合わない可能性が生じます。そのため、優先順位に応じてイベントが発生したら処理を実行するのがリアルタイム処理になります。そのためバグが生じやすく設計の難易度がPCで動くソフトウェアなどよりも高くなります。最近の開発ではソフトウェアが重要になってきているので1つの案件に関わるソフトエンジニアの数が増加傾向です。またソフトを動かす基板がないと作業ができないため、電気エンジニアと関わることが多く、I/O端子の動作など簡単な電子回路の知識が必要になってきます。
・電気エンジニア
製品のプロセッサーとメモリを含む基板設計を担当し、電磁気学という物理現象に従って機能要求に合った回路を作製します。回路設計は抵抗、コンデンサ、コイル、半導体素子などの様々な機能を持った部品を組み合わせて行います。組み込み機器では、プロセッサーなどの半導体素子と電源の接続回路や、各I/O端子の制御回路を考える必要があるためアナログ回路の知識が非常に重要になります。そして電磁ノイズを出さないようにすることと、電磁ノイズを受け取っても動作が異常にならないことを考える必要もあります。他にも使用する環境によっては高温条件でも動作が必要なため、機械エンジニアと共に放熱性を高める方法を考えたりと様々な条件を満たす回路が要求されます。1つの製品に関わる電気エンジニアは開発規模によりますが、ソフトエンジニアの半分以下が通常です。ソフト制御についてはソフトエンジニア、放熱性や基板サイズ、I/Oを制御するのに必要な電力について機械エンジニアと連携するので多くの人々と関わる機会が多いです。また部品制定を行うのも電気エンジニアの業務なので様々な部品サプライヤーともやり取りが発生します。業務ではマイコンの動作原理、アナログ回路、半導体に加えて、コーディング可能な制御方法となっているかなどコーディング知識なども必要になります。場合によっては自らソフトのデバッグを行う人もいます。
・機械エンジニア
製品のI/O部分を担当し、熱力学や流体力学を含む力学という物理現象に従って機能要求に合ったメカを作製します。担当する業界、機能に応じて必要になる知識が大幅に変わりますが、共通して設計したものを図面に落とし込みます。航空業界であれば流体力学を用いてプロペラやエンジン、機体の設計を行い、スマートフォンなどでは熱力学を用いて放熱性の高い筐体設計を行うことになります。1つの製品に関わる機械エンジニアは、業界によって大きくことなりますが、小型の製品になればなるほど人数は少なくなる傾向にはあるかと思います。大型の装置であれば制御についてソフトエンジニア、放熱性や必要な電力について電気エンジニアと関わりながら業務を行います。またメカでは特注の部品を作成することが多いため、金型や加工メーカーとのやり取りも発生します。業務で必要になる知識は業界によって大幅にことなりますが、力学全般に対する知識だけでなく、制御性を向上するためのコーディングに関する知識などが重要になってきます。
電気エンジニアに思うこと
電気エンジニアはソフトウェアの対義語のハードウェアエンジニアと呼ばれることもあります。電磁気学という専門的な知識が必要なため、エンジニアを目指す方から敬遠されている側面もあるのかと感じています。ただこれからの組み込み機器の開発エンジニアはソフトウェアの開発規模の増大により、ソフトウェアについて知っているのが当たり前になっていくと思います。これからもどんどんソフトウェアエンジニアの競争は激化していきますので、安易にエンジニアとしてソフトウェアエンジニアを目指すともっと競争率の高くなる時代が迫っています。規模が大きい分、関われる案件は細切れの一部だけになることもあるかと思います。この機会に電気エンジニアにも興味を持ってみて頂けると嬉しいです。
※ハードウェアエンジニアはソフトウェアエンジニアにキャリアチェンジすることが容易と言われています。回路設計を経験してきた方は、コーディング業務は難しいですがより上流のシステム開発ができるため、転向がしやすいのです。一方ソフトウェアエンジニアから電気エンジニアへのキャリアチェンジは専門性の関係で難しいことが多いです。ハードウェアもソフトウェアも分かるエンジニアの価値は非常に高いですが、どちらも極めるにはまずハードウェアから入っておいた方が良いということです。