======================
(野村さんへのメモ)
・マイコンの写真は、入手できなかったFRDM-K64F以外は、全て手元のものを撮り下ろしました。トリミング/縮小などお任せします。
======================

■第4部　マイコンでトライ！ 生体情報の信号処理の基礎■

第2章　mbedによる筋電情報システムの例

2-1 	mbedとNucleoF401RE

本章では、2-2以降で、具体的に新しい筋電センサ回路を製作し、最近話題の「mbed」マイコンと組み合わせた「mbedによる筋電情報システム」の製作例を詳しく紹介して、興味ある読者の皆さんが実際に製作・実験できるように解説します。本節の前半ではイントロダクションとして、特に「生体情報・信号処理」のポイントに絞って、筆者がこれまで製作・実験してきた各種マイコンの中から5種類を紹介・比較します。そして後半では「mbedマイコン」に関して、本稿で採用した「NucleoF401RE」に至る経緯を紹介し、このマイコンの特徴と生体情報処理システムでのメリットについて考察します。

●各種マイコンとIDE - AKI-H8、Arduino、Propeller、RaspberryPi、mbed

筆者は日本語と英語ぐらいしか満足に使えませんが、コンピュータ関係「言語」としてはこれまで30年以上、数多くのCPUやツールやOSの言語体系(アセンブラ、インタプリタ、高級言語、マクロ、コマンド、スクリプト、・・・)に触れて、おそらく200-300言語の経験(すぐに忘れますが必要があればマニュアルを読んで復活)があり、多数のマイコンシステムと付き合ってきました。

表2-1-1はそんな中から、本稿のテーマである「生体情報・信号処理」向きのマイコン・プラットフォームとして、5種類を選んで色々な視点でまとめたものです。これは読者の皆さんが、今後、プラットフォームを選択する一つの参考となるでしょう。
(詳しくは→ 1-1コラムの「参考情報Webページ」を参照して下さい)

◆AKI-H8

秋葉原の秋月電子のロングヒット品で、いまだ現役ですが、最近では書き込みツールの(相対的な)面倒さから、筆者はほとんど使わなくなってしまいました。ただしアセンブラと割り込みを駆使した、高い性能を必要とする時には活躍しています。筆者は外付け回路なしに64チャンネルのPWM出力LED制御システムを製作しましたが、8チャンネルのA/Dコンバータや電圧出力の2チャンネルD/Aコンバータも強力です。

(図2-1-1　AKI-H8)

◆Arduino

世界的なオープンソース・ハードウェア文化を牽引している主役で、多種の基板バリエーション、フリーの開発ツールと膨大なライブラリ群、そして多種の「シールド」基板として周辺回路群が充実しています。電子工学が専門でない人々の「スケッチング」(ラピッドプロトタイピング)を支援し、世界中で教育ツールとして普及しています。他のマイコンに比べてやや非力ですが、入門機としては今後も主流でしょう。

(図2-1-2　Arduino Uno と Arduino Nano)

◆Propeller

筆者がかつて「トランジスタ技術」誌でも紹介したユニークなマイコンで、「PropClip」という40ピンDIPサイズのボードは、体感としてはAKI-H8やArduinoの20倍ほどの能力を持っています。内部に8個の32ビットCPUが並列動作していること、独自の「spin」という言語や独自IDEなど、ややマニアックですが、約2倍のスペック(クロック160MHz、ポート64ビット)の「Propeller2」も予告されているので、今後に注目したいところです。

(図2-1-3　PropellerQuickStarter と PropClip)

◆Raspberry Pi

他のマイコンと並べるのはちょっと世界が違う、Linuxカードコンピュータで、いわば超小型のパソコンないしサーバです。Unix文化のいいところを全て盛り込みつつ超安価で、似たBeagleboard Blackというさらに強力なものも出ています。ただし残念ながら+5V1A以上のAC電源アダプタが必要で、ノートパソコン用の大型リチウムイオンバッテリでも搭載しない限り、「現実的に乾電池駆動は無理」なので、マイコンの「携帯機器」という領域からは、ちょっとはみ出てしまいます。

(図2-1-4　Raspberry Pi と Beagleboard Black)

◆mbed

