第9回目です…
みなさんこんにちは、YUUKIです。
第9回目の記事では、車体の回転を測定するジャイロについてみていきたいと思います。
この記事では「マニュアルダウンロードページ(購入者限定)」にてダウンロードしていただいたマニュアルpart3のP17~18にある「SPIとジャイロ」の欄について動作確認と簡単な解説をしていきたいと思います。
SPI接続については次回詳しく解説していきます!
※マニュアルダウンロードページを開くにはHM-StarterKit同梱のカードに記載されているパスワードが必要になります。
ジャイロとは…
角速度センサーといい、回転角の速度を測定する慣性センサーの一つです。
ジャイロというとゲーム機やスマホ、車に至るまで私たちの生活圏でもよく利用されています。
現在、連載にてご紹介しているHMキットがエントリーできるマイクロマウスの大会では、スタートからゴールまでのタイムを競います。
タイムを縮めるためには旋回時間の短縮は避けては通れない世界です。
マウスの回転角度がわかるようになると緩旋回の調整や超信地旋回のパラメーター調整といった早くゴールさせるための調整が楽になります。その角度を検知するセンサーです。
HMキットに搭載されているジャイロ…
HMキットに搭載されているICM-20648は6軸センサーであり、最小1.71Vから最大3.6Vの動作電圧範囲を特長としています。通信ポートは、I2Cは400kHz 、SPIが7MHzで通信が可能となります。
しかし、I2Cは通信速度が遅いため、HMキットではSPI接続しています。
SPI接続は、デジタル出力のため、回路で信号ノイズ除去はできないみたいですが、角度はきっちり出ます。
動作確認…
では動作確認をしていきます。
サンプルプログラム「step6_spi_gyro」をビルドし、Flash Programmerにて書き込み、Tera Termで接続してください。
第9回目までに様々な動作確認をするためにこの作業をやってきたのでだいぶ慣れてきました。(ビルドや書き込み等は第2回で詳細を記載していますのでそちらをご確認ください)
しかし、慣れているとぽろっと忘れている…なんてこともあるのでTera Termに接続する際にRUNモードになっているか、マウスの電源が入っているか等々確認して作業をお願いします!
このように表示できていれば大丈夫です。
マウスを接続した状態で左右に回転させてみてください。
~時計回りに回したとき~
~反時計回り~
上のdata_ HとLがシリアル値でAng_Velocityが回転角になります。
プログラムの補足…
今回使用したサンプルプログラムですが、マニュアルに記載されているコードと大きく異なる部分があります。
init_spi_gyro(); unsigned long i = 0; long data = 0; for(i = 0; i < 100*1000*10; i++); preprocess_spi_gyro(0x062100); data = read_gyro_data(); for(i = 0; i < 100*1000*10; i++); while(1){ SCI_printf("data_H,%d\n\r",(data & 0x00FF00) >> 8); SCI_printf("data_L,%d\n\r\n\r",(data & 0x0000FF)); SCI_printf("Ang_Velocity[deg/s],%d\n\r",((int)((2000.0*((float)data))/32767.0))); for(i = 0; i < 100*1000*10; i++); for(i = 0; i < 100*1000*100; i++); //画面クリアシーケンス SCI_printf("\x1b[2J"); //クリアスクリーン[CLS] SCI_printf("\x1b[0;0H"); //カーソルを0,0に移動 preprocess_spi_gyro(0xB70000); data = (short)(read_gyro_data()&0x0000FFFF); }
88行目からの出力したデータの表示の仕方がマニュアルだとH、M、Lをデータラベルとして出力していますが、サンプルプログラムでは上記のようにdata_H、LとAng_Velocityで出力されています。
少しこのコードの補足をすると「init_spi_gyro();」でジャイロ関連の初期設定を行っています。
ジャイロセンサ本体の初期設定は、preprocess_spi_gyro(0x062100); で行っています。
・06がパワーマネジメントのアドレス。
・21がsleep mode解除やクロック自動指定の設定
となっているようです。(koraさんの記事参考にさせていただきました…)
このジャイロのデータですが、
ICM-20648は継続してデータ出力をする場合、自動的にアドレスをインクリメントしてデータを適切なレジスタにロードする特徴があります。
そのため、1スレーブ24ビットで出力した場合、前回指定したレジスタのアドレスにあるデータが先頭に含まれる形で出力されます。なので最初の8bitをマスクする処理を入れています。
仮に24bitが32bitになるとひとつ前でインクリメントされた39番のデータも出力されることになります。
データシートを見るとどこがどう出力されるかなど書いてありますので興味がありましたら見てみてください!
おわりに…
今回はジャイロについてみていきました。マニュアルでは以降、迷路を実際走らせるようになっています。無事完走し、更なるタイム短縮を狙っていくときにジャイロは大いに活躍してくれることだと思います。次回は、今回あまり触れていないSPI接続とエンコーダについてです。
それではっ…
YUUKI
お知らせ
手のひらサイズのマイクロマウスキット「HM-StarterKit」
33%OFFの特別価格で販売中!
製品ページはこちら
アールティロボットショップで購入する
また、6月10日(木)からは学生マイクロマウスサークルを対象としたプレゼントキャンペーンを開催予定です!詳細をお楽しみに!