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.
SpeedControl Class Reference
モーターの速度制御用プログラム More...
#include <SpeedController.h>
Public Member Functions | |
SpeedControl (PinName pwm_F, PinName pwm_B, int us, Ec &ec) | |
constractorの定義 | |
void | period (double s) |
モーターのpwm周期の設定用関数 | |
void | period_ms (int ms) |
モーターのpwm周期の設定用関数 | |
void | period_us (int us) |
モーターのpwm周期の設定用関数 | |
void | setPIDparam (double kp, double ki, double kd) |
PIDパラメータ設定関数 | |
void | setEquation (double cf, double df, double cb, double db) |
角速度・duty比の関係式の設定関数 横軸を角速度[rad/s], 縦軸をduty比としたときの傾きCと切片Dを正転と逆転について設定する | |
void | setDutyLimit (double duty_limit) |
出力duty比の上限を決める関数 0 ~ 0.95の範囲内で設定する | |
void | Sc (double target_omega) |
速度制御関数、引数は目標速度 | |
void | stop () |
モーター停止用関数 dutyを0にする | |
void | turn (double duty) |
duty(-1 ~ 1)比でモーターを回転させる関数 負の値を入れたら逆回転する | |
void | reset () |
Encoderや速度制御の値をresetする関数 |
Detailed Description
モーターの速度制御用プログラム
モーターのdutyと角速度がほぼ比例することを利用して出力を決定し、PID制御で補正する
Definition at line 8 of file SpeedController.h.
Constructor & Destructor Documentation
SpeedControl | ( | PinName | pwm_F, |
PinName | pwm_B, | ||
int | us, | ||
Ec & | ec | ||
) |
constractorの定義
- Parameters:
-
pwm_F モーターを正転させるpwmピン名 pwm_B モーターを後転させるpwmピン名 us モーターのpwm周期[us] ec Encoder classのポインタ モーターを正転させるとエンコーダのcountが正のほうに加算されるようにエンコーダとモーターを設置する
Definition at line 5 of file SpeedController.cpp.
Member Function Documentation
void period | ( | double | s ) |
void period_ms | ( | int | ms ) |
void period_us | ( | int | us ) |
モーターのpwm周期の設定用関数
- Parameters:
-
us モーターのpwm周期[us]
SAMPLE
Ec4multi EC(p11,p12,500); SpeedControl motor(p21,p22,50,EC); int main(){ motor.period_us(50); while(1){
Definition at line 22 of file SpeedController.cpp.
void reset | ( | ) |
Encoderや速度制御の値をresetする関数
Definition at line 100 of file SpeedController.cpp.
void Sc | ( | double | target_omega ) |
速度制御関数、引数は目標速度
この目標角加速度になるようにモーターを回転させることができる 負の数を代入すれば逆回転することができる
- Parameters:
-
target_omega 目標角速度
SAMPLE
//プログラム例 #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); }
CAUTION(printfの負荷について)
printfはプログラム的に大きな負担がかかり、かなり時間がかかってしまうものである。
なのでループごとにいちいちprintfをさせると、速度の収束にかなり時間がかかってしまう。
(どんなプログラムにも言えるが、)そのためこのようなprintfの頻度を少なくさせるような工夫が必要になる。
Definition at line 29 of file SpeedController.cpp.
void setDutyLimit | ( | double | duty_limit ) |
出力duty比の上限を決める関数 0 ~ 0.95の範囲内で設定する
- Parameters:
-
duty_limit 出力duty比の上限
SAMPLE
Ec4multi EC(p11,p12,500); SpeedControl motor(p21,p22,50,EC); int main(){ motor.setDutyLimit(0.5); //duty比の上限を0.5に設定 while(1){
Definition at line 94 of file SpeedController.cpp.
void setEquation | ( | double | cf, |
double | df, | ||
double | cb, | ||
double | db | ||
) |
角速度・duty比の関係式の設定関数 横軸を角速度[rad/s], 縦軸をduty比としたときの傾きCと切片Dを正転と逆転について設定する
- Parameters:
-
cf 角速度[rad/s]とduty比の関係式の傾き(正転時) df 角速度[rad/s]とduty比の関係式の切片(正転時) cb 角速度[rad/s]とduty比の関係式の傾き(逆転時) db 角速度[rad/s]とduty比の関係式の切片(逆転時)
SAMPLE
Ec4multi EC(p11,p12,500); SpeedControl motor(p21,p22,50,EC); int main(){ motor.setEquation(0.02,0.0001,-0.02,0.0001); while(1){
Definition at line 84 of file SpeedController.cpp.
void setPIDparam | ( | double | kp, |
double | ki, | ||
double | kd | ||
) |
PIDパラメータ設定関数
引数はそれぞれp,dパラメータ
パラメーター値は実験的に頑張って求めるしかない
- Parameters:
-
kp p制御パラメータ kd d制御パラメータ
SAMPLE
Ec4multi EC(p11,p12,500); SpeedControl motor(p21,p22,50,EC); int main(){ motor.setPDparam(0.1,0.001); while(1){
Definition at line 76 of file SpeedController.cpp.
void stop | ( | ) |
モーター停止用関数 dutyを0にする
Definition at line 109 of file SpeedController.cpp.
void turn | ( | double | duty ) |
duty(-1 ~ 1)比でモーターを回転させる関数 負の値を入れたら逆回転する
- Parameters:
-
duty 出力duty比
SAMPLE
#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(){ while(1){ motor.turn(0.5); //duty0.5で正転 wait(1); motor.turn(0); //停止 wait(1); motor.turn(-0.5); //duty0.5で逆転 wait(1); motor.turn(0); //停止 wait(1); } }
Definition at line 62 of file SpeedController.cpp.
Generated on Fri Jul 15 2022 13:30:13 by
