shata
MotorController.h@2:113b6a35d37c, 2021-12-10 (annotated)
- Committer:
- shatari
- Date:
- Fri Dec 10 14:04:16 2021 +0000
- Revision:
- 2:113b6a35d37c
- Parent:
- 1:76da1a46652f
a
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yuki0108 | 0:7f95508de23e | 1 | #ifndef MOTORCONTROLLER_H |
yuki0108 | 0:7f95508de23e | 2 | #define MOTORCONTROLLER_H |
yuki0108 | 0:7f95508de23e | 3 | |
yuki0108 | 0:7f95508de23e | 4 | |
yuki0108 | 0:7f95508de23e | 5 | class MotorController |
yuki0108 | 0:7f95508de23e | 6 | { |
yuki0108 | 0:7f95508de23e | 7 | private: |
yuki0108 | 0:7f95508de23e | 8 | double delta_t; |
yuki0108 | 0:7f95508de23e | 9 | double angle; |
yuki0108 | 0:7f95508de23e | 10 | double angle_offset; |
yuki0108 | 1:76da1a46652f | 11 | double duty_offset; |
yuki0108 | 0:7f95508de23e | 12 | |
yuki0108 | 0:7f95508de23e | 13 | double Cf_; |
yuki0108 | 0:7f95508de23e | 14 | double Cb_; |
yuki0108 | 0:7f95508de23e | 15 | double Df_; |
yuki0108 | 0:7f95508de23e | 16 | double Db_; |
yuki0108 | 0:7f95508de23e | 17 | double initial_Df_; |
yuki0108 | 0:7f95508de23e | 18 | double initial_Db_; |
yuki0108 | 0:7f95508de23e | 19 | |
yuki0108 | 0:7f95508de23e | 20 | double duty_max; |
yuki0108 | 0:7f95508de23e | 21 | double omega_max; |
yuki0108 | 1:76da1a46652f | 22 | double acceleration_max; |
yuki0108 | 1:76da1a46652f | 23 | double pre_target_omega; |
yuki0108 | 0:7f95508de23e | 24 | |
yuki0108 | 0:7f95508de23e | 25 | Ec *ec_; |
yuki0108 | 0:7f95508de23e | 26 | CalPID *sc_pid; |
yuki0108 | 0:7f95508de23e | 27 | CalPID *ac_duty_pid; |
yuki0108 | 0:7f95508de23e | 28 | CalPID *ac_omega_pid; |
yuki0108 | 0:7f95508de23e | 29 | |
yuki0108 | 0:7f95508de23e | 30 | protected: |
yuki0108 | 0:7f95508de23e | 31 | PwmOut motor_p; |
yuki0108 | 0:7f95508de23e | 32 | PwmOut motor_n; |
yuki0108 | 0:7f95508de23e | 33 | |
yuki0108 | 0:7f95508de23e | 34 | public: |
yuki0108 | 0:7f95508de23e | 35 | MotorController(PinName motor_p_, PinName motor_n_,double dt, Ec &ec, CalPID &sc_, CalPID &ac_duty, CalPID &ac_omega);//引数は下行 |
yuki0108 | 0:7f95508de23e | 36 | //モーター正転、逆転、周期[s]、エンコーダ、速度制御用のPID、角度制御のPID、速度制御利用の角度制御のPID |
shatari | 2:113b6a35d37c | 37 | |
shatari | 2:113b6a35d37c | 38 | double present_devia_omega; |
shatari | 2:113b6a35d37c | 39 | double present_target_omega; |
yuki0108 | 0:7f95508de23e | 40 | |
yuki0108 | 0:7f95508de23e | 41 | //////////////////////////////////////////各クラスのコンストラクタ引数で設定はされているので呼び出しは不要。変更したい場合などに |
yuki0108 | 0:7f95508de23e | 42 | void period(double s);//pwm周期設定用関数 |
yuki0108 | 0:7f95508de23e | 43 | void period_ms(int ms);//pwm周期設定用関数 |
yuki0108 | 0:7f95508de23e | 44 | void period_us(int us);//pwm周期設定用関数 |
yuki0108 | 0:7f95508de23e | 45 | void setDutyLimit(double max);//CalPIDによるduty比の最大値設定 |
yuki0108 | 0:7f95508de23e | 46 | void setOmegaLimit(double max);//CalPIDによる角速度[rad/s]の最大値設定 |
yuki0108 | 0:7f95508de23e | 47 | void setPDParamSc(double kp, double kd);//速度制御のPDゲイン設定用関数 |
yuki0108 | 0:7f95508de23e | 48 | void setPDParamAcDuty(double kp, double kd);//(duty比による)角度制御のPDゲイン設定用関数 |
yuki0108 | 0:7f95508de23e | 49 | void setPDParamAcOmega(double kp, double kd);//(速度制御による)角度制御のPDゲイン設定用関数 |
yuki0108 | 0:7f95508de23e | 50 | void setDeltaTime(double dt);//制御周期の設定用関数 |
yuki0108 | 1:76da1a46652f | 51 | void setAccelMax(double a_max); |
yuki0108 | 1:76da1a46652f | 52 | void setDutyOffset(double duty_off); |
yuki0108 | 0:7f95508de23e | 53 | |
yuki0108 | 0:7f95508de23e | 54 | //////////////////////////////////////////実際に使うときに呼び出す関数 |
yuki0108 | 0:7f95508de23e | 55 | double getAngle(); |
yuki0108 | 0:7f95508de23e | 56 | void calibration(double angle_calibration); |
yuki0108 | 0:7f95508de23e | 57 | void setEquation(double cf, double df, double cb, double db);//速度制御のC値、D値の設定用。設定が必要 |
yuki0108 | 0:7f95508de23e | 58 | void turn(double duty);//モーターにduty比入力する |
yuki0108 | 0:7f95508de23e | 59 | void AcDuty(double target_angle);//PD算出されたdutyによる角度制御 |
yuki0108 | 0:7f95508de23e | 60 | void AcOmega(double target_angle);//PD算出された角速度による角度制御。速度制御を利用している |
yuki0108 | 1:76da1a46652f | 61 | void Sc(double target_omega_input);//速度制御 |
yuki0108 | 1:76da1a46652f | 62 | double calSc(double target_omega_input);//速度制御 |
yuki0108 | 0:7f95508de23e | 63 | void stop();//duty=0を入力 |
yuki0108 | 0:7f95508de23e | 64 | void reset(); |
yuki0108 | 0:7f95508de23e | 65 | |
yuki0108 | 0:7f95508de23e | 66 | }; |
yuki0108 | 0:7f95508de23e | 67 | |
yuki0108 | 0:7f95508de23e | 68 | #endif |