しゅうの自作マウス研修

TIMについて – しゅうの自作マウス研修 part13

しゅうの自作マウス研修

こんにちは、しゅうです。
前回の記事でTIMについて言及したので、詳しく調べてみました。今回はガッツリ座学みたいな感じになります。

TIMの種類

STM32シリーズに備わっているタイマには、高機能制御タイマ・汎用タイマ・基本タイマとあります。使用するSTM32マイコンによって使えるタイマの数や割り振られている番号が異なります。
今回僕が使っているSTM32F103RBではTIM1からTIM4まであります。レファレンスマニュアルの13と14章によると、TIM1は高機能制御タイマ、TIM2から4は汎用タイマに設定されていることがわかります。

高機能制御と汎用

13章の初めに、以下の画像のような内容が書かれています。今回僕が使用するSTM32F103RBのフラッシュメモリは128KBなので、中容量デバイスになります。画像の最後の段落にて、中容量デバイスは高機能制御タイマ(TIM1)を1つ含むと書かれています。高機能制御タイマの概要と主な機能紹介は13.1と13.2に書かれています。

そして、14章で汎用タイマに関することが書かれています。読んでいて1つ気づいたことがあります。
高機能制御タイマも汎用タイマもほとんど同じ、なのです。高機能制御タイマは汎用タイマの機能に追加して、以下の3つがあるそうです(レファレンスマニュアル13.2章から抜粋してます)。

  • プログラマブルデッドタイムを持つ相補出力
  • カウンタの特定のサイクル数後にのみタイマレジスタを更新する繰り返しカウンタ
  • タイマの出力信号をリセット状態または既知の状態にするブレーク入力

また、高機能制御タイマと汎用タイマはお互いに独立していて、リソースの共有をしていません。独立していますが、14.3.15章によると、タイマの同期を行うことは可能だそうです。マスターモードに設定されたタイマが、スレーブモードに設定されているタイマのリセット、開始、停止などを行うことができるそうです。

以上より、今回はどのタイマにどういう役割を持たせるかはそこまで考えなくても良さそうです。高機能制御をマスターにして、残りの3つのタイマを管理してもらうような運用方法でも良さそうです。ただし、STM32CubeMXの設定画面によるとエンコーダモードとスレーブモードは重複できないそうですね。

現段階では、それぞれのタイマには独立した4つのチャンネルがあるので、TIM1で左と右のモータ用のPWMを出力して、TIM2で左のエンコーダ、TIM3で右のエンコーダを読み取る。残ったTIM4は割り込み処理用のタイマとして扱う、とするのが良さそうです。ギリギリですね…
他のマウス大会参加者のブログなどを読み込んで、タイマの使い方をもう少し勉強したいなと思います。

ついでに、前回「TIMの構造体は32bitで定義されているけど最大値が16bitなのはなぜ?」という疑問に対してはマニュアルの13.2章冒頭に書いてありました。そもそもカウンタが16ビットに設定されているそうです。

おまけ:ジャイロセンサ選び

突然ですが、今回のマウスでは、InvenSense社製のジャイロセンサを使おうと考えています。6軸あれば十分ですので、MPU-6シリーズのどれかを使います。それなりに更新頻度を高くして、リアルタイムにマウスの姿勢の補正などを行いたいと考えているので、I2C通信よりもSPI通信が扱えた方が良いと考えています。
こちらの記事を参考にすると、MPU-6050はI2C通信にのみ対応しているので、MPU-6000かMPU-6500のどちらかを採用するのが良さそうです。あとは入手性の観点も関わってくるので、どちらを使うかは基板発注時に考えようと思います。

まとめ

今回は使うタイマをどのセンサに割り当てるかなどの役割のお話をしました。
また、採用するジャイロセンサがわかってきたので、それに備えるためにSPI通信の設定方法も把握しておく必要があります。
それらに関しては、情報がまとまり次第共有させていただきます。それでは!

タイトルとURLをコピーしました