エンコーダの回転位置測定【STM32 Nucleo】

STM32のタイマにはエンコーダ2相出力パルスを入力としてアップダウンカウントする機能があります。この機能を使ってロータリーエンコーダからのパルスをアップダウンカウントさせて基準位置からモータが回転した量を計測する方法を解説しています。

めかのとろ

この機能を使えば、例えば、モータ軸に直結したエンコーダからのパルスを計測開始時に基準位置としてプリセットしてからアップダウンカウントさせると基準位置からモータが回転した量がわかるのです。

めかのとろ

今回のアプリケーションでは「エンコーダの回転速度測定」で使用する回路と共通です。
今回はエンコーダ出力の2相パルスを使用しますのでTIM3のCH1とCH2を入力とします。
実際のプログラムでの設定を解説していきます。

目的:TIM3のCH1、CH2へプルアップ入力したエンコーダパルスをアップダウンカウントして回転量を測定する
■ プルアップ入力に設定したタイマTIM3のチャネルCH1(PA6)/CH2(PA7)を使用
■ エンコーダインターフェースモードに設定して、アップダウンカウントする
■ ユーザースイッチ等でカウント値を基準位置にプリセットしてからアップダウンカウントを実行する

 GPIOおよびタイマTIM3の初期設定

めかのとろ

タイマの初期設定は「ロータリーエンコーダのパルス速度測定」と同じですので省略します。
エンコーダインターフェースモードに設定するにはTIM_EncoderInterfaceConfig()関数を使用します。この関数の使い方詳細は「タイマ・カウンタ【STM32の高機能・汎用タイマ詳細】」の「タイマの応用」で解説していますので参照してください。

 エンコーダカウント値取得およびシリアル通信でPCへ転送

めかのとろ

ユーザースイッチを押して任意の値にプリセットします(ここでは上限値32000の中間16000を基準)。

めかのとろ

エンコーダインターフェースモードでCH1,CH2両方のエッジを検出する設定にしている場合は4逓倍となり、180p/r分解能のエンコーダの場合は軸を時計方向に1回転まわすと720増加(または減少)し、反時計方向に1回転回すとその逆の720減少(または増加)していれば成功です。

めかのとろ

CH1,CH2どちらかのエッジを検出する設定にしている場合は2逓倍になり、1回転あたり360増加(または減少)します。

めかのとろ

モーターの回転位置がわかれば、モータをアクチュエータとして動かす機器で任意の量だけ動作させて止めて次の動作につなげるアプリケーションが実現できるようになります。

STM32でのエンコーダカウンタに関しましてはタイマ・カウンタ【STM32の高機能・汎用タイマ詳細】外部高速クロックカウンタ-エンコーダインターフェースモード設定の詳細を解説しています。