自分用QEI

Dependents:   FourOmniMecha

エンコーダの回転方向はデフォの状態の反対を正としたいならrotReverce()を呼び出すと反対になる.

22020/3/6 移動平均を使ってパルスを平滑化し,RPSを算出している. useAvePRS()を書くことで,エンコーダのパルスを時間平均しそのままRPSを算出する関数MoveAve_pulse_to_RPS()がタイマー割り込みで呼び出される.移動平均を使うことでエンコーダのパルスのばらつきを無くし,平均をとらないとガタガタになるRPSがそこそこ綺麗になる.3000usごとの割り込み.この時間が長いほど精度は高い.あとclass内で配列の格納数をconst int で定義しているため黄色いエラーが出るけど無視. この方法でとったRPSの呼び出しはgetRPS()を使う.

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