ryo shatari / MotorController_2021_1210shata
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MotorController.h Source File

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