ai

Dependents:   ball_snatch NHK2020-arm-sub NHK2020-arm-sub NHK2020-arm-sub2 ... more

EC.h

Committer:
MazeTaka
Date:
2019-07-04
Revision:
0:eb20667a5a27
Child:
2:670bd19af5e1

File content as of revision 0:eb20667a5a27:

#ifndef _INCLUDED_EC_H_
#define _INCLUDED_EC_H_

#ifndef M_PI
#define M_PI 3.14159265359f
#endif
/**
    increment型エンコーダ用class
    1逓倍:Ec1multi
    2逓倍:Ec2multi
    4逓倍:Ec4multi
**/
class Ec
{
protected:
    int count_; //カウント数
    double omega_;  //角速度(rad/s)
    int pre_count_;  //一つ前のカウント
    int resolution_;   //分解能
    int multiplication_;
    double ptw_;

public:
    /**コンストラクタの定義
    1,2,4逓倍の元となるclass

    @param res エンコーダの分解能
    @param multi エンコーダの逓倍

    @remarks このclassは各逓倍のclassに継承されるため、使用者が宣言する必要はない
    */
    Ec(int res,int multi);
    /**
        エンコーダのcountを返す関数
        1周でcount=分解能×逓倍
        @return count
    */
    int getCount();
    /**
        軸の角速度を返す関数
        @return ω(rad/s)
    */
    double getOmega();
    /**
        角速度を計算するための関数
        微分を微小時間の変位として計算しているので、タイマー割込などで回さなければいけない
    */
    void calOmega();
    /**
        分解能を指定するための関数
        @param res エンコーダの分解能
    */
    void setResolution(int res);
    void reset();///エンコーダのcountやωをリセットするための関数
    Timer timer_;
};
class Ec1multi : public Ec
{
private:
    InterruptIn signalA_;
    DigitalIn signalB_;
    void upA();
public:
    /**コンストラクタの定義
    main関数の前に必ず一度宣言する
    使うエンコーダの数だけ設定する必要がある

    @param signalA エンコーダのA相のピン名
    @param signalB エンコーダのB相のピン名
    @param res エンコーダの分解能
    */
    Ec1multi(PinName signalA,PinName signalB,int res);
};
class Ec2multi : public Ec
{
private:
    InterruptIn signalA_;
    DigitalIn signalB_;
    void upA();
    void downA();
public:
    /**コンストラクタの定義
    main関数の前に必ず一度宣言する
    使うエンコーダの数だけ設定する必要がある

    @param signalA エンコーダのA相のピン名
    @param signalB エンコーダのB相のピン名
    @param res エンコーダの分解能
    */
    Ec2multi(PinName signalA,PinName signalB,int res);
};
class Ec4multi : public Ec
{
private:
    InterruptIn signalA_;
    InterruptIn signalB_;
    void upA();
    void downA();
    void upB();
    void downB();
    int pa_,pb_;
public:
    /**コンストラクタの定義
    main関数の前に必ず一度宣言する
    使うエンコーダの数だけ設定する必要がある

    @param signalA エンコーダのA相のピン名
    @param signalB エンコーダのB相のピン名
    @param res エンコーダの分解能
    */
    Ec4multi(PinName signalA,PinName signalB,int res);
};



#endif