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:
- 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);
* }
* }