STM32資料 開発編 1

地磁気センサーのライブラリを書いてみよう

今回からは実際にライブラリを書いてみる

基本的な情報は、すべてセンサーの会社が出しているデータシートに乗っているためそこを読むことになる

今回は、データシートが日本語で丁寧な説明のついている地磁気センサーを選んだので、頑張って書いてみよう

データシートの読み方

今回は実際のデータシートを見ながら、読み方を解説していく

使うデータシートはこちらになるので、適宜ダウンロードしておいてね

・BM1422AGMVのデータシート

必要な情報

データシートには製品の情報、回路設計、レジスタの情報などの様々なことが書いてあるが

コードを書くのに必要なことは、I2Cアドレスとレジスタの情報(アドレスと何を書き込む、読み取るか)のみである

実際に読んでみよう

今紹介した3つの要素を順番に探していく

I2Cアドレスを探してみよう

10ページ目の上にI2Cスレーブアドレスと書いてあるところがある

I2C通信では、通信を開始する方(STM32)をマスター、通信を受け取る方(センサー)をスレーブという

特定の端子の電圧によって値が変化するが、今回はADDR_Lのほうの値を使う

レジスタの値を探してみよう

10ページの下にレジスタマップと呼ばれる、すべてのレジスタの名前とアドレスをまとめたものがある

例えばWIAは0x0fレジスタに入っていることがわかる

レジスタの中身を探してみよう

たいていの場合、レジスタマップの上下に詳細なレジスタの説明が書かれている

例えばWIAは12ページの上から2番目の項目に書かれていて、0x41という値が帰ってくると書かれている

また、レジスタの3bit目に値を書き込みたいときは、ビットシフトという機能を使って

ずらすことで、enum classの値の設定がやりやすくなる

//レジスタに 1001 1000を書き込みたい

//設定1が4桁目の0b11 設定2が8桁目の0b1の場合それぞれをずらして足し算することができる
uint8_t command = 0b11 << 3 | 0b1 << 7; //0b11001000になる

実際にこのようにする場合は、設定1の値を0~3、設定2の値を0~1で定義しておけばよい

このように、ビットシフトを使うことで、レジスタの値を簡単に設定することができる

センサーの起動方法を調べよう

基本的には、電源の有効化、センサーの設定、値の取得という順番になる

このデータシートはとっても丁寧で、立ち上げのフローチャートを載せてくれてあるので、16ページを参考にしよう

書いてみよう

ここまでの情報をもとにクラスを書いてみよう

関数はWIA、Setting、GetDataを用意し、Settingはenum classで設定項目を指定しておこう

このセンサーはI2C通信しか対応していないが、練習のため仮想関数と継承も利用してみよう

リンク

・メインページ