test

Committer:
o2132613
Date:
Wed Mar 11 09:06:24 2020 +0000
Revision:
13:7a12ba8a93d4
Parent:
12:f261038cb88f
test;

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 10:ad0f13db7b92 78 * 軸の回転角度を返す関数
MazeTaka 10:ad0f13db7b92 79 * @return θ[rad]
MazeTaka 10:ad0f13db7b92 80 */
MazeTaka 11:acbbd742df47 81 double getRad()const;
MazeTaka 12:f261038cb88f 82 /**
MazeTaka 12:f261038cb88f 83 * 軸の角速度を返す関数
MazeTaka 12:f261038cb88f 84 * @return ω [rad/s]
MazeTaka 12:f261038cb88f 85 */
MazeTaka 12:f261038cb88f 86
MazeTaka 8:17aff8f21d19 87 double getOmega()const;
MazeTaka 0:eb20667a5a27 88 /**
MazeTaka 6:8eaadd1e43f1 89 * 角速度を計算するための関数
MazeTaka 6:8eaadd1e43f1 90 * 微分を微小時間の変位として計算しているので、タイマー割込などで回さなければいけない
MazeTaka 0:eb20667a5a27 91 */
MazeTaka 0:eb20667a5a27 92 void calOmega();
MazeTaka 0:eb20667a5a27 93 /**
MazeTaka 6:8eaadd1e43f1 94 * 分解能を指定するための関数
MazeTaka 6:8eaadd1e43f1 95 * @param res エンコーダの分解能
MazeTaka 0:eb20667a5a27 96 */
MazeTaka 0:eb20667a5a27 97 void setResolution(int res);
MazeTaka 3:c04b12937bae 98 ///エンコーダのcountやωをリセットするための関数
MazeTaka 3:c04b12937bae 99 void reset();
MazeTaka 0:eb20667a5a27 100 Timer timer_;
MazeTaka 0:eb20667a5a27 101 };
MazeTaka 7:f81ffb5b69bf 102 ///@brief increment型エンコーダ用class(1逓倍)
MazeTaka 0:eb20667a5a27 103 class Ec1multi : public Ec
MazeTaka 0:eb20667a5a27 104 {
MazeTaka 0:eb20667a5a27 105 private:
MazeTaka 0:eb20667a5a27 106 InterruptIn signalA_;
MazeTaka 0:eb20667a5a27 107 DigitalIn signalB_;
MazeTaka 0:eb20667a5a27 108 void upA();
MazeTaka 0:eb20667a5a27 109 public:
MazeTaka 6:8eaadd1e43f1 110 /**
MazeTaka 6:8eaadd1e43f1 111 * @brief コンストラクタの定義
MazeTaka 6:8eaadd1e43f1 112 * @details main関数の前に必ず一度宣言する
MazeTaka 6:8eaadd1e43f1 113 * 使うエンコーダの数だけ設定する必要がある
MazeTaka 0:eb20667a5a27 114
MazeTaka 6:8eaadd1e43f1 115 @ param signalA エンコーダのA相のピン名
MazeTaka 6:8eaadd1e43f1 116 @ param signalB エンコーダのB相のピン名
MazeTaka 6:8eaadd1e43f1 117 @ param res エンコーダの分解能
MazeTaka 6:8eaadd1e43f1 118 @ remark 2,4逓倍も同様
MazeTaka 0:eb20667a5a27 119 */
MazeTaka 0:eb20667a5a27 120 Ec1multi(PinName signalA,PinName signalB,int res);
MazeTaka 0:eb20667a5a27 121 };
MazeTaka 7:f81ffb5b69bf 122 ///@brief increment型エンコーダ用class(2逓倍)
MazeTaka 0:eb20667a5a27 123 class Ec2multi : public Ec
MazeTaka 0:eb20667a5a27 124 {
MazeTaka 0:eb20667a5a27 125 private:
MazeTaka 0:eb20667a5a27 126 InterruptIn signalA_;
MazeTaka 0:eb20667a5a27 127 DigitalIn signalB_;
MazeTaka 0:eb20667a5a27 128 void upA();
MazeTaka 0:eb20667a5a27 129 void downA();
MazeTaka 0:eb20667a5a27 130 public:
MazeTaka 6:8eaadd1e43f1 131 /**
MazeTaka 6:8eaadd1e43f1 132 * @brief コンストラクタの定義
MazeTaka 6:8eaadd1e43f1 133 * @details main関数の前に必ず一度宣言する
MazeTaka 6:8eaadd1e43f1 134 * 使うエンコーダの数だけ設定する必要がある
MazeTaka 0:eb20667a5a27 135
MazeTaka 6:8eaadd1e43f1 136 @ param signalA エンコーダのA相のピン名
MazeTaka 6:8eaadd1e43f1 137 @ param signalB エンコーダのB相のピン名
MazeTaka 6:8eaadd1e43f1 138 @ param res エンコーダの分解能
MazeTaka 0:eb20667a5a27 139 */
MazeTaka 0:eb20667a5a27 140 Ec2multi(PinName signalA,PinName signalB,int res);
MazeTaka 0:eb20667a5a27 141 };
MazeTaka 7:f81ffb5b69bf 142 ///@brief increment型エンコーダ用class(4逓倍)
MazeTaka 0:eb20667a5a27 143 class Ec4multi : public Ec
MazeTaka 0:eb20667a5a27 144 {
MazeTaka 0:eb20667a5a27 145 private:
MazeTaka 0:eb20667a5a27 146 InterruptIn signalA_;
MazeTaka 0:eb20667a5a27 147 InterruptIn signalB_;
MazeTaka 0:eb20667a5a27 148 void upA();
MazeTaka 0:eb20667a5a27 149 void downA();
MazeTaka 0:eb20667a5a27 150 void upB();
MazeTaka 0:eb20667a5a27 151 void downB();
MazeTaka 0:eb20667a5a27 152 int pa_,pb_;
MazeTaka 0:eb20667a5a27 153 public:
MazeTaka 6:8eaadd1e43f1 154 /**
MazeTaka 6:8eaadd1e43f1 155 * @brief コンストラクタの定義
MazeTaka 6:8eaadd1e43f1 156 * @details main関数の前に必ず一度宣言する
MazeTaka 6:8eaadd1e43f1 157 * 使うエンコーダの数だけ設定する必要がある
MazeTaka 0:eb20667a5a27 158
MazeTaka 6:8eaadd1e43f1 159 @ param signalA エンコーダのA相のピン名
MazeTaka 6:8eaadd1e43f1 160 @ param signalB エンコーダのB相のピン名
MazeTaka 6:8eaadd1e43f1 161 @ param res エンコーダの分解能
MazeTaka 0:eb20667a5a27 162 */
MazeTaka 0:eb20667a5a27 163 Ec4multi(PinName signalA,PinName signalB,int res);
MazeTaka 0:eb20667a5a27 164 };
MazeTaka 0:eb20667a5a27 165
MazeTaka 0:eb20667a5a27 166
MazeTaka 0:eb20667a5a27 167
MazeTaka 0:eb20667a5a27 168 #endif