ai

Dependents:   ball_snatch NHK2020-arm-sub NHK2020-arm-sub NHK2020-arm-sub2 ... more

Committer:
MazeTaka
Date:
Wed Jul 17 06:21:42 2019 +0000
Revision:
7:f81ffb5b69bf
Parent:
6:8eaadd1e43f1
Child:
8:17aff8f21d19

        

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