ろこらぼ

僕の開発の手順とか実験結果とか感想とかをつらつら書き込んでいくお墓.僕の魂を成仏させるためのお墓です.いいね・ブクマ・コメント待ってます

STM32F303K8T6とHALのSPIでL3GD20を動かした

どうもこんにちは.

今日はSTM32とHALのSPIを使ってジャイロセンサL3GD20を動かしてみましたので,それのまとめをします.

コードに関しては,諸事情により,パブリックに公開するわけにはいかないので,もしもほしければTwitterでDMください.

  1. 開発環境
    ・Windows10.
    ・System WorkBench for stm32.
     stm32のコーディングを行い,書き込む.
    ・CubeMX.
     GUIでできるあれ
    ・Arduino IDE.
     これはセンサデータを可視化するツールです.
    ・STM32F303K8T6が乗っているNucleo.
     スペックはググって.
    ・L3GD20.
     ・XYZ軸ジャイロセンサ
     ・分解能は16ビット
     ・2.4V~3.6V動作.
     ・IO電圧は1.8~電源電圧まで
     ・測定範囲は±250/500/2000dps(°/sec)
     ・インターフェースはI2CまたはSPI.
    以下画像の緑色の基板がL3GD20です.
    f:id:ryuga13tk:20180907044004j:image
    これは僕が設計したセンサ開発評価ボードです.
    おいおいは表面実装のSTM32F303K8T6を乗せるつもりです.Nucleo君とはおさらばの予定です.

    スペックとしては,ジャイロセンサL3GD20,CANのレシーバでMPU2515,エンコーダを読むためのピンを用意してあります.
    USBは100円ショップに売っている光るあれです(データ通信できるものこれしかなかった...).

  2. 開発手順
    まずはCubeMXの画面で以下のようにSPIとUARTの設定をしています.

    f:id:ryuga13tk:20180907042753p:plain


    CANとか関係ないやつも含まれていますが,まあ今後開発していきますよ.
    今回使うのは,下部のSPIの設定とUARTの設定.
    ちなみにSTM32とTeratermを使ってprintfを実装しているのですが,順序が逆転しますが今度投稿します.気になる人は調べてください.

    SPIの設定はこんな感じ

    f:id:ryuga13tk:20180907043011p:plain



    これをworkbenchへコード化して,SPIの実装をすれば完成です(パブリックに公開できない部分です).

  3. 結果
    動かしてみた結果が

    f:id:ryuga13tk:20180907043242p:plain

    これです.
    この画面はArduino IDEというツールを用いてセンサデータをグラフ化しています.
    ちゃんとジャイロが取れていますね.ちなみにセンサは各速度を出力しますが,角度になるようにしています.また,移動平均フィルタをかけています.

  4. 考察
    センサとしては応答性もそれなりに良くて,きれいな値を出すなっていうイメージでした.

    f:id:ryuga13tk:20180907043630p:plain
    これが各速度の生データです.0の時はきれいに0を出すので,大人しい子ですね.
    ただまあ,このセンサも例に漏れず,ドリフト角がそれなりにあることがわかったので,カルマンフィルタあたりを実装する必要があるなっていう感じです.
    元々カルマンフィルタ実装のために作ったセンサ基板だったので,やっと本題に入れるなって感じですが.
    まあ,簡単に角度を算出できるとは思ってなかったので,センサの動作確認とセンサデータの確認ができて満足です.


    次回からはカルマンフィルタの実装をしていくつもり(つもりはつもり)です.