1 TIMのエンコーダモードを使う
1.1 ロータリーエンコーダ
1.1.1 概容
ロータリーエンコーダは、回転軸の機械的な位置、角度、速度、回転方向を検出し、それを電気信号(パルスなど)に変換するセンサです。
モータの速度制御、ロボットの関節角度検出、産業用機械の精密な位置決めなどに幅広く使用されています。
今回は受信機の周波数設定などに使用してみたいと言うことで確認していきます。
モータの速度制御、ロボットの関節角度検出、産業用機械の精密な位置決めなどに幅広く使用されています。
今回は受信機の周波数設定などに使用してみたいと言うことで確認していきます。
1.1.2 エンコード出力
インクリメンタル形:
回転に応じてパルスを出力します。回転量や速度を測るのに適していますが、電源を切ると現在位置を忘れてしまうため、起動時に原点復帰が必要です。今回はこの方式を使います。
アブソリュート形:
回転角に応じた絶対的な「位置データ(コード)」を出力します。電源を切っても現在の位置を保持できるのが特徴です。1.1.3 検出方法
今回使用したエンコーダ
光学式:
スリットの入った円板に光を当て、その透過・遮断をフォトセンサで読み取ります。高精度なのがメリットです。磁気式:
磁石の回転による磁界の変化を読み取ります。油や埃に強く、環境が厳しい場所での使用に向いています。機械式(接点式):
物理的な接点の開閉で信号を送ります。安価で家庭用電子機器によく使われます。今回のプログラムはこの方式のロータリーエンコーダを使用します。1.1.4 使用するエンコーダ
安価なものなので、実際の波形はAとBを比べると信号の幅が多少違っている。光学式ならもっと綺麗な位相波形になっていると思います。右図が確認した波形です。
5年前にRotary Encoder Switch EC11 10個(送料込)で466円でした。
5年前にRotary Encoder Switch EC11 10個(送料込)で466円でした。
1.2 プログラム
1.2.1 概容
ロータリーエンコーダのA、Bの立ち上がり、立ち下がり信号を用いて、正転なら加算、逆転なら減算をするプログラムが考えられるが、TIMのエンコーダモードを使用することによりCPUの負荷を無しにすることができる。
回路としては、ロータリーエンコーダのAをPB6、BをPB7に、CをGNDに接続します。
回路としては、ロータリーエンコーダのAをPB6、BをPB7に、CをGNDに接続します。
TIM関係のRemap 一覧表
またこのロータリーエンコーダは軸を押すと接点が閉じるスイッチも付いているので、PB10とGNDに接続します。
このスイッチでエンコーダの値をリセットするプログラムを作成します。
なおTIMのエンコードモードは マニュアルのADTM高度な制御タイマー 14.3.9 または GPTM汎用タイマー 15.3.7 を参照下さい。
このスイッチでエンコーダの値をリセットするプログラムを作成します。
なおTIMのエンコードモードは マニュアルのADTM高度な制御タイマー 14.3.9 または GPTM汎用タイマー 15.3.7 を参照下さい。
1.2.2 プログラムの注意事項
Remap:
目的の機能を別のピンに変更する時に GPIO_PinRemapConfig を使用するが、今回のPAを他の機器を制御するため、PBにエンコーダを接続したかった。このためTIM3でPB4,PB5を使用するように設定したが、使用することはできなかった。 なおエンコーダモードは各TIMのCH1とCH2が使用でき、CH3やCH4などでは使用できないので注意下さい。
2 プログラム
エンコーダ値
エンコーダ値は USART1 で情報を送っているので WCH-LinkEエミュレーター の Rx を CH32V203 の PA9 に接続する。GPIO_Mode_IPU:
エンコーダ信号がオープンコレクタの場合にプルアップ抵抗を有効にします。TIM_EncoderMode_TI12:
TIM4_CH2の両方を使って1回転あたりのカウント数を4倍にします。コメントアウトしている _TI1は、2倍にするものです
