ec

Dependents:   F3RC

Fork of EC by ROBOSTEP_LIBRARY

Revision:
31:05e37fea072b
Parent:
30:087ad7703445
Child:
32:297384f9d261
diff -r 087ad7703445 -r 05e37fea072b EC.h
--- a/EC.h	Thu Aug 17 04:27:00 2017 +0000
+++ b/EC.h	Thu Aug 17 07:49:21 2017 +0000
@@ -153,7 +153,97 @@
 /**速度制御用ライブラリ
  *
  * サンプルプログラム
+ * @code
+ * //サンプルプログラム 差動二輪駆動ロボットを想定
+ * //直進・後退・右旋回・左旋回が可能
+ * #include "mbed.h"
+ * #include "EC.h" 
  *
+ * #define BASIC_SPEED 20  //モーターはこの角速度で駆動させる
+ *
+ * SpeedControl motorR(PF_0,PB_1,NC,1048,0.05,PA_8,PB_5);      //右輪
+ * SpeedControl motorL(PF_1,PA_11,NC,1048,0.05,PA_9,PA_10);    //左輪
+ * Ticker motor_tick;  //角速度計算用ticker
+ * Serial pc(USBTX,USBRX);
+ *
+ * void calOmega() //角速度計算関数
+ * {
+ *     motorR.CalOmega();
+ *     motorL.CalOmega();
+ * }
+ *
+ * int main(void){
+ *     motor_tick.attach(&calOmega,0.05);
+ *     //Cの値を設定 
+ *     motorR.setDOconstant(46.3);
+ *     motorL.setDOconstant(47.2);
+ *     //pd係数を設定
+ *     motorR.setPDparam(0.1,0);
+ *     motorR.setPDparam(0.12,0);
+ *
+ *     int kai=0;
+ *     double target_R=0,target_L=0;
+ *     char status[5][10]={"STOP","FORWARD","BACKWARD","RIGHT","LEFT"};
+ *     int status_num=0;         //初期状態は停止
+ *
+ *     while(1) {
+ *         motorR.Sc(target_R);
+ *         motorL.Sc(target_L);       //target_R,target_Lの値を変えることで直進・後退・右回転・左回転を行う
+ *       
+ *         if(kai>=500) {    
+ *             pc.printf("status=%s omega_R=%f omega_L=%f \r\n",status[status_num],motorR.getOmega(),motorL.getOmega());
+ *             //機体の進む方向、右モーターの角速度、左モーターの角速度を表示
+ *             kai=0;
+ *         }
+ *       
+ *         if(pc.readable()) {
+ *             char sel=pc.getc();
+ *           
+ *             switch (sel) {
+ *                 case 's':           //停止
+ *                     motorR.stop();
+ *                     motorL.stop();   
+ *                     target_R=0;
+ *                     target_L=0;
+ *                     status_num=0;
+ *                     break;
+ *                 case 'i':           //前進
+ *                     target_R=BASIC_SPEED;
+ *                     target_L=BASIC_SPEED;
+ *                     status_num=1;
+ *                     break;
+ *                 case 'm':           //後退
+ *                     target_R=(-1)*BASIC_SPEED;
+ *                     target_L=(-1)*BASIC_SPEED;
+ *                     status_num=2;
+ *                     break;
+ *                 case 'k':           //右旋回
+ *                     motorR.stop();
+ *                     target_R=0;
+ *                     target_L=BASIC_SPEED;
+ *                     status_num=3;
+ *                     break;
+ *                 case 'j':           //左旋回
+ *                     motorL.stop();
+ *                     target_R=BASIC_SPEED;
+ *                     target_L=0;
+ *                     status_num=4;
+ *                     break;
+ *                 default:
+ *                     break;
+ *             }
+ *             if(sel=='q'){
+ *                 break; //qを押したら左右のモーターを停止
+ *             }
+ *         }
+ *         kai++;
+ *     }
+ *     motorR.stop();
+ *     motorL.stop();
+ *   
+ *     return 0;   
+ * }
+ * @endcode
  * @section 基本的な速度制御の実用までの流れ
  *
  * 1. モーター・エンコーダ・モータードライバ・マイコン・バッテリーを適切につなげる