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.
Dependencies: Encoder
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