9/10

Dependents:   Right_Arm_9_10 Right_Arm

MotorController.h

Committer:
oshin1030
Date:
2021-09-19
Revision:
5:2e5f40e761bd
Parent:
4:6bff84284ecb

File content as of revision 5:2e5f40e761bd:

#ifndef MOTORCONTROLLER_H
#define MOTORCONTROLLER_H
#define ANGLE_ERROR 0.01

class MotorController
{
private:
    double delta_t;

    double Cf_;
    double Cb_;
    double Df_;
    double Db_;
    double initial_Df_;
    double initial_Db_;

    double old_angle;
    double old_omega;

    double duty_max;
    double omega_max;

    Amt21 *ec_;
    CalPID *sc_pid;
    CalPID *ac_duty_pid;
    CalPID *ac_omega_pid;

protected:
    PwmOut motor_p;
    PwmOut motor_n;

public:
    MotorController(PinName motor_p_, PinName motor_n_,double dt, Amt21 &ec, CalPID &sc_, CalPID &ac_duty, CalPID &ac_omega);//引数は下行
    //モーター正転、逆転、周期[s]、エンコーダ、速度制御用のPID、角度制御のPID、速度制御利用の角度制御のPID

//////////////////////////////////////////各クラスのコンストラクタ引数で設定はされているので呼び出しは不要。変更したい場合などに
    void period(double s);//pwm周期設定用関数
    void period_ms(int ms);//pwm周期設定用関数
    void period_us(int us);//pwm周期設定用関数
    void setDutyLimit(double max);//CalPIDによるduty比の最大値設定
    void setOmegaLimit(double max);//CalPIDによる角速度[rad/s]の最大値設定
    void setPDParam_sc(double kp, double kd);//速度制御のPDゲイン設定用関数
    void setPDParam_ac_duty(double kp, double kd);//(duty比による)角度制御のPDゲイン設定用関数
    void setPDParam_ac_omega(double kp, double kd);//(速度制御による)角度制御のPDゲイン設定用関数
    void setDeltaTime(double dt);//制御周期の設定用関数
    
    
//////////////////////////////////////////実際に使うときに呼び出す関数
    void setEquation(double cf, double df, double cb, double db);//速度制御のC値、D値の設定用。設定が必要
    void turn(double duty);//モーターにduty比入力する
    void AcDuty(double target_angle);//PD算出されたdutyによる角度制御
    void AcOmega_1(double target_angle,double max_duty);//PD算出された角速度による角度制御。速度制御を利用している
    void AcOmega_2(double target_angle,double angleA,double max_duty);//PD算出された角速度による角度制御。速度制御を利用している
    void AcOmega(double target_angle);//PD算出された角速度による角度制御。速度制御を利用している
    double calSc(double target_omega);//速度制御
    void Sc(double target_omega);//速度制御
    void stop();//duty=0を入力

};

#endif