9軸センサーモジュール(BMX055)(秋月電子通商)の出力をPIC32MX270F256B-50I/SPで受け、USB-CDCでパーソナル・コンピュータ(PC)に送りTeraTermで表示します。なお、センサーモジュールとPIC間のインターフェースはI2Cです(ボーレートは400kHz)。
回路図と実際の回路を以下に示します。なお、センサーモジュールのジャンパーJP4とJP5はそれぞれショート(SDAとSCLをプルアップ)、そしてJP7もショート(電源、信号レベルを3.3V)しています。また、USBコネクタにはUSBtype-CコネクタDIP化キット(シンプル版エコノミータイプ)(秋月電子通商)を利用しています。
1.PIC32MX270F256B-50I/SP (HARMONY)の章の項目「MHC環境」に書かれているようにMHC環境を整えます。
2.PICに書き込むファームウェアはMX270_BMX055_cdc.zipです。このファームウェアは、Harmony3\usb_apps_device\apps\cdc_com_port_singleを手直しし、それに、サンプルコード (Arduino用)を参考にして9軸センサーモジュールで得たデータをパーソナル・コンピュータ(PC)に送信するためのコード(I2C規格)を付け加えたものです(app.cとdelay.c)。MX270_BMX055_cdc.zipを解凍して出てくるMX270_BMX055_cdcフォルダーをHarmonyProjectsフォルダーの中に入れます。
3.PIC基板とPCをUSBケーブルで接続し、ファームウェアをPICに書き込みます(PIC基板がCDC機器になります)。
4.Windows10(21H2)では、CDC用標準デバイスドライバ(Usbser.sys)を使用するようです。つまり、PIC基板とPCをUSBケーブルで接続すると自動的にこのドライバーが組み込まれまれるようです(別途ドライバーを組み込む必要がない)。
5.PC上でTera Termを起動して、メニューから”設定->シリアルポート”を選択すると、シリアルポート設定画面が以下の様に現れるので、ボーレートを115200 bps、データビットを8ビット、 パリティはなし, ストップビットを1、フロー・コントロールはなし、と設定してください。 設定が終わったら、シリアルポート設定画面を閉じ、メニューから”設定->設定の保存”を選択して、シリアルポート設定内容をファイルに保存しておくと、次回の接続時には、自動的に保存した設定内容が反映されます。
6.キーボードからa, g, mキーを押下すると、それぞれ計測された加速度(静止状態では重力加速度[1に規格化されている])のx、y、z成分(±2gの範囲)、角速度のx、y、z成分(±125°/secの範囲)、磁束密度のx、y成分(±1300 μTの範囲)、z成分(±2500 μTの範囲)が以下の図のようにTera Termのウィンドウに表示されます。なお、磁束密度のx、y方向は加速度、角速度のx、y方向と逆なので注意が必要です。BMX055のマニュアルの161ページの図41を参照のこと。
ところで、磁束密度センサーの初期化の最初の段階で、ソフトリセットを掛けるのですが、センサーから最後のアクノレッジ信号が返ってきません。このため、I2C通信エラーとなります。本ファームウェアでは、アクノレッジ信号が返ってくるかどうかをチェックせずに、約5msecたったら(app.cファイルの中のcase APP_STATE_BMX055_SET_MAG_RESET2:文の中のDelayMs(5);)、ソフトリセット命令が正常にセンサーに送られたものと仮定して、初期化の次段階へと進んでいます