test

Committer:
MazeTaka
Date:
Wed Jul 24 17:13:34 2019 +0000
Revision:
9:78eeb2d3dc80
Parent:
8:17aff8f21d19
Child:
10:ad0f13db7b92

        

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 6:8eaadd1e43f1 8 /** @section SAMPLE
MazeTaka 6:8eaadd1e43f1 9 * @code
MazeTaka 6:8eaadd1e43f1 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 7:f81ffb5b69bf 18 * // (A層,B層,分解能)
MazeTaka 5:4e39c821be9c 19 * Ec1multi EC(p7,p8,RESOLUTION); //1逓倍用class
MazeTaka 7:f81ffb5b69bf 20 * // or
MazeTaka 5:4e39c821be9c 21 * //Ec2multi EC(p7,p8,RESOLUTION); //2逓倍用class
MazeTaka 7:f81ffb5b69bf 22 * // or
MazeTaka 5:4e39c821be9c 23 * //Ec4multi EC(p7,p8,RESOLUTION); //4逓倍用class
MazeTaka 6:8eaadd1e43f1 24 * void calcOmega();
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 6:8eaadd1e43f1 30 * ticker.attach(&calcOmega,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 6:8eaadd1e43f1 39 * void calcOmega()
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 6:8eaadd1e43f1 47 * @brief increment型エンコーダ用class
MazeTaka 6:8eaadd1e43f1 48 * @details 1逓倍:Ec1multi
MazeTaka 6:8eaadd1e43f1 49 * 2逓倍:Ec2multi
MazeTaka 6:8eaadd1e43f1 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 9:78eeb2d3dc80 72 /** @details エンコーダのcountを返す関数
MazeTaka 6:8eaadd1e43f1 73 * 1周のcount=分解能×逓倍
MazeTaka 6:8eaadd1e43f1 74 * @return count
MazeTaka 0:eb20667a5a27 75 */
MazeTaka 8:17aff8f21d19 76 int getCount()const;
MazeTaka 0:eb20667a5a27 77 /**
MazeTaka 6:8eaadd1e43f1 78 * 軸の角速度を返す関数
MazeTaka 7:f81ffb5b69bf 79 * @return ω [rad/s]
MazeTaka 0:eb20667a5a27 80 */
MazeTaka 8:17aff8f21d19 81 double getOmega()const;
MazeTaka 0:eb20667a5a27 82 /**
MazeTaka 6:8eaadd1e43f1 83 * 角速度を計算するための関数
MazeTaka 6:8eaadd1e43f1 84 * 微分を微小時間の変位として計算しているので、タイマー割込などで回さなければいけない
MazeTaka 0:eb20667a5a27 85 */
MazeTaka 0:eb20667a5a27 86 void calOmega();
MazeTaka 0:eb20667a5a27 87 /**
MazeTaka 6:8eaadd1e43f1 88 * 分解能を指定するための関数
MazeTaka 6:8eaadd1e43f1 89 * @param res エンコーダの分解能
MazeTaka 0:eb20667a5a27 90 */
MazeTaka 0:eb20667a5a27 91 void setResolution(int res);
MazeTaka 3:c04b12937bae 92 ///エンコーダのcountやωをリセットするための関数
MazeTaka 3:c04b12937bae 93 void reset();
MazeTaka 0:eb20667a5a27 94 Timer timer_;
MazeTaka 0:eb20667a5a27 95 };
MazeTaka 7:f81ffb5b69bf 96 ///@brief increment型エンコーダ用class(1逓倍)
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 6:8eaadd1e43f1 104 /**
MazeTaka 6:8eaadd1e43f1 105 * @brief コンストラクタの定義
MazeTaka 6:8eaadd1e43f1 106 * @details main関数の前に必ず一度宣言する
MazeTaka 6:8eaadd1e43f1 107 * 使うエンコーダの数だけ設定する必要がある
MazeTaka 0:eb20667a5a27 108
MazeTaka 6:8eaadd1e43f1 109 @ param signalA エンコーダのA相のピン名
MazeTaka 6:8eaadd1e43f1 110 @ param signalB エンコーダのB相のピン名
MazeTaka 6:8eaadd1e43f1 111 @ param res エンコーダの分解能
MazeTaka 6:8eaadd1e43f1 112 @ remark 2,4逓倍も同様
MazeTaka 0:eb20667a5a27 113 */
MazeTaka 0:eb20667a5a27 114 Ec1multi(PinName signalA,PinName signalB,int res);
MazeTaka 0:eb20667a5a27 115 };
MazeTaka 7:f81ffb5b69bf 116 ///@brief increment型エンコーダ用class(2逓倍)
MazeTaka 0:eb20667a5a27 117 class Ec2multi : public Ec
MazeTaka 0:eb20667a5a27 118 {
MazeTaka 0:eb20667a5a27 119 private:
MazeTaka 0:eb20667a5a27 120 InterruptIn signalA_;
MazeTaka 0:eb20667a5a27 121 DigitalIn signalB_;
MazeTaka 0:eb20667a5a27 122 void upA();
MazeTaka 0:eb20667a5a27 123 void downA();
MazeTaka 0:eb20667a5a27 124 public:
MazeTaka 6:8eaadd1e43f1 125 /**
MazeTaka 6:8eaadd1e43f1 126 * @brief コンストラクタの定義
MazeTaka 6:8eaadd1e43f1 127 * @details main関数の前に必ず一度宣言する
MazeTaka 6:8eaadd1e43f1 128 * 使うエンコーダの数だけ設定する必要がある
MazeTaka 0:eb20667a5a27 129
MazeTaka 6:8eaadd1e43f1 130 @ param signalA エンコーダのA相のピン名
MazeTaka 6:8eaadd1e43f1 131 @ param signalB エンコーダのB相のピン名
MazeTaka 6:8eaadd1e43f1 132 @ param res エンコーダの分解能
MazeTaka 0:eb20667a5a27 133 */
MazeTaka 0:eb20667a5a27 134 Ec2multi(PinName signalA,PinName signalB,int res);
MazeTaka 0:eb20667a5a27 135 };
MazeTaka 7:f81ffb5b69bf 136 ///@brief increment型エンコーダ用class(4逓倍)
MazeTaka 0:eb20667a5a27 137 class Ec4multi : public Ec
MazeTaka 0:eb20667a5a27 138 {
MazeTaka 0:eb20667a5a27 139 private:
MazeTaka 0:eb20667a5a27 140 InterruptIn signalA_;
MazeTaka 0:eb20667a5a27 141 InterruptIn signalB_;
MazeTaka 0:eb20667a5a27 142 void upA();
MazeTaka 0:eb20667a5a27 143 void downA();
MazeTaka 0:eb20667a5a27 144 void upB();
MazeTaka 0:eb20667a5a27 145 void downB();
MazeTaka 0:eb20667a5a27 146 int pa_,pb_;
MazeTaka 0:eb20667a5a27 147 public:
MazeTaka 6:8eaadd1e43f1 148 /**
MazeTaka 6:8eaadd1e43f1 149 * @brief コンストラクタの定義
MazeTaka 6:8eaadd1e43f1 150 * @details main関数の前に必ず一度宣言する
MazeTaka 6:8eaadd1e43f1 151 * 使うエンコーダの数だけ設定する必要がある
MazeTaka 0:eb20667a5a27 152
MazeTaka 6:8eaadd1e43f1 153 @ param signalA エンコーダのA相のピン名
MazeTaka 6:8eaadd1e43f1 154 @ param signalB エンコーダのB相のピン名
MazeTaka 6:8eaadd1e43f1 155 @ param res エンコーダの分解能
MazeTaka 0:eb20667a5a27 156 */
MazeTaka 0:eb20667a5a27 157 Ec4multi(PinName signalA,PinName signalB,int res);
MazeTaka 0:eb20667a5a27 158 };
MazeTaka 0:eb20667a5a27 159
MazeTaka 0:eb20667a5a27 160
MazeTaka 0:eb20667a5a27 161
MazeTaka 0:eb20667a5a27 162 #endif