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:
Wed Sep 23 02:13:01 2015 +0000
Revision:
4:dd8e607964d2
Parent:
3:f285adb565b1
??????

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