実装機能の動作確認(続きです)
春から初夏への移り変わりを実感するかのようにだんだん暑くなっていきます…
みなさんこんにちはYUUKIです。
前回、IMUとモータードライバの動作確認でした。今回はエンコーダーと割り込み処理について書いていきます。
エンコーダー
Pi:Coはステッピングモーターが採用されていたためモーターにパルス信号を入力することで回転角度や回転速度を制御していました。YMmouseではDCモーターを利用したため、回転数を制御するにはエンコーダーを使用して回転や角度の情報を取得する必要があります。
エンコーダーが回転や角度の情報を表現する方法は、動く前と後でどれくらい移動したかをみる相対角度検知タイプ。原点からどのくらい離れた位置にいるかを見る絶対角度検知タイプの2種類があります。YMmouseに使用するエンコーダーは「IEH2-4096」で「FAULHABER 1717T006SR-6V」と一体型になっている磁気式インクリメンタルエンコーダーです。
磁気式エンコーダーはモーター軸に取り付けられた永久磁石が作り出す磁界分布の変化を磁気センサーで読み取るようです。
…ちょっと難しいですね。
光学式エンコーダーであれば、放射方向にスリットを空けた円盤が回転することでパルスを発生させるものと言われると頭の中でイメージしやすいのですが…

早速動作確認していきます。
のりさんのブログを見ているとサクッと終わると思っていましたが、.iocの設定で躓きます。
Part14でお見せしたSTM32CubeIDEの設定では、PB0、PB1で左側のエンコーダー用にピンを割り当てていましたが、この状態ではEncoder Modeの設定ができませんでした。
原因は単純で、どのTIMのチャンネルでもEncoder Modeが選択できるという思い込みの元、配線の取り回し易いところに設定したことでした。
これは、事前に開発ボードで確認していれば防げていた事例かと思います。
途中から時間に追われ、なんとしても期日までに基板発注しなければ大会に間に合わないと我武者羅に作業したがゆえに招いた結果です。
改めて、配置変更して以下のようになりました。
PB0とPB1からPB4、PB5に割り当てなおしました。
ラベル名も左右変わっています。(後々配線見直すと逆であったため)
これでSTM32CubeIDE上では左右、Encoder Modeが使用できるようになりました。
続いて、基板のリワークをしていきます。
赤線で示したところにリワークした配線があります。
マイコンの脚にエナメル線をはんだ付けするのは少し時間かかりましたが、無事繋ぐことができました。ここが外れると困るのでグルーガンで付け根を埋めておきます。
この状態で動作確認すると・・・
無事左右のエンコーダーの値を取得することができました。
定期割り込み処理
プログラムは基本的にmain関数に書かれている動作を上から順番に実行します。
これでは、制御に必要なセンサーの値の更新に時間がかかってしまいます。
すると、指示した距離進まなかったり、停止できず壁にぶつかったりと迷路走行できなくなります。
割り込み処理という、main関数とは別の一定周期で行う処理を使うことで、マウスの走行に必要なセンサーの値を取得し、距離や角度等を計算することができるようになります。

早速動作確認していきます。
YMmouseではTIMER10とTIMER11を使用しました。
駆動に関わる値(角速度、速度etc…)は1kHz、距離センサーは4kHzの割り込みにて値を取得していきます。
TIM10は1kHzの割り込みを
・Counter Period = 180-1
・Prescaler = 1000-1
で設定しています。
TIM11は4kHzの割り込みを
・Counter Period = 180-1
・Prescaler = 250-1
と設定しました。
STM32F446のTIMER10と11は「AHB/APB2」に繋がっており、元となるクロック(APB2 timer clocks )は180MHzとなります。
割り込み周波数の計算は以下のとおりです。
割り込み周波数 = クロック周波数 / ((Prescaler + 1)*(Counter Period + 1))
LEDを使い、動作確認しました。
割り込み時にLEDのトグル処理を実行してます。
1kHz、4kHzの割り込みのため、点滅しているはずですが、どちらも常時点灯してるように見えます…
(周波数下げて点滅するのも確認しています。写真は撮り忘れたので割愛します)
動作確認用LEDとしてもういくつか実装してもよかったのではとこのころから思い始めます。
実装可能面積も少ないのでそんなこと言っている余裕もあまりないのですが…
次回
以上で各種実装機能の動作確認が終わりました。
次回から、いよいよ走る、曲がる、止まる、迷路探索するといったところに着手していきます。
自分にとってはここからが難易度が急激に上がります。(あがりました。)
なんでこんな設計にしたんだと頭抱えますが、初心者がいきなり自作マウスを作るとこうなるというのを温かい目で見守っていただけると幸いです・・・
それではっ
YUUKI