Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
MotorController.h
00001 #ifndef MOTORCONTROLLER_H 00002 #define MOTORCONTROLLER_H 00003 00004 00005 class MotorController 00006 { 00007 private: 00008 double delta_t; 00009 double angle; 00010 double angle_offset; 00011 double duty_offset; 00012 00013 double Cf_; 00014 double Cb_; 00015 double Df_; 00016 double Db_; 00017 double initial_Df_; 00018 double initial_Db_; 00019 00020 double duty_max; 00021 double omega_max; 00022 double acceleration_max; 00023 double pre_target_omega; 00024 00025 Ec *ec_; 00026 CalPID *sc_pid; 00027 CalPID *ac_duty_pid; 00028 CalPID *ac_omega_pid; 00029 00030 protected: 00031 PwmOut motor_p; 00032 PwmOut motor_n; 00033 00034 public: 00035 MotorController(PinName motor_p_, PinName motor_n_,double dt, Ec &ec, CalPID &sc_, CalPID &ac_duty, CalPID &ac_omega);//引数は下行 00036 //モーター正転、逆転、周期[s]、エンコーダ、速度制御用のPID、角度制御のPID、速度制御利用の角度制御のPID 00037 00038 double present_devia_omega; 00039 double present_target_omega; 00040 00041 //////////////////////////////////////////各クラスのコンストラクタ引数で設定はされているので呼び出しは不要。変更したい場合などに 00042 void period(double s);//pwm周期設定用関数 00043 void period_ms(int ms);//pwm周期設定用関数 00044 void period_us(int us);//pwm周期設定用関数 00045 void setDutyLimit(double max);//CalPIDによるduty比の最大値設定 00046 void setOmegaLimit(double max);//CalPIDによる角速度[rad/s]の最大値設定 00047 void setPDParamSc(double kp, double kd);//速度制御のPDゲイン設定用関数 00048 void setPDParamAcDuty(double kp, double kd);//(duty比による)角度制御のPDゲイン設定用関数 00049 void setPDParamAcOmega(double kp, double kd);//(速度制御による)角度制御のPDゲイン設定用関数 00050 void setDeltaTime(double dt);//制御周期の設定用関数 00051 void setAccelMax(double a_max); 00052 void setDutyOffset(double duty_off); 00053 00054 //////////////////////////////////////////実際に使うときに呼び出す関数 00055 double getAngle(); 00056 void calibration(double angle_calibration); 00057 void setEquation(double cf, double df, double cb, double db);//速度制御のC値、D値の設定用。設定が必要 00058 void turn(double duty);//モーターにduty比入力する 00059 void AcDuty(double target_angle);//PD算出されたdutyによる角度制御 00060 void AcOmega(double target_angle);//PD算出された角速度による角度制御。速度制御を利用している 00061 void Sc(double target_omega_input);//速度制御 00062 double calSc(double target_omega_input);//速度制御 00063 void stop();//duty=0を入力 00064 void reset(); 00065 00066 }; 00067 00068 #endif
Generated on Mon Oct 17 2022 19:31:27 by
1.7.2