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.
Dependents: ball_snatch NHK2020-arm-sub NHK2020-arm-sub NHK2020-arm-sub2 ... more
EC.h
00001 #ifndef _INCLUDED_EC_H_ 00002 #define _INCLUDED_EC_H_ 00003 00004 #ifndef M_PI 00005 #define M_PI 3.14159265359f 00006 #endif 00007 00008 /** @section SAMPLE 00009 * @code 00010 * //プログラム例 00011 * #include "mbed.h" 00012 * #include "EC.h" 00013 * 00014 * #define RESOLUTION 500 00015 * Ticker ticker; 00016 * Serial pc(USBTX,USBRX); 00017 * 00018 * // (A層,B層,分解能) 00019 * Ec1multi EC(p7,p8,RESOLUTION); //1逓倍用class 00020 * // or 00021 * //Ec2multi EC(p7,p8,RESOLUTION); //2逓倍用class 00022 * // or 00023 * //Ec4multi EC(p7,p8,RESOLUTION); //4逓倍用class 00024 * void calcOmega(); 00025 * 00026 * int main() 00027 * { 00028 * int count=0; 00029 * double omega; 00030 * ticker.attach(&calcOmega,0.05); 00031 * 00032 * while(1) { 00033 * count=EC.getCount(); 00034 * omega=EC.getOmega(); 00035 * pc.printf("count=%d,",count); 00036 * pc.printf("omega=%f\r\n",omega); 00037 * } 00038 * } 00039 * void calcOmega() 00040 * { 00041 * EC.calOmega(); 00042 * } 00043 * @endcode 00044 */ 00045 00046 /** 00047 * @brief increment型エンコーダ用class 00048 * @details 1逓倍:Ec1multi 00049 * 2逓倍:Ec2multi 00050 * 4逓倍:Ec4multi 00051 **/ 00052 class Ec 00053 { 00054 protected: 00055 int count_; //カウント数 00056 double omega_; //角速度(rad/s) 00057 int pre_count_; //一つ前のカウント 00058 int resolution_; //分解能 00059 int multiplication_; 00060 double ptw_; 00061 00062 public: 00063 /*コンストラクタの定義 00064 1,2,4逓倍の元となるclass 00065 00066 @param res エンコーダの分解能 00067 @param multi エンコーダの逓倍 00068 00069 @remarks このclassは各逓倍のclassに継承されるため、使用者が宣言する必要はない 00070 */ 00071 Ec(int res,int multi); 00072 /** @details エンコーダのcountを返す関数 00073 * 1周のcount=分解能×逓倍 00074 * @return count 00075 */ 00076 int getCount ()const; 00077 /** 00078 * 軸の回転角度を返す関数 00079 * @return θ[rad] 00080 */ 00081 double getRad()const; 00082 /** 00083 * 軸の角速度を返す関数 00084 * @return ω [rad/s] 00085 */ 00086 00087 double getOmega()const; 00088 /** 00089 * 角速度を計算するための関数 00090 * 微分を微小時間の変位として計算しているので、タイマー割込などで回さなければいけない 00091 */ 00092 void calOmega(); 00093 /** 00094 * 分解能を指定するための関数 00095 * @param res エンコーダの分解能 00096 */ 00097 void setResolution(int res); 00098 ///エンコーダのcountやωをリセットするための関数 00099 void reset(); 00100 00101 double time(); 00102 00103 Timer timer_; 00104 }; 00105 ///@brief increment型エンコーダ用class(1逓倍) 00106 class Ec1multi : public Ec 00107 { 00108 private: 00109 InterruptIn signalA_; 00110 DigitalIn signalB_; 00111 void upA(); 00112 public: 00113 /** 00114 * @brief コンストラクタの定義 00115 * @details main関数の前に必ず一度宣言する 00116 * 使うエンコーダの数だけ設定する必要がある 00117 00118 @ param signalA エンコーダのA相のピン名 00119 @ param signalB エンコーダのB相のピン名 00120 @ param res エンコーダの分解能 00121 @ remark 2,4逓倍も同様 00122 */ 00123 Ec1multi(PinName signalA,PinName signalB,int res); 00124 }; 00125 ///@brief increment型エンコーダ用class(2逓倍) 00126 class Ec2multi : public Ec 00127 { 00128 private: 00129 InterruptIn signalA_; 00130 DigitalIn signalB_; 00131 void upA(); 00132 void downA(); 00133 public: 00134 /** 00135 * @brief コンストラクタの定義 00136 * @details main関数の前に必ず一度宣言する 00137 * 使うエンコーダの数だけ設定する必要がある 00138 00139 @ param signalA エンコーダのA相のピン名 00140 @ param signalB エンコーダのB相のピン名 00141 @ param res エンコーダの分解能 00142 */ 00143 Ec2multi(PinName signalA,PinName signalB,int res); 00144 }; 00145 ///@brief increment型エンコーダ用class(4逓倍) 00146 class Ec4multi : public Ec 00147 { 00148 private: 00149 InterruptIn signalA_; 00150 InterruptIn signalB_; 00151 void upA(); 00152 void downA(); 00153 void upB(); 00154 void downB(); 00155 int pa_,pb_; 00156 public: 00157 /** 00158 * @brief コンストラクタの定義 00159 * @details main関数の前に必ず一度宣言する 00160 * 使うエンコーダの数だけ設定する必要がある 00161 00162 @ param signalA エンコーダのA相のピン名 00163 @ param signalB エンコーダのB相のピン名 00164 @ param res エンコーダの分解能 00165 */ 00166 Ec4multi(PinName signalA,PinName signalB,int res); 00167 }; 00168 00169 00170 00171 #endif
Generated on Tue Jul 12 2022 20:44:20 by
1.7.2