こんにちは、かずタコです。
いよいよセミの声が聞こえるようになってきました。
さて、最近趣味の電子工作の更新ができていませんが、実はセンサのところで詰まっています。
資料の指示を無視して独自路線で行ったくせに何やってんだという感じですが、詰まってしまったことは仕方ないのでその辺のトラブルシューティングを記事にして市今いましょう。
こういう記事が、もしかしたら誰かの役に立つかもしれないのでね。
問題点とエラー箇所の特定
まずは起こっている問題なんですが、
一言でいうと
加速度、角速度センサとして乗っけているMPU6050と通信ができない(´・ω・`)
といったトラブルです。
具体的なプログラムは、加速度と角速度のデータをセンサからもらって、それをtera termで表示しようっていう超シンプルなものです。
初めは表示される値が0から変わらない症状だったので、
「あれ、表示ミスったかな?」
と思ってSW4STM32のデバッグモードで変数を直接覗いてみました。
しかしそちらでも値は0のままで、そもそも通信ができていない疑いが出てきました。
センサはI2Cでマイコンと通信していますが、今まで別の加速度/角速度センサと同じような通信をしたことがあったので、通信部分の書き方はおかしくないはず…
そう思って、過去に使ったセンサとソースの一部(デバイスのアドレスとかレジスタのアドレスとか、センサの初期化部分とか)を、今回使う予定のマイコンで通信を試してみました。
つ、通信できない…
うん…?
怖くなって、過去に通信できていたマイコン・センサ・ソースで試しましたがこちらは通信できました。よかったよかった。
ここまでを整理すると、現マイコンで通信ができない原因として
- 作った回路がおかしい
- マイコンの通信用ピンが死んでる
- CubeMXで吐いた設定用コードがおかしい
- センサ(MPU6050)が壊れてる
以上の4つを考え、一個ずつ潰していきました。
まず1、2に関しては一度にまとめてチェックしました。
やり方としては、通信が確認できた過去のセンサ、ソース(ピン設定も全部込み)を、今回使う予定のマイコンにぶち込んで動かどうかチェックします。
結論を言うと普通に通信できました。これで1、2の可能性はなくなりました。
次に3。主にピンアサインが怪しいとにらみました。
というのも、今回は最終的な倒立振子で必要になる部品すべてを基板に実装したので、使う予定のペリフェラルを全部設定しておきました。変な信号が入ってICが壊れるかもしれないので。
というわけで、エンコーダの読み取りで使うタイマだったり、DACで使ってるタイマだったりがI2C用のタイマと競合したりGPIOの設定がまずかったりでエラー起こしてるのかなぁと睨んだわけです。
確かめ方としては、マイコンのデフォルト設定状態から少しずつ倒立振子用のペリフェラルを追加していき、先のセンサと通信ができなくなるタイミングを
エンコーダのタイマ…OK
DAC…OK
となるとGPIO...?
LED用のGPIOはOK,
センサ電源用のGPIOもOK
となるとモータドライバの信号用…?
あ、通信できなくなった
どうも、たった一つGPIOをOUTPUTにするかしないかで通信できるかどうか変わってしまいました。なんでなん。
具体的にどこのピンなのかとか、コードどんなんよ、みたいな意見はあると思うんですが、とりあえず今はメモ書きレベルで一旦公開します。
う~んGPIOごときで…なぜ…
まあピンの場所変えれば済む話なので、そこまで致命的な修正はなさそうで良かったです。
4番はまだ試せてないですが、Amazonで2個入りを買っていたので片割れを試してみることにします。
ほとんど文章で分かりにくいかと思いますが、最近また忙しくなってきてあまり時間が取れないのでこれくらいで勘弁願います。
トラ技発売から一月以上経ってしまいましたが、自分のペースでゆるゆる進めていきたいです。
というわけで今回はここまで。