ロータリーエンコーダーのライブラリです。 角速度 、 角度 、 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(); 回転周期をかえす。

Committer:
kikoaac
Date:
Fri Apr 17 06:44:34 2015 +0000
Revision:
0:a24686ca50ab
???????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kikoaac 0:a24686ca50ab 1
kikoaac 0:a24686ca50ab 2
kikoaac 0:a24686ca50ab 3 #ifndef QEI_H
kikoaac 0:a24686ca50ab 4 #define QEI_H
kikoaac 0:a24686ca50ab 5
kikoaac 0:a24686ca50ab 6
kikoaac 0:a24686ca50ab 7 #include "mbed.h"
kikoaac 0:a24686ca50ab 8
kikoaac 0:a24686ca50ab 9
kikoaac 0:a24686ca50ab 10 #define PREV_MASK 0x1 //Mask for the previous state in determining direction
kikoaac 0:a24686ca50ab 11 //of rotation.
kikoaac 0:a24686ca50ab 12 #define CURR_MASK 0x2 //Mask for the current state in determining direction
kikoaac 0:a24686ca50ab 13 //of rotation.
kikoaac 0:a24686ca50ab 14 #define INVALID 0x3 //XORing two states where both bits have changed.
kikoaac 0:a24686ca50ab 15
kikoaac 0:a24686ca50ab 16 class QEI {
kikoaac 0:a24686ca50ab 17
kikoaac 0:a24686ca50ab 18 public:
kikoaac 0:a24686ca50ab 19
kikoaac 0:a24686ca50ab 20 typedef enum Encoding {
kikoaac 0:a24686ca50ab 21
kikoaac 0:a24686ca50ab 22 X2_ENCODING,
kikoaac 0:a24686ca50ab 23 X4_ENCODING
kikoaac 0:a24686ca50ab 24
kikoaac 0:a24686ca50ab 25 } Encoding;
kikoaac 0:a24686ca50ab 26
kikoaac 0:a24686ca50ab 27
kikoaac 0:a24686ca50ab 28 QEI(PinName channelA, PinName channelB, PinName index, int pulsesPerRev, Encoding encoding = X2_ENCODING);
kikoaac 0:a24686ca50ab 29
kikoaac 0:a24686ca50ab 30 void reset(void);
kikoaac 0:a24686ca50ab 31
kikoaac 0:a24686ca50ab 32 int getCurrentState(void);
kikoaac 0:a24686ca50ab 33
kikoaac 0:a24686ca50ab 34
kikoaac 0:a24686ca50ab 35 void set(int pul , int rev);
kikoaac 0:a24686ca50ab 36
kikoaac 0:a24686ca50ab 37 int getPulses(void);
kikoaac 0:a24686ca50ab 38
kikoaac 0:a24686ca50ab 39 int getRevolutions(void);
kikoaac 0:a24686ca50ab 40
kikoaac 0:a24686ca50ab 41 int getAng_rev();
kikoaac 0:a24686ca50ab 42
kikoaac 0:a24686ca50ab 43 double getAngle();
kikoaac 0:a24686ca50ab 44 double getSumangle();
kikoaac 0:a24686ca50ab 45 double getRPM();
kikoaac 0:a24686ca50ab 46 double getRPS();
kikoaac 0:a24686ca50ab 47 double getRPMS();
kikoaac 0:a24686ca50ab 48 double getRPUS();
kikoaac 0:a24686ca50ab 49 int pulsesPerRev_;
kikoaac 0:a24686ca50ab 50 private:
kikoaac 0:a24686ca50ab 51 Timer Mper , Rper ,MSper ,USper;
kikoaac 0:a24686ca50ab 52 Ticker Tick;
kikoaac 0:a24686ca50ab 53 double RPM , RPS ,RPMS , RPUS;
kikoaac 0:a24686ca50ab 54
kikoaac 0:a24686ca50ab 55 void encode(void);
kikoaac 0:a24686ca50ab 56
kikoaac 0:a24686ca50ab 57
kikoaac 0:a24686ca50ab 58 void index(void);
kikoaac 0:a24686ca50ab 59
kikoaac 0:a24686ca50ab 60 Encoding encoding_;
kikoaac 0:a24686ca50ab 61
kikoaac 0:a24686ca50ab 62 InterruptIn channelA_;
kikoaac 0:a24686ca50ab 63 InterruptIn channelB_;
kikoaac 0:a24686ca50ab 64 InterruptIn index_;
kikoaac 0:a24686ca50ab 65 int round_rev;
kikoaac 0:a24686ca50ab 66
kikoaac 0:a24686ca50ab 67 int prevState_;
kikoaac 0:a24686ca50ab 68 int currState_;
kikoaac 0:a24686ca50ab 69 double angle_ , sumangle;
kikoaac 0:a24686ca50ab 70 int angle_pulses;
kikoaac 0:a24686ca50ab 71 volatile int pulses_;
kikoaac 0:a24686ca50ab 72 volatile int revolutions_;
kikoaac 0:a24686ca50ab 73
kikoaac 0:a24686ca50ab 74 };
kikoaac 0:a24686ca50ab 75
kikoaac 0:a24686ca50ab 76 #endif