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