9/10

Dependents:   Right_Arm_9_10 Right_Arm

Committer:
yuki0108
Date:
Fri Apr 09 07:01:30 2021 +0000
Revision:
0:6451d750607b
Child:
1:013870241971
4/9;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yuki0108 0:6451d750607b 1 #ifndef MOTORCONTROLLER_H
yuki0108 0:6451d750607b 2 #define MOTORCONTROLLER_H
yuki0108 0:6451d750607b 3
yuki0108 0:6451d750607b 4 class MotorController
yuki0108 0:6451d750607b 5 {
yuki0108 0:6451d750607b 6 private:
yuki0108 0:6451d750607b 7 double delta_t;
yuki0108 0:6451d750607b 8
yuki0108 0:6451d750607b 9 double Cf_;
yuki0108 0:6451d750607b 10 double Cb_;
yuki0108 0:6451d750607b 11 double Df_;
yuki0108 0:6451d750607b 12 double Db_;
yuki0108 0:6451d750607b 13 double initial_Df_;
yuki0108 0:6451d750607b 14 double initial_Db_;
yuki0108 0:6451d750607b 15
yuki0108 0:6451d750607b 16 double old_angle;
yuki0108 0:6451d750607b 17 double old_omega;
yuki0108 0:6451d750607b 18
yuki0108 0:6451d750607b 19 double duty_max;
yuki0108 0:6451d750607b 20 double omega_max;
yuki0108 0:6451d750607b 21
yuki0108 0:6451d750607b 22 Amt21 *ec_;
yuki0108 0:6451d750607b 23 CalPID *sc_pid;
yuki0108 0:6451d750607b 24 CalPID *ac_duty_pid;
yuki0108 0:6451d750607b 25 CalPID *ac_omega_pid;
yuki0108 0:6451d750607b 26
yuki0108 0:6451d750607b 27 protected:
yuki0108 0:6451d750607b 28 PwmOut motor_p;
yuki0108 0:6451d750607b 29 PwmOut motor_n;
yuki0108 0:6451d750607b 30
yuki0108 0:6451d750607b 31 public:
yuki0108 0:6451d750607b 32 MotorController(PinName motor_p_, PinName motor_n_,double dt, Amt21 &ec, CalPID &sc_, CalPID &ac_duty, CalPID &ac_omega);//引数は下行
yuki0108 0:6451d750607b 33 //モーター正転、逆転、周期[s]、エンコーダ、速度制御用のPID、角度制御のPID、速度制御利用の角度制御のPID
yuki0108 0:6451d750607b 34
yuki0108 0:6451d750607b 35 //////////////////////////////////////////各クラスのコンストラクタ引数で設定はされているので呼び出しは不要。変更したい場合などに
yuki0108 0:6451d750607b 36 void period(double s);//pwm周期設定用関数
yuki0108 0:6451d750607b 37 void period_ms(int ms);//pwm周期設定用関数
yuki0108 0:6451d750607b 38 void period_us(int us);//pwm周期設定用関数
yuki0108 0:6451d750607b 39 void setDutyLimit(double max);//CalPIDによるduty比の最大値設定
yuki0108 0:6451d750607b 40 void setOmegaLimit(double max);//CalPIDによる角速度[rad/s]の最大値設定
yuki0108 0:6451d750607b 41 void setPDParam_sc(double kp, double kd);//速度制御のPDゲイン設定用関数
yuki0108 0:6451d750607b 42 void setPDParam_ac_duty(double kp, double kd);//(duty比による)角度制御のPDゲイン設定用関数
yuki0108 0:6451d750607b 43 void setPDParam_ac_omega(double kp, double kd);//(速度制御による)角度制御のPDゲイン設定用関数
yuki0108 0:6451d750607b 44 void setDeltaTime(double dt);//制御周期の設定用関数
yuki0108 0:6451d750607b 45
yuki0108 0:6451d750607b 46
yuki0108 0:6451d750607b 47 //////////////////////////////////////////実際に使うときに呼び出す関数
yuki0108 0:6451d750607b 48 void setEquation(double cf, double df, double cb, double db);//速度制御のC値、D値の設定用。設定が必要
yuki0108 0:6451d750607b 49 void turn(double duty);//モーターにduty比入力する
yuki0108 0:6451d750607b 50 void AcDuty(double target_angle);//PD算出されたdutyによる角度制御
yuki0108 0:6451d750607b 51 void AcOmega(double target_angle);//PD算出された角速度による角度制御。速度制御を利用している
yuki0108 0:6451d750607b 52 void Sc(double target_omega);//速度制御
yuki0108 0:6451d750607b 53 void stop();//duty=0を入力
yuki0108 0:6451d750607b 54
yuki0108 0:6451d750607b 55 };
yuki0108 0:6451d750607b 56
yuki0108 0:6451d750607b 57 #endif