QEIその2
Dependents: Nucleo_Motor Nucleo_Motor mbed_test_enc mbed_touteki_MR1 ... more
Fork of QEI2 by
QEIver2です。 前回のQEIよりハードウェアの節約を実現しました。 基本的にメソッドの追加などはないですが、コンストラクタに引数を追加しました。 第五引数にTimerクラスのアドレスを突っ込むことでTimerクラスの共有ができます。 また従来のQEIクラスの非効率的なTimerクラスの使い方をなくすことで、複数のQEIを使うことができました
QEI.h@1:1f4e8614d0ed, 2015-06-19 (annotated)
- Committer:
- kikoaac
- Date:
- Fri Jun 19 06:35:58 2015 +0000
- Revision:
- 1:1f4e8614d0ed
- Parent:
- 0:a24686ca50ab
- Child:
- 3:f285adb565b1
QEI
Who changed what in which revision?
User | Revision | Line number | New 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 | 1:1f4e8614d0ed | 50 | void state(int i); |
kikoaac | 0:a24686ca50ab | 51 | private: |
kikoaac | 0:a24686ca50ab | 52 | Timer Mper , Rper ,MSper ,USper; |
kikoaac | 0:a24686ca50ab | 53 | Ticker Tick; |
kikoaac | 0:a24686ca50ab | 54 | double RPM , RPS ,RPMS , RPUS; |
kikoaac | 0:a24686ca50ab | 55 | |
kikoaac | 1:1f4e8614d0ed | 56 | |
kikoaac | 0:a24686ca50ab | 57 | void encode(void); |
kikoaac | 0:a24686ca50ab | 58 | |
kikoaac | 0:a24686ca50ab | 59 | void index(void); |
kikoaac | 0:a24686ca50ab | 60 | |
kikoaac | 0:a24686ca50ab | 61 | Encoding encoding_; |
kikoaac | 0:a24686ca50ab | 62 | |
kikoaac | 0:a24686ca50ab | 63 | InterruptIn channelA_; |
kikoaac | 0:a24686ca50ab | 64 | InterruptIn channelB_; |
kikoaac | 0:a24686ca50ab | 65 | InterruptIn index_; |
kikoaac | 0:a24686ca50ab | 66 | int round_rev; |
kikoaac | 0:a24686ca50ab | 67 | |
kikoaac | 0:a24686ca50ab | 68 | int prevState_; |
kikoaac | 0:a24686ca50ab | 69 | int currState_; |
kikoaac | 0:a24686ca50ab | 70 | double angle_ , sumangle; |
kikoaac | 0:a24686ca50ab | 71 | int angle_pulses; |
kikoaac | 0:a24686ca50ab | 72 | volatile int pulses_; |
kikoaac | 0:a24686ca50ab | 73 | volatile int revolutions_; |
kikoaac | 0:a24686ca50ab | 74 | |
kikoaac | 0:a24686ca50ab | 75 | }; |
kikoaac | 0:a24686ca50ab | 76 | |
kikoaac | 0:a24686ca50ab | 77 | #endif |