test
EC.h
- Committer:
- MazeTaka
- Date:
- 2019-07-04
- Revision:
- 0:eb20667a5a27
- Child:
- 2:670bd19af5e1
File content as of revision 0:eb20667a5a27:
#ifndef _INCLUDED_EC_H_ #define _INCLUDED_EC_H_ #ifndef M_PI #define M_PI 3.14159265359f #endif /** increment型エンコーダ用class 1逓倍:Ec1multi 2逓倍:Ec2multi 4逓倍:Ec4multi **/ class Ec { protected: int count_; //カウント数 double omega_; //角速度(rad/s) int pre_count_; //一つ前のカウント int resolution_; //分解能 int multiplication_; double ptw_; public: /**コンストラクタの定義 1,2,4逓倍の元となるclass @param res エンコーダの分解能 @param multi エンコーダの逓倍 @remarks このclassは各逓倍のclassに継承されるため、使用者が宣言する必要はない */ Ec(int res,int multi); /** エンコーダのcountを返す関数 1周でcount=分解能×逓倍 @return count */ int getCount(); /** 軸の角速度を返す関数 @return ω(rad/s) */ double getOmega(); /** 角速度を計算するための関数 微分を微小時間の変位として計算しているので、タイマー割込などで回さなければいけない */ void calOmega(); /** 分解能を指定するための関数 @param res エンコーダの分解能 */ void setResolution(int res); void reset();///エンコーダのcountやωをリセットするための関数 Timer timer_; }; class Ec1multi : public Ec { private: InterruptIn signalA_; DigitalIn signalB_; void upA(); public: /**コンストラクタの定義 main関数の前に必ず一度宣言する 使うエンコーダの数だけ設定する必要がある @param signalA エンコーダのA相のピン名 @param signalB エンコーダのB相のピン名 @param res エンコーダの分解能 */ Ec1multi(PinName signalA,PinName signalB,int res); }; class Ec2multi : public Ec { private: InterruptIn signalA_; DigitalIn signalB_; void upA(); void downA(); public: /**コンストラクタの定義 main関数の前に必ず一度宣言する 使うエンコーダの数だけ設定する必要がある @param signalA エンコーダのA相のピン名 @param signalB エンコーダのB相のピン名 @param res エンコーダの分解能 */ Ec2multi(PinName signalA,PinName signalB,int res); }; class Ec4multi : public Ec { private: InterruptIn signalA_; InterruptIn signalB_; void upA(); void downA(); void upB(); void downB(); int pa_,pb_; public: /**コンストラクタの定義 main関数の前に必ず一度宣言する 使うエンコーダの数だけ設定する必要がある @param signalA エンコーダのA相のピン名 @param signalB エンコーダのB相のピン名 @param res エンコーダの分解能 */ Ec4multi(PinName signalA,PinName signalB,int res); }; #endif