test

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