ロータリーエンコーダーのライブラリです。 角速度 、 角度 、 RPMなどがだせます。

Dependents:   scan2 Test_moter electrocoagulador_teclado 17pwmencoder ... more

バージョンがあがりました。 こちらにあります。 https://developer.mbed.org/users/kikoaac/code/QEI2/ ハードの節約、効率化をしました。複数のQEIを使うのであれば、こちらのほうがいいと思います。

QEI(PinName channelA, PinName channelB, PinName index, int pulsesPerRev, Encoding encoding = X2_ENCODING); Aチ ャンネル、Bチャンネル、Zチャンネル、1周のパルス、タイプ

void reset(void); Pulses=0にする。

int getCurrentState(void); ローテリーエンコーダの現在の値をかえす。(00、01、10、11)

void set(int pul , int rev); pulはPulses,revはRevolutionをセット

int getPulses(void); Pulsesを返す

int getRevolutions(void); Z軸があれば基準からの回転周期をかえす

int getAng_rev(); Z軸がなければこちらを使用してください。

double getAngle(); 基準からの角度(0~360)を返す double getSumangle(); 基準からの角度を返す

double getRPM(); double getRPS(); double getRPMS(); double getRPUS(); 回転周期をかえす。

QEI.h

Committer:
kikoaac
Date:
2015-04-17
Revision:
0:a24686ca50ab

File content as of revision 0:a24686ca50ab:



#ifndef QEI_H
#define QEI_H


#include "mbed.h"


#define PREV_MASK 0x1 //Mask for the previous state in determining direction
//of rotation.
#define CURR_MASK 0x2 //Mask for the current state in determining direction
//of rotation.
#define INVALID   0x3 //XORing two states where both bits have changed.

class QEI {

public:

    typedef enum Encoding {

        X2_ENCODING,
        X4_ENCODING

    } Encoding;


    QEI(PinName channelA, PinName channelB, PinName index, int pulsesPerRev, Encoding encoding = X2_ENCODING);

    void reset(void);

    int getCurrentState(void);


    void set(int pul , int rev);  
     
    int getPulses(void);

    int getRevolutions(void);
    
    int getAng_rev();
    
    double getAngle();
    double getSumangle();
    double getRPM();
    double getRPS();
    double getRPMS();
    double getRPUS();
    int          pulsesPerRev_;
private:
    Timer Mper , Rper ,MSper ,USper; 
    Ticker Tick;
    double RPM , RPS ,RPMS , RPUS;

    void encode(void);

 
    void index(void);

    Encoding encoding_;

    InterruptIn channelA_;
    InterruptIn channelB_;
    InterruptIn index_;
    int          round_rev;

    int          prevState_;
    int          currState_;
    double angle_ , sumangle;
    int angle_pulses;
    volatile int pulses_;
    volatile int revolutions_;

};

#endif