ここ1-2年で急速に成長しているマイコンで、ようやくメーカ向けのマイコンでもオープンソースの文化にすり寄ってきた、という状況です。多種のマイコンは基本的にはARM　CPUを使っていて、オンラインIDE(サーバ上の開発環境にブラウザでアクセス)と、豊富なライブラリがメリットとして急速に普及しています。本稿では、編集部からじきじきに「mbedを使って執筆すべし」と依頼され、筆者もようやく今回、味わってみたのですが、なかなか面白いマイコンなので、今後も活用していく事になりそうです。

(図2-1-5　mbed - FRDM-K22F と　NucleoF401RE)

●mbedの色々 - トラ技ボード、FRDM-K22F、FRDM-K64F、NucleoF401RE

「mbed」については、本誌でも「トランジスタ技術」誌でも特集が組まれ、さらに毎月のように関連記事が載っていますので、同じような内容を繰り返すのは省略します。これまでmbedを横目で眺めつつも実際に手を出すことのなかったのですが、本稿をきっかけとして「初めてのmbed」を体験した中から、新しい主流となりつつあるmbedについて、筆者の視点で紹介・整理してみたいと思います。

◆FRDM-K22F

本稿「生体情報の信号処理」に関して、最初に編集部から指定されたmbedは、図2-1-6のfreescale社の「FRDM-K22F」でした(http://developer.mbed.org/platforms/FRDM-K22F/)。
これはオンラインストアで29ドル(約3500円)と安価なのに、CPUクロック120MHz、128kBのRAM、512kBのFLASH、16ポートのPWM出力、2チャンネルの16ビットA/D、2チャンネルの12ビットD/Aなどを持つ最新の強力マイコンです。さらにオンボードの3次元加速度センサ、WiFiやBluetoothモジュール用ヘッダも持っています。
ところが筆者が2014年10月に試してみたところでは、この強力な機能が一般のmbedとは異なるためか、オンラインIDEが正しく走らず、ユーザーフォーラムでも「メーカがIDEのバグを修正して正しくサポートするのを待とう」という論調でした。そこで今回は、この最新の「まだ練れていない」mbedの採用を断念しました。

(図2-1-6　FRDM-K22F)

◆トラ技ボード

「初めてのmbed」ということで併せて実験していたのは、図2-1-7の「トランジスタ技術」誌が作って公開している「トラ技ボード(TG-LPC11U35-501)」です(http://developer.mbed.org/platforms/TG-LPC11U35-501/)。
ただしこのマイコンは、CPUクロック50MHz、8kBのRAM、54kBのFLASH、8チャンネルのA/Dという「お試し」用のスペックで信号処理には向かない(RAMが小さすぎる)ので、開発プロセスの実験だけ行いました。筆者はWindows環境でなくMac OSXで仕事しているので、パソコンを選ばないオンラインIDEのmbedは強い味方ですが、「トラ技ボード」にはクセがあり、IDEで開発して出来たバイナリをダウンロードしてmbedに書き込む環境設定に苦労しました。
また、プログラム書き込みには、「ISP SWを押す → reset SWを押す → reset SWを離す → ISP SWを離す」 というような「おまじない」が必要で、これには1990年代のAKI-H8と同じような古風さを感じました。

(図2-1-7　トラ技ボード)

◆FRDM-K64F

あまりに新しいFRDM-K22Fに変わって編集部から推薦されたのが、図2-1-8のfreescale社の「FRDM-K64F 」です(http://developer.mbed.org/platforms/FRDM-K64F/)。
これはオンラインストアで35ドル(約4200円)で、CPUクロック120MHz、256kBのRAM、1MBのFLASH、5ポートのシリアル、2チャンネルの16ビットA/D、12ビットD/A、オンボードの3次元加速度センサ、WiFiやBluetoothモジュール用ヘッダも持つ強力モデルでした。そこでさっそく発注したのですが、もっとも「売れ線」の人気マイコンらしく、品切れで「次の入荷が2ヶ月先」と判明して(原稿執筆に間に合わない)、このマイコンの採用も幻となりました。

(図2-1-8　FRDM-K64F)

◆NucleoF401RE

そして最後に編集部から推薦されたのが、秋月電子のオンラインストアのページにあった、図2-1-9のST社「NucleoF401RE」でした(http://akizukidenshi.com/catalog/g/gM-07723/)・(http://developer.mbed.org/platforms/ST-Nucleo-F401RE/)。表2-1-1にmbedの代表として載せたスペックはなかなかのものですが、なんとこれが秋月電子で税込み1500円、という安さに驚きました。

(図2-1-9　NucleoF401RE)

●NucleoF401REの特長

第2章の実例で使うことになったマイコン「NucleoF401RE」には、他のmbedボードに無かった、大きく2つの特長があります。これはシステム開発の上でとても重要なので、ここで簡単に整理・紹介しておきます。

◆ファームウェア書き込み専用のCPUを別に搭載している

上記のように「初めてのmbed」に取り組んで10日ほどでNucleoF401REを扱うことになりましたが、このNucleoF401REは超安価な上に、ボード上に2つのCPUが載っています。表2-1-1で比較紹介した5つのボードのうち、Raspberry Piは別格なので除外すると、基本的に全てのマイコンのファームウェア(プログラム)は、オンボードのフラッシュEEPROMに書き込みます。そのため、開発環境であるホストPCとシリアル(RS232C/USB)通信する必要があり、ボード上のCPUは以下のように、「書き込み時」と「通常実行時」との二役を交互に務めることになります。
	・ファームウェア書き込み時 - ホストPCと通信して、ファームウェア領域にバイナリを書き込む
	・通常実行時 - リセットされるとファームウェア領域のプログラムを実行する

そこで、AKI-H8ではEEPROM書き込み時に特殊な電圧を供給したり、トラ技ボードでは「ISP SWを押す → reset SWを押す → ・・・」などという手続きが必要になります。またArduinoでは、シリアルポート1つをホストPCと通信するUSBと共用するので、いちいちジャンパを挿したり抜いたりする事もあります。Propellerでも、USBに他に多数のシリアル機器が接続されていると、マイコンの認識が外れるトラブルが起きる事がありました。

ところがNucleoF401REでは、基板にカットできる切り込みがあり、そのUSBコネクタ側に、通常実行時のCPUとは別のCPUが載っていて、最終的に組み込み機器としてメインCPUのファームウェアが確定した場合、切り離す事もできます。この「ホスト通信用CPU」を最新ファームウェアにしたところ、(Mac環境でも)NucleoF401REをUSB接続するとデスクトップに「NUCLEO」というアイコンが出現してマウントされ、オンラインIDEから受けとってダウンロードしたバイナリをこのアイコンにドラッグ&ドロップするだけで、簡単・確実にCPUファームウェアの書き込みが繰り返しできました。これは他のmbedにも無かった、スマートで素晴らしい開発環境です。

◆「Arduinoシールド互換ヘッダ」と「オリジナルMorphoヘッダ」の2つを持つ

NucleoF401REのもう一つの特長は、周辺回路に拡張するコネクタ(ヘッダ)です。FRDM-K22FやFRDM-K64Fなど、多くのmbedボードは、内部的な機能を強化するとともに、オープンソース・ハードウェアの世界で先行して普及しているArduinoファミリを取り込んで食い込むために、外部拡張端子を「Arduinoシールド」と互換にしています。実際には信号レベルがArduinoでは+5V、mbedでは+3.3Vと違うのですが、それはマニュアルやWebで注意喚起しておいて、あくまで「Arduinoシールド互換」を「売り」にしています。

これに対してNucleoF401REは、ちょっと基板が大きいのもそのためなのですが、なんと内側に「Arduinoシールド互換ヘッダ」(図2-1-10)を持ちつつ、さらに外側に「オリジナルMorphoヘッダ」(図2-1-11)も持つ、という構成です。

(図2-1-10　Arduinoシールド互換ヘッダ)

(図2-1-11　オリジナルMorphoヘッダ)

変則的ピン間隔で1列ヘッダ配置のArduinoシールドの信号を、2列・DIP等間隔の「オリジナルMorphoヘッダ」では内側のピンを同等にして全て包含してさらに拡張する、というなかなか工夫された設計です。本章で製作する筋電センサシステムではArduinoシールド互換ヘッダを使って、市販のArduinoシールド対応・ユニバーサル基板の上に筋電センサ回路を実装したのですが、筆者がその次に製作したシステム(→ 2-6節)では、アナログ入力10チャンネル・アナログ電圧出力6チャンネル・デジタル(+5V)出力6チャンネル、MIDI入出力、とかなり盛り込んで、いろいろに拡張する場合には「オリジナルMorphoヘッダ」も役立つ、と確認できました。
