teamALI / Mbed 2 deprecated HB2018

Dependencies:   mbed FreeRTOS

HbMotor.h

Committer:
MasashiNomura
Date:
2018-12-17
Revision:
29:eb3d72dd94aa
Parent:
28:fdb3b144e342
Child:
32:7f4145cc3551

File content as of revision 29:eb3d72dd94aa:

#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;          // 
    INT16   rpmOfs;         // 調整用オフセット
    float   rpmGain;        // 調整用ゲイン
    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 setRpmOffset(INT16 ofs);
    void setRpmGain(float gain);
    void setMotCoef(float a, float b, float c);
    //void makeTable();       // 変換テーブル作成 パラメータセット後呼ぶ
    INT16 calcPwm(INT16 percent);
    INT16 calcPwm(UINT16 rpm);

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

    void setRpmValue(INT16 value);  // Rpm
    void setRpmOfs(INT16 value);    // Rpm
    INT16 getRpmValue();  // Rpm
    INT16 getRpmOfs();    // Rpm
};

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 setRpmGain(eMotType type, float gain);
    void setRpmOffset(eMotType type, INT16 ofs);
    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 setValue(INT16 val);  // rpm
    void setOfs(INT16 val);    // rpm
    INT16 getValue();  // rpm
    INT16 getOfs();    // rpm

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


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