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 Jun 19 06:35:58 2015 +0000
Revision:
1:1f4e8614d0ed
Parent:
0:a24686ca50ab
Child:
3:f285adb565b1
QEI

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