ec
Fork of EC by
Diff: EC.h
- Revision:
- 8:833757a1df66
- Parent:
- 7:87c135463de7
- Child:
- 9:a919aa92e65e
diff -r 87c135463de7 -r 833757a1df66 EC.h --- a/EC.h Sat Nov 19 07:03:54 2016 +0000 +++ b/EC.h Mon Nov 21 06:31:24 2016 +0000 @@ -4,7 +4,12 @@ #ifndef M_pi #define M_pi 3.141592 #endif -/**increment型encoder用class*/ +/**increment型encoder用class + + Z相(1周につき1回立ち上がる)の機能を追加しました!!!! + + 普通に使う分には不必要な機能ですが、回転回数が欲しい場合や、回転が非常に早い物の回転速度が欲しい場合などでA,B相での処理だとマイコンが追いつかない場合などに使ってください + */ class Ec{ private: @@ -39,18 +44,35 @@ double omega; //角速度 /** コンストラクタの定義 * - * 前の + * ***Z相の機能を追加したことで引数が増えました!!!!*** + * * main関数の前に必ず一度宣言する * * 使うエンコーダの数だけ設定する必要がある * * @param signalA エンコーダA相のピン名 * @param signalB エンコーダB相のピン名 + * @param signalZ エンコーダZ相のピン名 * @param s エンコーダの分解能(省略可) * @param t 角速度計算の間隔(省略可) */ + /** @section CAUTION + * 今まで以下のように定義していたものは + * @code + * #include "mbed.h" + * #include "EC.h" + * + * Ec Ec1(PA_0,PA_1,1024,0.05); + * @endcode + * 次のようにZ相の引数の部分に、NCと入れれば今までの様に使える + * @code + * #include "mbed.h" + * #include "EC.h" + * + * Ec Ec1(PA_0,PA_1,NC,1024,0.05); + * @endcode + */ Ec(PinName signalA,PinName signalB,PinName signalZ,int s,double t); - Ec(PinName signalZ); ///countの値を返す関数(int型) int getCount(); @@ -61,7 +83,7 @@ * #include "mbed.h" * #include "EC.h" //ライブラリをインクルード * - * Ec Ec1(PA_0,PA_1,1024,0.05); //分解能1024、計算間隔0.05秒に設定 + * Ec Ec1(PA_0,PA_1,NC,1024,0.05); //分解能1024、計算間隔0.05秒に設定、Z相は使わない * Ticker ticker; * DigitalIn button(USER_BUTTON); * Serial pc(USBTX,USBRX); @@ -89,9 +111,30 @@ void reset(); ///角速度計算の間隔dtを決めることができる(デフォルトは0.05秒) void setTime(double t); - + ///(Z相を使用する場合)回転回数を返す関数(int型) + int getRev(); + ///(Z相を使用する場合)回転速度(rpm)の値を返す関数(double型) + /** @section SAMPLE + * z相を使う場合のプログラムの例 + * @code + * #include "mbed.h" + * #include "EC.h" //ライブラリをインクルード + * + * Ec Ec1(NC,NC,PA_0,1024,0.05); //A相B相が不必要な場合も、このようにNCと入れればよい + * DigitalIn button(USER_BUTTON); + * Serial pc(USBTX,USBRX); + * + * int main(){ + * while(1){ + * pc.printf(" rev1=%d ",Ec1.getRev()); + * pc.printf(" rpm1=%f\r\n ",Ec1.getRPM()); + * if(!button) Ec1.reset(); //USERボタンを押したらリセット + * } + * } + * @endcode + */ double getRPM(); - int getrev(); + ///角速度計算の間隔 static double deftime; @@ -155,16 +198,17 @@ PwmOut pwm_B_; /** constractorの定義 - * @param signalA encoderA相のピン名 - * @param signalB encoderB相のピン名 - * @param s encoderの分解能(省略可) - * @param t 角速度計算の間隔(省略可) + * @param signalA エンコーダA相のピン名 + * @param signalB エンコーダB相のピン名 + * @param signalZ エンコーダZ相のピン名 + * @param s エンコーダの分解能 + * @param t 角速度計算の間隔 * @param pwm_F motorを正転させるpwmピン名 * @param pwm_B motorを後転させるpwmピン名 - * motorを正転させるとencoderのcountが正のほうに加算されるようにencoderとmotorを設置する + * モーターを正転させるとエンコーダのcountが正のほうに加算されるようにエンコーダとモーターを設置する */ SpeedControl( PinName signalA , PinName signalB , PinName signalZ , int s, double t, PinName pwm_F , PinName pwm_B); - //SpeedControl( PinName signalZ , PinName pwm_F , PinName pwm_B); + /** duty比を角速度に変換させるための定数 * * 使うモーターやギア比や供給電圧によって変化するので一度duty比と角速度の関係を調べてグラフの傾きから求める