組み込みシステム設計【具体的な開発手順ノウハウ】
設計とは
設計開発を進めていくうえでたどる手順について解説します。これは各個人により自分にあったスタイルで行えばよいので、初心者向けにある程度参考になるものとして進めていきます。
ものづくりにおいてある構想が浮かんだとき、頭のなかにとどめておくだけではいわゆる「絵に書いた餅」のままです。構想を具体的なものにするためには設計という作業をおこなう必要があります。設計と聞くと専門的な知識や技術ですすめる作業のイメージですが、別の言い方をすると、構想のアイディアを具体化させるためにどんな部品をどのように使用するかといったものごとを論理的にすすめていく作業です。
もちろん、設計により専門的な知識、経験が必要ですが、組み込み技術の設計では電気・電子の基礎的な知識とある程度の経験があれば可能だと思います。これについては「組み込み技術の基本」の項で解説していますのでしっかりと理解しておいてください。
プログラミングのみの経験者がマイコンを扱い設計を始める場合と、プログラミングは未経験だけどある程度電気・電子工学の基礎を習得しているものがマイコンを扱い始めて設計を始める場合を比較すると、やはり電気・電子工学の基礎がある場合のほうが組み込み技術をものにするのは圧倒的に有利です。
設計においてはハードウェアを扱うためで、こればかりは避けて通れません。ただし、組み込みでのシステム設計に必要な電気・電子の基礎知識は決して難しいものではなく、各部品の仕様書を理解できる程度の知識であれば設計を開始することができるでしょう。
例えばマイコンの入出力インターフェースの設計においては、外部とマイコンを電気的に絶縁するためにフォトカプラという部品を使用しますがこれの用途に応じた選定や使用方法が理解できればよいのです。
システム設計手順
以下にシステム設計手順の一例を示しますので参考にしてください。
- 開発目的を具体的に明記
- 目的に応じた機能の整理(必要な入出力点数、周辺機能(ペリフェラル))
- マイコンの選択(メモリROM/RAM、使用するペリフェラル、ピン数)
- IOマップ作成(仕様書のピンマップを参考に主機能・代替機能を割り当てる)
開発対象の構想段階から実際の設計をすすめるうえではまず上記のステップで具体化します。以下、個々に解説していきます。
① 開発目的の明記:
開発の構想をまず具体化するために目的をまとめてみましょう。
とりわけシステムには入力、出力が必ず存在するので具体的にあげてみます。
② 目的に応じた機能の整理:
ある程度入出力の使用する点数が決まったところで具体的な入出力仕様を整理分類します。
まず汎用入出力GPIOと周辺機能(ペリフェラル)に大分類します
次にそれぞれの詳細仕様を決定します。
③ マイコンの選択:
入出力点数と使用する周辺機能(ペリフェラル)が決定すると、他にプログラムを格納するフラッシュメモリROMおよびRAM容量を指定するとマイコンが選択できます。
フラッシュメモリROMとRAMサイズは大きいほうが小さいものよりゆとりがありRTOSを導入してもメモリ制限の問題が起こりにくいのですが、実際の製品に導入する場合は少しでもコストを押さえるために、無駄に大きなサイズのメモリを搭載するものを採用することは避けたいものです。
学習段階では大きめのメモリサイズのものを使用して、プログラムに応じたメモリ(ROMおよびRAM)消費量を実際に体感して実際の製品を開発するときに反映してください。
STM32マイコンのCortex-M3コアF10xシリーズに関してはシステムクロック周波数、使用する周辺機能(ペリフェラル)およびピン数で選択します。複数のペリフェラルを使用する場合はピン数が大きいタイプの方が機能割当は容易です。
標準的なアプリケーションではCortex-M3コアF10xシリーズで十分な性能を発揮しますが、浮動小数点の演算が必要なアプリケーションではハードウェアにDSPが内蔵しているCortex-M4コア以上のマイコンを選択します。ただし、Cortex-M3コアでもソフトウェアエミュレーションによる演算で機能はしますのでちょっとしたアプリケーションには十分です。
④ IOマップ作成(仕様書のピンマップを参考に主機能・代替機能を割り当てる):
使用するマイコンタイプはSTM32F103RBですのでマイコンデータシート(リンクstm32f103xrb data sheet.pdf)を参考に割り当てた表です。
データシートで対応するマイコンピンに機能を割り当てます。教材ボードの場合はLQFP64に相当するピンです。各ピンにはリセット直後の主機能(Main)とオルタネート機能のデフォルト(default)とリマップ(remap)の3種類がありますので機能が干渉しないように割り当てます。
教材ボードのIOを割り当てたIOマップを一例として示します。
表からわかるように必要に応じてリマップして機能を割り当てています。このようにひと目でわかる表を作成しておくと、プログラム作成時にIOの管理がとても楽になります。
表のModeはStandard Peripheral Libraries(SPL)で定義されたものですのでライブラリにHALを使用した場合はこの部分は応じて変更する必要があります。
マイコンのピン数は限られていますので範囲内で機能を割り当てなればいけません。教材ボードの例では特にTIMを複数使用したいために干渉しないピンにリマップを実施して機能を割り当てます。
マイコンのピンは特になにも指定しなければ汎用入出力GPIOです。TIMなどのオルタネート機能を指定する場合はGPIO設定時にピンのモードをオルタネート(AF)に指定しておき、各オルタネート機能を指定します。リマップが必要の場合はGPIO設定時にリマップします。
IO割当マップは実際の教材ボードに具体的に示したものですが他のアプリケーションを開発する際にも参考になると思うので大いに役立ててください。