ai
Dependents: ball_snatch NHK2020-arm-sub NHK2020-arm-sub NHK2020-arm-sub2 ... more
Diff: EC.h
- Revision:
- 0:eb20667a5a27
- Child:
- 2:670bd19af5e1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EC.h Thu Jul 04 09:25:36 2019 +0000 @@ -0,0 +1,116 @@ +#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 \ No newline at end of file