自分用QEI
Embed:
(wiki syntax)
Show/hide line numbers
QEI.h
00001 #ifndef QEI_H 00002 #define QEI_H 00003 00004 #include "mbed.h" 00005 00006 00007 class QEI 00008 { 00009 public: 00010 //引数は(A相のピン,B相のピン,1回転のパルスPPR,timerインスタンス,tickerインスタンス) 00011 QEI(PinName A,PinName B,int PPR,Timer *timer,Ticker *ticker); 00012 00013 //初期設定 00014 void init(); 00015 00016 void Setting_ABstate_Table();//エンコーダの参照表に代入 00017 00018 //MoveAve_pulse_to_RPSを使う場合に記述.3333usごとの割り込み 00019 void useAvePRS(); 00020 00021 //パルスカウント 00022 void PulseCount(); 00023 00024 //移動平均とるだけ 00025 void MoveAve_pulse(); 00026 00027 //移動平均を使ったRPS算出 00028 void MoveAve_pulse_to_RPS(); 00029 00030 //MoveAve_pulse_to_RPSで出したRPS値を返す 00031 double getRPS(); 00032 00033 //オドメトリ用関数 00034 double Odometry(double WheelDia); 00035 00036 //返し値を反転させることができる 00037 void rotReverce(); 00038 00039 //パルスの確認 00040 int returnPulse(); 00041 00042 //********************処理をもっと頭良さげにしたものが2******************** 00043 //*********************違いはコメントアウトで説明************************* 00044 void useAvePRS2();//をタイマー割り込みで使用 00045 00046 void PulseCount2();//エンコーダの表を参照するようになった 00047 00048 void rotReverce2();//表自体を反転させることで正転方向を変更する 00049 00050 void MoveAve_pulse_to_RPS2();//表を参照した移動平均とrps.多分こっちのが処理少し軽い 00051 00052 double getRPS2();//MoveAve_pulse_to_RPS2で出したRPS値を返す 00053 00054 double Odometry2(double WheelDia);//オドメトリ用関数2 00055 00056 00057 private: 00058 InterruptIn chA; 00059 InterruptIn chB; 00060 Timer *_timer; 00061 Ticker *_ticker; 00062 int _PPR; 00063 double current_rps; 00064 uint8_t pre_ABstate; 00065 const int data_sizeof = 30; 00066 int pulse,pulseData[data_sizeof]; 00067 double pulseAve; 00068 double rps; 00069 int8_t NrotDIR; 00070 double pre_time; //修正1:関数内staticからグローバルへ 00071 int ABstate_Table[15]; 00072 }; 00073 00074 #endif
Generated on Wed Jul 20 2022 00:45:32 by
1.7.2