自分用QEI
エンコーダの回転方向はデフォの状態の反対を正としたいならrotReverce()を呼び出すと反対になる.
22020/3/6 移動平均を使ってパルスを平滑化し,RPSを算出している. useAvePRS()を書くことで,エンコーダのパルスを時間平均しそのままRPSを算出する関数MoveAve_pulse_to_RPS()がタイマー割り込みで呼び出される.移動平均を使うことでエンコーダのパルスのばらつきを無くし,平均をとらないとガタガタになるRPSがそこそこ綺麗になる.3000usごとの割り込み.この時間が長いほど精度は高い.あとclass内で配列の格納数をconst int で定義しているため黄色いエラーが出るけど無視. この方法でとったRPSの呼び出しはgetRPS()を使う.
Diff: QEI.h
- Revision:
- 0:47508ccc086b
- Child:
- 1:2b1d4925ea1c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QEI.h Thu Mar 05 08:27:36 2020 +0000 @@ -0,0 +1,35 @@ +#ifndef QEI_H +#define QEI_H + +#include "mbed.h" + +class QEI +{ +public: + QEI(PinName A,PinName B,int PPR,Timer *timer,Ticker *ticker); + void init(); + void useAvePRS(); + void CountPulse(); + /* + void MoveAve_pulse(); + */ + void MoveAve_pulse_to_RPS(); + float getRPS(); + void rotReverce(); + +private: + InterruptIn chA; + InterruptIn chB; + Timer *_timer; + Ticker *_ticker; + int _PPR; + float current_rps; + uint8_t pre_ABstate; + const int data_sizeof = 30; + int pulse,pulseData[data_sizeof]; + float pulseAve; + float rps; + int8_t NrotDIR; +}; + +#endif \ No newline at end of file