2月25日
Dependencies: Encoder
Dependents: NHK2020-m2-2-ros_2_25
Diff: SpeedController.h
- Revision:
- 6:d110c276aa5a
- Parent:
- 5:fddbe92ca86f
- Child:
- 7:b1708b8819f1
--- a/SpeedController.h Sat Aug 10 04:13:52 2019 +0000 +++ b/SpeedController.h Sat Aug 10 05:20:49 2019 +0000 @@ -25,12 +25,12 @@ PwmOut pwm_B_; /** constractorの定義 - * @param pwm_F モーターを正転させるpwmピン名 - * @param pwm_B モーターを後転させるpwmピン名 - * @param us モーターのpwm周期[us] - * @param ec Encoder classのポインタ - * モーターを正転させるとエンコーダのcountが正のほうに加算されるようにエンコーダとモーターを設置する - */ + * @param pwm_F モーターを正転させるpwmピン名 + * @param pwm_B モーターを後転させるpwmピン名 + * @param us モーターのpwm周期[us] + * @param ec Encoder classのポインタ + * モーターを正転させるとエンコーダのcountが正のほうに加算されるようにエンコーダとモーターを設置する + */ SpeedControl(PinName pwm_F,PinName pwm_B,int us,Ec &ec); @@ -45,91 +45,103 @@ 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 + * + * @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 - */ + * + * 引数はそれぞれ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 - */ + * 横軸を角速度[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比の上限 + * + * @senction SAMPLE + * @code + * SpeedControl motor(p21,p22,50,EC); + * int main(){ + * motor.setDutyLimit(0.5); //duty比の上限を0.5に設定 + * while(1){ + * @endcode */ void setDutyLimit(double duty_limit); /** 速度制御関数、引数は目標速度 - * - * この目標角加速度になるようにモーターを回転させることができる - * 負の数を代入すれば逆回転することができる - * - * @param target_omega 目標角速度 - * @section SAMPLE - * @code - * //プログラム例 - * #include "mbed.h" - * #include "EC.h" //Encoderライブラリをインクルード - * #include "SpeedController.h" //SpeedControlライブラリをインクルード - * #define RESOLUTION 500 - * Ec4multi EC(p11,p12,RESOLUTION); - * SpeedControl motor(p21,p22,50,EC); - * int main(){ - * motor.setEquation(0.0062,0.0045,-0.0061,0.0091); //求めたC,Dの値を設定 - * motor.setPDparam(0.1,0.0); //PIDの係数を設定 - * int kai=0; - * for(int i=0;i<100000000;i++){ - * motor.Sc(10); //10[rad/s]でモーターを回転 - * kai++; - * if(kai>1000){ - * printf("omega=%f\r\n",EC.getOmega()); - * kai=0; - * } - * } - * motor.stop() - * while(1); - * } - * @endcode - * - * @section CAUTION(printfの負荷について) - * printfはプログラム的に大きな負担がかかり、かなり時間がかかってしまうものである。 - * - * なのでループごとにいちいちprintfをさせると、速度の収束にかなり時間がかかってしまう。 - * - * (どんなプログラムにも言えるが、)そのためこのようなprintfの頻度を少なくさせるような工夫が必要になる。 - */ + * + * この目標角加速度になるようにモーターを回転させることができる + * 負の数を代入すれば逆回転することができる + * + * @param target_omega 目標角速度 + * + * @section SAMPLE + * @code + * //プログラム例 + * #include "mbed.h" + * #include "EC.h" //Encoderライブラリをインクルード + * #include "SpeedController.h" //SpeedControlライブラリをインクルード + * #define RESOLUTION 500 + * Ec4multi EC(p11,p12,RESOLUTION); + * SpeedControl motor(p21,p22,50,EC); + * int main(){ + * motor.setEquation(0.0062,0.0045,-0.0061,0.0091); //求めたC,Dの値を設定 + * motor.setPDparam(0.1,0.0); //PIDの係数を設定 + * int kai=0; + * for(int i=0;i<100000000;i++){ + * motor.Sc(10); //10[rad/s]でモーターを回転 + * kai++; + * if(kai>1000){ + * printf("omega=%f\r\n",EC.getOmega()); + * kai=0; + * } + * } + * motor.stop() + * while(1); + * } + * @endcode + * + * @section CAUTION(printfの負荷について) + * printfはプログラム的に大きな負担がかかり、かなり時間がかかってしまうものである。 + * + * なのでループごとにいちいちprintfをさせると、速度の収束にかなり時間がかかってしまう。 + * + * (どんなプログラムにも言えるが、)そのためこのようなprintfの頻度を少なくさせるような工夫が必要になる。 + */ void Sc(double target_omega); /** モーター停止用関数 * dutyを0にする @@ -165,5 +177,4 @@ void reset(); }; -#endif - +#endif \ No newline at end of file