teamALI / Mbed 2 deprecated HB2018

Dependencies:   mbed FreeRTOS

HbMotor.h

Committer:
MasashiNomura
Date:
2018-12-15
Revision:
28:fdb3b144e342
Parent:
27:ff63c23bc689
Child:
29:eb3d72dd94aa

File content as of revision 28:fdb3b144e342:

#ifndef __HBMOTOR_H__
#define __HBMOTOR_H__
/////////////////////////////////////////////////////////////////////
#include "typedef.h"
#include "globalFlags.h"

class HbMotor{
private:
    UCHAR   id  ;//識別ID
    INT16   ofs;//オフセットスロットル
    INT16   limitH;//
    INT16   limitL;//
    INT16   curVal;
public:
    HbMotor(UCHAR iID);//コンストラクタ
    void setValue(INT16 iVal);
    void setOfs(INT16 iVal);
    INT16 getOfs();
    void setLimit(INT16 low, INT16 hi);
    INT16 getCurrentValue();
    void setValueDirect(INT16 iVal);
    void setValueFPGA(UCHAR iID, INT16 iVal);//iIDは 0 or 1
};

class HbMotCtrl{
private:
    std::bitset<4> ready;
    //bool    ready;
    eMotPos   pos;          // 位置
    INT16  typ;          // 流入側or出力側
    INT16   val;            // 
    INT16   ofs;            // オフセットスロットル
    INT16   pwmMin;         // 
    INT16   pwmMax;          // 
    INT16   rpmMin;         // 
    INT16   rpmMax;          // 
    float   coefA;          // PWMとRPMの関係の曲線の係数A
    float   coefB;          // PWMとRPMの関係の曲線の係数B
    float   coefC;          // PWMとRPMの関係の曲線の係数C
    INT16   curPwmVal;      // 計算してセットした値
    INT16   curRpmVal;      // 指定された現在のRPM
    //INT16  tblVal[100];     // %->PWMの変換テーブル

public:
/**/
    HbMotCtrl(eMotPos Pos, INT16 Type);//コンストラクタ
    ~HbMotCtrl();//デストラクタ
    bool isReady();//使用できるようにパラメータがセットされたかどうか(今は使わないかなぁ)
    void setPwmLimt(INT16 Min, INT16 Max);
    void setRpmLimt(INT16 Min, INT16 Max);
    void setMotCoef(float a, float b, float c);
    //void makeTable();       // 変換テーブル作成 パラメータセット後呼ぶ
    INT16 calcPwm(INT16 percent);

    void setValue(float value);  // パーセンテージ0~50
    void setOfs(float value);    // パーセンテージ0~50
    float getValue();  // パーセンテージ0~50
    float getOfs();    // パーセンテージ0~50
};

class HbSubProp{
private:
// 今回のモーターと電装ではこうなるが、変更があれば適宜変更かクラス構成の見直しが必要
#define PWN_MAX     4000
#define RPM_IN_MAX     8500
#define RPM_OUT_MAX     7500
#define RPM_MIN     1500
    eMotPos   pos  ;//識別ID
    HbMotCtrl *motCtrl[2];
    float   curVal;     // 現在のパーセンテージ
    float   tarVal;     // 目標パーセンテージ
public:
    HbSubProp(eMotPos Pos);//コンストラクタ
    ~HbSubProp();//デストラクタ

    void setRpmLimIn(INT16 min, INT16 max);
    void setRpmLimOut(INT16 min, INT16 max);
    void setPwmLimit(INT16 min, INT16 max);
    void setCoef(eMotType type, float a, float b, float c);
    //void makeTbl();

    void setValue(float val);  // パーセンテージ0~50
    void setOfs(float val);    // パーセンテージ0~50
    float getValue();  // パーセンテージ0~50
    float getOfs();    // パーセンテージ0~50

    // あとで実装したい関数たち
    //void addValue(float val);
    //void onePush(float val);// パーセンテージ
    //void setValueEMG(float val);    // オフセット分も含めて指定可能
};


/////////////////////////////////////////////////////////////////////
#endif