QEIその2

Dependents:   Nucleo_Motor Nucleo_Motor mbed_test_enc mbed_touteki_MR1 ... more

Fork of QEI2 by Kiko Ishimoto

QEIver2です。 前回のQEIよりハードウェアの節約を実現しました。 基本的にメソッドの追加などはないですが、コンストラクタに引数を追加しました。 第五引数にTimerクラスのアドレスを突っ込むことでTimerクラスの共有ができます。 また従来のQEIクラスの非効率的なTimerクラスの使い方をなくすことで、複数のQEIを使うことができました

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?

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 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