test

Committer:
MazeTaka
Date:
Thu Jul 04 12:11:31 2019 +0000
Revision:
5:4e39c821be9c
Parent:
4:d1c16f9877b6
Child:
6:8eaadd1e43f1

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MazeTaka 0:eb20667a5a27 1 #ifndef _INCLUDED_EC_H_
MazeTaka 0:eb20667a5a27 2 #define _INCLUDED_EC_H_
MazeTaka 0:eb20667a5a27 3
MazeTaka 0:eb20667a5a27 4 #ifndef M_PI
MazeTaka 0:eb20667a5a27 5 #define M_PI 3.14159265359f
MazeTaka 0:eb20667a5a27 6 #endif
MazeTaka 5:4e39c821be9c 7
MazeTaka 5:4e39c821be9c 8 /**@section SAMPLE
MazeTaka 5:4e39c821be9c 9 @code
MazeTaka 5:4e39c821be9c 10 //プログラム例
MazeTaka 5:4e39c821be9c 11 * #include "mbed.h"
MazeTaka 5:4e39c821be9c 12 * #include "EC.h"
MazeTaka 5:4e39c821be9c 13 *
MazeTaka 5:4e39c821be9c 14 * #define RESOLUTION 500
MazeTaka 5:4e39c821be9c 15 * Ticker ticker;
MazeTaka 5:4e39c821be9c 16 * Serial pc(USBTX,USBRX);
MazeTaka 5:4e39c821be9c 17 *
MazeTaka 5:4e39c821be9c 18 * //(A層,B層,分解能)
MazeTaka 5:4e39c821be9c 19 * Ec1multi EC(p7,p8,RESOLUTION); //1逓倍用class
MazeTaka 5:4e39c821be9c 20 * //or
MazeTaka 5:4e39c821be9c 21 * //Ec2multi EC(p7,p8,RESOLUTION); //2逓倍用class
MazeTaka 5:4e39c821be9c 22 * //or
MazeTaka 5:4e39c821be9c 23 * //Ec4multi EC(p7,p8,RESOLUTION); //4逓倍用class
MazeTaka 5:4e39c821be9c 24 * void calOmega();
MazeTaka 5:4e39c821be9c 25 *
MazeTaka 5:4e39c821be9c 26 * int main()
MazeTaka 5:4e39c821be9c 27 * {
MazeTaka 5:4e39c821be9c 28 * int count=0;
MazeTaka 5:4e39c821be9c 29 * double omega;
MazeTaka 5:4e39c821be9c 30 * ticker.attach(&calOmega,0.05);
MazeTaka 5:4e39c821be9c 31 *
MazeTaka 5:4e39c821be9c 32 * while(1) {
MazeTaka 5:4e39c821be9c 33 * count=EC.getCount();
MazeTaka 5:4e39c821be9c 34 * omega=EC.getOmega();
MazeTaka 5:4e39c821be9c 35 * pc.printf("count=%d,",count);
MazeTaka 5:4e39c821be9c 36 * pc.printf("omega=%f\r\n",omega);
MazeTaka 5:4e39c821be9c 37 * }
MazeTaka 5:4e39c821be9c 38 * }
MazeTaka 5:4e39c821be9c 39 * void calOmega()
MazeTaka 5:4e39c821be9c 40 * {
MazeTaka 5:4e39c821be9c 41 * EC.calOmega();
MazeTaka 5:4e39c821be9c 42 * }
MazeTaka 5:4e39c821be9c 43 * @endcode
MazeTaka 5:4e39c821be9c 44 */
MazeTaka 5:4e39c821be9c 45
MazeTaka 0:eb20667a5a27 46 /**
MazeTaka 4:d1c16f9877b6 47 * @brief increment型エンコーダ用class
MazeTaka 4:d1c16f9877b6 48 * @details 1逓倍:Ec1multi
MazeTaka 4:d1c16f9877b6 49 * 2逓倍:Ec2multi
MazeTaka 4:d1c16f9877b6 50 * 4逓倍:Ec4multi
MazeTaka 0:eb20667a5a27 51 **/
MazeTaka 0:eb20667a5a27 52 class Ec
MazeTaka 0:eb20667a5a27 53 {
MazeTaka 0:eb20667a5a27 54 protected:
MazeTaka 0:eb20667a5a27 55 int count_; //カウント数
MazeTaka 0:eb20667a5a27 56 double omega_; //角速度(rad/s)
MazeTaka 0:eb20667a5a27 57 int pre_count_; //一つ前のカウント
MazeTaka 0:eb20667a5a27 58 int resolution_; //分解能
MazeTaka 0:eb20667a5a27 59 int multiplication_;
MazeTaka 0:eb20667a5a27 60 double ptw_;
MazeTaka 0:eb20667a5a27 61
MazeTaka 0:eb20667a5a27 62 public:
MazeTaka 3:c04b12937bae 63 /*コンストラクタの定義
MazeTaka 0:eb20667a5a27 64 1,2,4逓倍の元となるclass
MazeTaka 0:eb20667a5a27 65
MazeTaka 0:eb20667a5a27 66 @param res エンコーダの分解能
MazeTaka 0:eb20667a5a27 67 @param multi エンコーダの逓倍
MazeTaka 0:eb20667a5a27 68
MazeTaka 0:eb20667a5a27 69 @remarks このclassは各逓倍のclassに継承されるため、使用者が宣言する必要はない
MazeTaka 0:eb20667a5a27 70 */
MazeTaka 0:eb20667a5a27 71 Ec(int res,int multi);
MazeTaka 4:d1c16f9877b6 72 /**@fn int getCount()
MazeTaka 5:4e39c821be9c 73 * エンコーダのcountを返す関数
MazeTaka 5:4e39c821be9c 74 * 1周のcount=分解能×逓倍
MazeTaka 5:4e39c821be9c 75 * @return count
MazeTaka 0:eb20667a5a27 76 */
MazeTaka 0:eb20667a5a27 77 int getCount();
MazeTaka 0:eb20667a5a27 78 /**
MazeTaka 5:4e39c821be9c 79 * 軸の角速度を返す関数
MazeTaka 5:4e39c821be9c 80 * @return ω(rad/s)
MazeTaka 0:eb20667a5a27 81 */
MazeTaka 0:eb20667a5a27 82 double getOmega();
MazeTaka 0:eb20667a5a27 83 /**
MazeTaka 5:4e39c821be9c 84 * 角速度を計算するための関数
MazeTaka 5:4e39c821be9c 85 * 微分を微小時間の変位として計算しているので、タイマー割込などで回さなければいけない
MazeTaka 0:eb20667a5a27 86 */
MazeTaka 0:eb20667a5a27 87 void calOmega();
MazeTaka 0:eb20667a5a27 88 /**
MazeTaka 5:4e39c821be9c 89 * 分解能を指定するための関数
MazeTaka 5:4e39c821be9c 90 * @param res エンコーダの分解能
MazeTaka 0:eb20667a5a27 91 */
MazeTaka 0:eb20667a5a27 92 void setResolution(int res);
MazeTaka 3:c04b12937bae 93 ///エンコーダのcountやωをリセットするための関数
MazeTaka 3:c04b12937bae 94 void reset();
MazeTaka 0:eb20667a5a27 95 Timer timer_;
MazeTaka 0:eb20667a5a27 96 };
MazeTaka 0:eb20667a5a27 97 class Ec1multi : public Ec
MazeTaka 0:eb20667a5a27 98 {
MazeTaka 0:eb20667a5a27 99 private:
MazeTaka 0:eb20667a5a27 100 InterruptIn signalA_;
MazeTaka 0:eb20667a5a27 101 DigitalIn signalB_;
MazeTaka 0:eb20667a5a27 102 void upA();
MazeTaka 0:eb20667a5a27 103 public:
MazeTaka 0:eb20667a5a27 104 /**コンストラクタの定義
MazeTaka 0:eb20667a5a27 105 main関数の前に必ず一度宣言する
MazeTaka 0:eb20667a5a27 106 使うエンコーダの数だけ設定する必要がある
MazeTaka 0:eb20667a5a27 107
MazeTaka 0:eb20667a5a27 108 @param signalA エンコーダのA相のピン名
MazeTaka 0:eb20667a5a27 109 @param signalB エンコーダのB相のピン名
MazeTaka 0:eb20667a5a27 110 @param res エンコーダの分解能
MazeTaka 3:c04b12937bae 111 @remark 2,4逓倍も同様
MazeTaka 0:eb20667a5a27 112 */
MazeTaka 0:eb20667a5a27 113 Ec1multi(PinName signalA,PinName signalB,int res);
MazeTaka 0:eb20667a5a27 114 };
MazeTaka 0:eb20667a5a27 115 class Ec2multi : public Ec
MazeTaka 0:eb20667a5a27 116 {
MazeTaka 0:eb20667a5a27 117 private:
MazeTaka 0:eb20667a5a27 118 InterruptIn signalA_;
MazeTaka 0:eb20667a5a27 119 DigitalIn signalB_;
MazeTaka 0:eb20667a5a27 120 void upA();
MazeTaka 0:eb20667a5a27 121 void downA();
MazeTaka 0:eb20667a5a27 122 public:
MazeTaka 0:eb20667a5a27 123 /**コンストラクタの定義
MazeTaka 0:eb20667a5a27 124 main関数の前に必ず一度宣言する
MazeTaka 0:eb20667a5a27 125 使うエンコーダの数だけ設定する必要がある
MazeTaka 0:eb20667a5a27 126
MazeTaka 0:eb20667a5a27 127 @param signalA エンコーダのA相のピン名
MazeTaka 0:eb20667a5a27 128 @param signalB エンコーダのB相のピン名
MazeTaka 0:eb20667a5a27 129 @param res エンコーダの分解能
MazeTaka 0:eb20667a5a27 130 */
MazeTaka 0:eb20667a5a27 131 Ec2multi(PinName signalA,PinName signalB,int res);
MazeTaka 0:eb20667a5a27 132 };
MazeTaka 0:eb20667a5a27 133 class Ec4multi : public Ec
MazeTaka 0:eb20667a5a27 134 {
MazeTaka 0:eb20667a5a27 135 private:
MazeTaka 0:eb20667a5a27 136 InterruptIn signalA_;
MazeTaka 0:eb20667a5a27 137 InterruptIn signalB_;
MazeTaka 0:eb20667a5a27 138 void upA();
MazeTaka 0:eb20667a5a27 139 void downA();
MazeTaka 0:eb20667a5a27 140 void upB();
MazeTaka 0:eb20667a5a27 141 void downB();
MazeTaka 0:eb20667a5a27 142 int pa_,pb_;
MazeTaka 0:eb20667a5a27 143 public:
MazeTaka 0:eb20667a5a27 144 /**コンストラクタの定義
MazeTaka 0:eb20667a5a27 145 main関数の前に必ず一度宣言する
MazeTaka 0:eb20667a5a27 146 使うエンコーダの数だけ設定する必要がある
MazeTaka 0:eb20667a5a27 147
MazeTaka 0:eb20667a5a27 148 @param signalA エンコーダのA相のピン名
MazeTaka 0:eb20667a5a27 149 @param signalB エンコーダのB相のピン名
MazeTaka 0:eb20667a5a27 150 @param res エンコーダの分解能
MazeTaka 0:eb20667a5a27 151 */
MazeTaka 0:eb20667a5a27 152 Ec4multi(PinName signalA,PinName signalB,int res);
MazeTaka 0:eb20667a5a27 153 };
MazeTaka 0:eb20667a5a27 154
MazeTaka 0:eb20667a5a27 155
MazeTaka 0:eb20667a5a27 156
MazeTaka 0:eb20667a5a27 157 #endif