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@3:f285adb565b1, 2015-08-31 (annotated)
- Committer:
- kikoaac
- Date:
- Mon Aug 31 01:05:02 2015 +0000
- Revision:
- 3:f285adb565b1
- Parent:
- 1:1f4e8614d0ed
- Child:
- 4:dd8e607964d2
- Child:
- 5:49fa8827718d
QEI??3
;
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 | 3:f285adb565b1 | 16 | class QEI |
kikoaac | 3:f285adb565b1 | 17 | { |
kikoaac | 3:f285adb565b1 | 18 | protected : |
kikoaac | 3:f285adb565b1 | 19 | PinName Pin[3]; |
kikoaac | 3:f285adb565b1 | 20 | QEI(const QEI& q); |
kikoaac | 3:f285adb565b1 | 21 | QEI& operator=(const QEI &q) { |
kikoaac | 3:f285adb565b1 | 22 | return *this; |
kikoaac | 3:f285adb565b1 | 23 | } |
kikoaac | 0:a24686ca50ab | 24 | public: |
kikoaac | 0:a24686ca50ab | 25 | |
kikoaac | 0:a24686ca50ab | 26 | typedef enum Encoding { |
kikoaac | 0:a24686ca50ab | 27 | |
kikoaac | 0:a24686ca50ab | 28 | X2_ENCODING, |
kikoaac | 0:a24686ca50ab | 29 | X4_ENCODING |
kikoaac | 0:a24686ca50ab | 30 | |
kikoaac | 0:a24686ca50ab | 31 | } Encoding; |
kikoaac | 0:a24686ca50ab | 32 | |
kikoaac | 0:a24686ca50ab | 33 | |
kikoaac | 3:f285adb565b1 | 34 | QEI(PinName channelA, PinName channelB, PinName index, int pulsesPerRev,Timer *T, Encoding encoding = X2_ENCODING); |
kikoaac | 0:a24686ca50ab | 35 | |
kikoaac | 3:f285adb565b1 | 36 | void qei_reset(void); |
kikoaac | 0:a24686ca50ab | 37 | |
kikoaac | 0:a24686ca50ab | 38 | int getCurrentState(void); |
kikoaac | 0:a24686ca50ab | 39 | |
kikoaac | 0:a24686ca50ab | 40 | |
kikoaac | 3:f285adb565b1 | 41 | void set(int pul , int rev); |
kikoaac | 3:f285adb565b1 | 42 | |
kikoaac | 0:a24686ca50ab | 43 | int getPulses(void); |
kikoaac | 0:a24686ca50ab | 44 | |
kikoaac | 0:a24686ca50ab | 45 | int getRevolutions(void); |
kikoaac | 3:f285adb565b1 | 46 | |
kikoaac | 0:a24686ca50ab | 47 | int getAng_rev(); |
kikoaac | 3:f285adb565b1 | 48 | |
kikoaac | 0:a24686ca50ab | 49 | double getAngle(); |
kikoaac | 0:a24686ca50ab | 50 | double getSumangle(); |
kikoaac | 0:a24686ca50ab | 51 | double getRPM(); |
kikoaac | 0:a24686ca50ab | 52 | double getRPS(); |
kikoaac | 0:a24686ca50ab | 53 | double getRPMS(); |
kikoaac | 0:a24686ca50ab | 54 | double getRPUS(); |
kikoaac | 0:a24686ca50ab | 55 | int pulsesPerRev_; |
kikoaac | 1:1f4e8614d0ed | 56 | void state(int i); |
kikoaac | 0:a24686ca50ab | 57 | private: |
kikoaac | 3:f285adb565b1 | 58 | Timer *timer; |
kikoaac | 0:a24686ca50ab | 59 | Ticker Tick; |
kikoaac | 0:a24686ca50ab | 60 | double RPM , RPS ,RPMS , RPUS; |
kikoaac | 3:f285adb565b1 | 61 | float gettime() { |
kikoaac | 3:f285adb565b1 | 62 | timer->start(); |
kikoaac | 3:f285adb565b1 | 63 | static float prev_time; |
kikoaac | 3:f285adb565b1 | 64 | float a = timer->read()-prev_time; |
kikoaac | 3:f285adb565b1 | 65 | prev_time=a; |
kikoaac | 3:f285adb565b1 | 66 | return a; |
kikoaac | 3:f285adb565b1 | 67 | } |
kikoaac | 1:1f4e8614d0ed | 68 | |
kikoaac | 0:a24686ca50ab | 69 | void encode(void); |
kikoaac | 3:f285adb565b1 | 70 | |
kikoaac | 0:a24686ca50ab | 71 | void index(void); |
kikoaac | 0:a24686ca50ab | 72 | |
kikoaac | 0:a24686ca50ab | 73 | Encoding encoding_; |
kikoaac | 0:a24686ca50ab | 74 | |
kikoaac | 0:a24686ca50ab | 75 | InterruptIn channelA_; |
kikoaac | 0:a24686ca50ab | 76 | InterruptIn channelB_; |
kikoaac | 0:a24686ca50ab | 77 | InterruptIn index_; |
kikoaac | 0:a24686ca50ab | 78 | int round_rev; |
kikoaac | 0:a24686ca50ab | 79 | |
kikoaac | 0:a24686ca50ab | 80 | int prevState_; |
kikoaac | 0:a24686ca50ab | 81 | int currState_; |
kikoaac | 0:a24686ca50ab | 82 | double angle_ , sumangle; |
kikoaac | 0:a24686ca50ab | 83 | int angle_pulses; |
kikoaac | 0:a24686ca50ab | 84 | volatile int pulses_; |
kikoaac | 0:a24686ca50ab | 85 | volatile int revolutions_; |
kikoaac | 0:a24686ca50ab | 86 | |
kikoaac | 0:a24686ca50ab | 87 | }; |
kikoaac | 0:a24686ca50ab | 88 | |
kikoaac | 3:f285adb565b1 | 89 | #endif |