tarou yamada / nucleo_rotary_encoder

Dependents:   serial_connected_mcu_nucleo rotary_encoder_mbed serial_connected_mcu_nucleo omuni_speed_pid ... more

Fork of rotary_encoder by tarou yamada

You are viewing an older revision! See the latest version

rotary_encoder

はじめに

このライブラリはSTM32のハードウェアの機能を使って、A相およびAB相でインクリメンタル形のロータリーエンコーダから回転情報を得ることを可能にします。

注意!

動作確認済 F401

動作未確認 F030 F103 F302 F334 F446 L151 L152 L476


使用方法

rotary_encoder_ab_phase(TIM_TypeDef* timer_type, size_t pulse_per_revol)
timer_type : TIM + タイマの番号
例)タイマ1 : TIM1
タイマ2 : TIM2

pulse_per_revol : エンコーダのP/R
\  コンストラクタでは使用するタイマとエンコーダのP/R(パルス/1回転)を指定しなければならない。


ピンアサイン

https://developer.mbed.org/users/inst/code/nucleo_rotary_encoder/file/d1e6284a13ab/HAL_TIM_Encoder_MspInit
F4シリーズなら”HAL_TIM_Encoder_MspInit\EncoderMspInitF4.cpp"を参照。

F401

TIM1TIM2TIM3
D7, D8A0, A1D4, D5

<<code title=例 AB相 100P/R>>

  1. include "mbed.h"
  2. include "rotary_encoder_ab_phase.hpp"

int main() { rotary_encoder_ab_phase e(/* timer_type = */TIM3, /* pulse_per_revol = */100); e.start();

while (true) { printf("%d, %f\n", e.get_counts(), e.get_revol_num()); }

return 0; } <</code>>

<<code title=例 A相 100P/R>>

  1. include "mbed.h"
  2. include "rotary_encoder_a_phase.hpp"

int main() { rotary_encoder_a_phase e(/* timer_type = */TIM3, /* pulse_per_revol = */100); e.start();

while (true) { printf("%d, %f\n", e.get_counts(), e.get_revol_num()); }

return 0; } <</code>>

<<code title=A相、AB相 RPMを計測する>>

  1. include "mbed.h"
  2. include "rotary_encoder_a_phase.hpp"
  3. include "rotary_encoder_ab_phase.hpp"

int main() { const size_t encoder_num = 3; rotary_encoder* e[] = { new rotary_encoder_a_phase( /* timer_type = */TIM1, /* pulse_per_revol = */100), new rotary_encoder_ab_phase(/* timer_type = */TIM2, /* pulse_per_revol = */100), new rotary_encoder_ab_phase(/* timer_type = */TIM3, /* pulse_per_revol = */100) };

for (size_t i = 0; i < encoder_num; ++i) { e[i]->start(); }

const float t = 0.08f;

while (true) { for (size_t i = 0; i < encoder_num; ++i) { 回転数/秒 に60を掛けて 回転数/分 にする printf("%f, ", (e[i]->get_revol_num() / t) * 60.0f); e[i]->reset(); } printf("\n"); wait(t); }

return 0; } <</code>>


All wikipages