Dependencies: Encoder
Dependents: NHK2020-m2-2-ros_2_25
Diff: SpeedController.h
- Revision:
- 5:fddbe92ca86f
- Parent:
- 4:ee0ac8415639
- Child:
- 6:d110c276aa5a
--- a/SpeedController.h Fri Aug 09 07:15:35 2019 +0000 +++ b/SpeedController.h Sat Aug 10 04:13:52 2019 +0000 @@ -3,7 +3,7 @@ /** * @brief モーターの速度制御用プログラム -* @details モーターのdutyと角速度がほぼ比例することを利用してPID制御を補正する +* @details モーターのdutyと角速度がほぼ比例することを利用して出力を決定し、PID制御で補正する **/ class SpeedControl { @@ -13,11 +13,6 @@ double ptsc_; double Cf_; double Cb_; - /** 角速度(rad/s)をduty比に変換させるための定数 - * - * - * - **/ double Df_; double Db_; double initial_Df_; @@ -39,6 +34,63 @@ SpeedControl(PinName pwm_F,PinName pwm_B,int us,Ec &ec); + + /**モーターのpwm周期の設定用関数 + * @param s モーターのpwm周期[s] + */ + void period(double s); + /**モーターのpwm周期の設定用関数 + * @param ms モーターのpwm周期[ms] + */ + void period_ms(int ms); + /**モーターのpwm周期の設定用関数 + * @param us モーターのpwm周期[us] + * @senction SAMPLE + * @code + * SpeedControl motor(p21,p22,50,EC); + * int main(){ + * motor.period_us(50); + * while(1){ + * @endcode + */ + void period_us(int us); + /** PIDパラメータ設定関数 + * + * 引数はそれぞれp,dパラメータ + * + * パラメーター値は実験的に頑張って求めるしかない + * @param kp p制御パラメータ + * @param kd d制御パラメータ + * @senction SAMPLE + * @code + * SpeedControl motor(p21,p22,50,EC); + * int main(){ + * motor.setPDparam(0.1,0.001); + * while(1){ + * @endcode + */ + void setPDparam(double kp,double kd); + + /** 角速度・duty比の関係式の設定関数 + * 横軸を角速度[rad/s], 縦軸をduty比としたときの傾きCと切片Dを正転と逆転について設定する + * @param cf 角速度[rad/s]とduty比の関係式の傾き(正転時) + * @param df 角速度[rad/s]とduty比の関係式の切片(正転時) + * @param cb 角速度[rad/s]とduty比の関係式の傾き(逆転時) + * @param db 角速度[rad/s]とduty比の関係式の切片(逆転時) + * @senction SAMPLE + * @code + * SpeedControl motor(p21,p22,50,EC); + * int main(){ + * motor.setEquation(0.02,0.0001,-0.02,0.0001); + * while(1){ + * @endcode + */ + void setEquation(double cf,double df,double cb,double db); + /** 出力duty比の上限を決める関数 + * 0 ~ 0.95の範囲内で設定する + * @param duty_limit 出力duty比の上限 + */ + void setDutyLimit(double duty_limit); /** 速度制御関数、引数は目標速度 * * この目標角加速度になるようにモーターを回転させることができる @@ -71,48 +123,14 @@ * } * @endcode * - * @section CAUTION(printfについて) + * @section CAUTION(printfの負荷について) * printfはプログラム的に大きな負担がかかり、かなり時間がかかってしまうものである。 + * * なのでループごとにいちいちprintfをさせると、速度の収束にかなり時間がかかってしまう。 + * * (どんなプログラムにも言えるが、)そのためこのようなprintfの頻度を少なくさせるような工夫が必要になる。 */ void Sc(double target_omega); - /**モーターのpwm周期の設定用関数 - * @param s モーターのpwm周期[s] - */ - void period(double s); - /**モーターのpwm周期の設定用関数 - * @param s モーターのpwm周期[ms] - */ - void period_ms(int ms); - /**モーターのpwm周期の設定用関数 - * @param s モーターのpwm周期[us] - */ - void period_us(int us); - /** PIDパラメータ設定関数 - * - * 引数はそれぞれp,dパラメータ - * - * パラメーター値は実験的に頑張って求めるしかない - * @param kp p制御パラメータ - * @param kd d制御パラメータ - */ - void setPDparam(double kp,double kd); - - /** 角速度・duty比の関係式の設定関数 - * 横軸を角速度[rad/s], 縦軸をduty比としたときの傾きCと切片Dを正転と逆転について設定する - * @param cf 角速度[rad/s]とduty比の関係式の傾き(正転時) - * @param df 角速度[rad/s]とduty比の関係式の切片(正転時) - * @param cb 角速度[rad/s]とduty比の関係式の傾き(逆転時) - * @param db 角速度[rad/s]とduty比の関係式の切片(逆転時) - */ - void setEquation(double cf,double df,double cb,double db); - /** 出力duty比の上限を決める関数 - * 0 ~ 0.95の範囲内で設定する - * @param duty_limit 出力duty比の上限 - */ - void setDutyLimit(double duty_limit); - /** モーター停止用関数 * dutyを0にする */ @@ -130,13 +148,13 @@ * SpeedControl motor(p21,p22,50,EC); * int main(){ * while(1){ - * motor.turn(0.5); + * motor.turn(0.5); //duty0.5で正転 * wait(1); - * motor.turn(0); + * motor.turn(0); //停止 * wait(1); - * motor.turn(-0.5); + * motor.turn(-0.5); //duty0.5で逆転 * wait(1); - * motor.turn(0); + * motor.turn(0); //停止 * wait(1); * } * }