ロータリーエンコーダーのライブラリです。 角速度 、 角度 、 RPMなどがだせます。
Dependents: scan2 Test_moter electrocoagulador_teclado 17pwmencoder ... more
バージョンがあがりました。 こちらにあります。 https://developer.mbed.org/users/kikoaac/code/QEI2/ ハードの節約、効率化をしました。複数のQEIを使うのであれば、こちらのほうがいいと思います。
QEI(PinName channelA, PinName channelB, PinName index, int pulsesPerRev, Encoding encoding = X2_ENCODING); Aチ ャンネル、Bチャンネル、Zチャンネル、1周のパルス、タイプ
void reset(void); Pulses=0にする。
int getCurrentState(void); ローテリーエンコーダの現在の値をかえす。(00、01、10、11)
void set(int pul , int rev); pulはPulses,revはRevolutionをセット
int getPulses(void); Pulsesを返す
int getRevolutions(void); Z軸があれば基準からの回転周期をかえす
int getAng_rev(); Z軸がなければこちらを使用してください。
double getAngle(); 基準からの角度(0~360)を返す double getSumangle(); 基準からの角度を返す
double getRPM(); double getRPS(); double getRPMS(); double getRPUS(); 回転周期をかえす。
Diff: QEI.h
- Revision:
- 0:a24686ca50ab
diff -r 000000000000 -r a24686ca50ab QEI.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QEI.h Fri Apr 17 06:44:34 2015 +0000 @@ -0,0 +1,76 @@ + + +#ifndef QEI_H +#define QEI_H + + +#include "mbed.h" + + +#define PREV_MASK 0x1 //Mask for the previous state in determining direction +//of rotation. +#define CURR_MASK 0x2 //Mask for the current state in determining direction +//of rotation. +#define INVALID 0x3 //XORing two states where both bits have changed. + +class QEI { + +public: + + typedef enum Encoding { + + X2_ENCODING, + X4_ENCODING + + } Encoding; + + + QEI(PinName channelA, PinName channelB, PinName index, int pulsesPerRev, Encoding encoding = X2_ENCODING); + + void reset(void); + + int getCurrentState(void); + + + void set(int pul , int rev); + + int getPulses(void); + + int getRevolutions(void); + + int getAng_rev(); + + double getAngle(); + double getSumangle(); + double getRPM(); + double getRPS(); + double getRPMS(); + double getRPUS(); + int pulsesPerRev_; +private: + Timer Mper , Rper ,MSper ,USper; + Ticker Tick; + double RPM , RPS ,RPMS , RPUS; + + void encode(void); + + + void index(void); + + Encoding encoding_; + + InterruptIn channelA_; + InterruptIn channelB_; + InterruptIn index_; + int round_rev; + + int prevState_; + int currState_; + double angle_ , sumangle; + int angle_pulses; + volatile int pulses_; + volatile int revolutions_; + +}; + +#endif