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:
Fri Apr 17 06:44:34 2015 +0000
Revision:
0:a24686ca50ab
Child:
1:1f4e8614d0ed
???????????

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 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 0:a24686ca50ab 50 private:
kikoaac 0:a24686ca50ab 51 Timer Mper , Rper ,MSper ,USper;
kikoaac 0:a24686ca50ab 52 Ticker Tick;
kikoaac 0:a24686ca50ab 53 double RPM , RPS ,RPMS , RPUS;
kikoaac 0:a24686ca50ab 54
kikoaac 0:a24686ca50ab 55 void encode(void);
kikoaac 0:a24686ca50ab 56
kikoaac 0:a24686ca50ab 57
kikoaac 0:a24686ca50ab 58 void index(void);
kikoaac 0:a24686ca50ab 59
kikoaac 0:a24686ca50ab 60 Encoding encoding_;
kikoaac 0:a24686ca50ab 61
kikoaac 0:a24686ca50ab 62 InterruptIn channelA_;
kikoaac 0:a24686ca50ab 63 InterruptIn channelB_;
kikoaac 0:a24686ca50ab 64 InterruptIn index_;
kikoaac 0:a24686ca50ab 65 int round_rev;
kikoaac 0:a24686ca50ab 66
kikoaac 0:a24686ca50ab 67 int prevState_;
kikoaac 0:a24686ca50ab 68 int currState_;
kikoaac 0:a24686ca50ab 69 double angle_ , sumangle;
kikoaac 0:a24686ca50ab 70 int angle_pulses;
kikoaac 0:a24686ca50ab 71 volatile int pulses_;
kikoaac 0:a24686ca50ab 72 volatile int revolutions_;
kikoaac 0:a24686ca50ab 73
kikoaac 0:a24686ca50ab 74 };
kikoaac 0:a24686ca50ab 75
kikoaac 0:a24686ca50ab 76 #endif