自分用QEI
エンコーダの回転方向はデフォの状態の反対を正としたいならrotReverce()を呼び出すと反対になる.
22020/3/6 移動平均を使ってパルスを平滑化し,RPSを算出している. useAvePRS()を書くことで,エンコーダのパルスを時間平均しそのままRPSを算出する関数MoveAve_pulse_to_RPS()がタイマー割り込みで呼び出される.移動平均を使うことでエンコーダのパルスのばらつきを無くし,平均をとらないとガタガタになるRPSがそこそこ綺麗になる.3000usごとの割り込み.この時間が長いほど精度は高い.あとclass内で配列の格納数をconst int で定義しているため黄色いエラーが出るけど無視. この方法でとったRPSの呼び出しはgetRPS()を使う.
QEI.h@4:13f78735242e, 2020-04-13 (annotated)
- Committer:
- ttrist
- Date:
- Mon Apr 13 05:57:14 2020 +0000
- Revision:
- 4:13f78735242e
- Parent:
- 3:4f69bb55ab4a
- Child:
- 5:01e1a1dfbd5e
Rename : pulsecount -> countpulse; Remodel : (exsample) "pulsecount" is remodeled to "pulsecount2 ".; ; remodeled function name are likely "fancname2".
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ttrist | 0:47508ccc086b | 1 | #ifndef QEI_H |
ttrist | 0:47508ccc086b | 2 | #define QEI_H |
ttrist | 2:98811a31580a | 3 | |
ttrist | 0:47508ccc086b | 4 | #include "mbed.h" |
ttrist | 2:98811a31580a | 5 | |
ttrist | 2:98811a31580a | 6 | |
ttrist | 0:47508ccc086b | 7 | class QEI |
ttrist | 0:47508ccc086b | 8 | { |
ttrist | 0:47508ccc086b | 9 | public: |
ttrist | 2:98811a31580a | 10 | //引数は(A相のピン,B相のピン,1回転のパルスPPR,timerインスタンス,tickerインスタンス) |
ttrist | 0:47508ccc086b | 11 | QEI(PinName A,PinName B,int PPR,Timer *timer,Ticker *ticker); |
ttrist | 4:13f78735242e | 12 | |
ttrist | 2:98811a31580a | 13 | //初期設定 |
ttrist | 0:47508ccc086b | 14 | void init(); |
ttrist | 4:13f78735242e | 15 | |
ttrist | 2:98811a31580a | 16 | //MoveAve_pulse_to_RPSを使う場合に記述.3333usごとの割り込み |
ttrist | 0:47508ccc086b | 17 | void useAvePRS(); |
ttrist | 4:13f78735242e | 18 | |
ttrist | 2:98811a31580a | 19 | //パルスカウント |
ttrist | 4:13f78735242e | 20 | void PulseCount(); |
ttrist | 4:13f78735242e | 21 | |
ttrist | 2:98811a31580a | 22 | //移動平均とるだけ |
ttrist | 2:98811a31580a | 23 | void MoveAve_pulse(); |
ttrist | 4:13f78735242e | 24 | |
ttrist | 2:98811a31580a | 25 | //移動平均を使ったRPS算出 |
ttrist | 0:47508ccc086b | 26 | void MoveAve_pulse_to_RPS(); |
ttrist | 4:13f78735242e | 27 | |
ttrist | 2:98811a31580a | 28 | //MoveAve_pulse_to_RPSで出したRPS値を返す |
ttrist | 1:2b1d4925ea1c | 29 | double getRPS(); |
ttrist | 4:13f78735242e | 30 | |
ttrist | 2:98811a31580a | 31 | //オドメトリ用関数 |
ttrist | 2:98811a31580a | 32 | double Odometry(double WheelDia); |
ttrist | 4:13f78735242e | 33 | |
ttrist | 2:98811a31580a | 34 | //返し値を反転させることができる |
ttrist | 0:47508ccc086b | 35 | void rotReverce(); |
ttrist | 0:47508ccc086b | 36 | |
ttrist | 4:13f78735242e | 37 | //パルスの確認 |
ttrist | 4:13f78735242e | 38 | int returnPulse(); |
ttrist | 4:13f78735242e | 39 | |
ttrist | 4:13f78735242e | 40 | //********************処理をもっと頭良さげにしたものが2******************** |
ttrist | 4:13f78735242e | 41 | //*********************違いはコメントアウトで説明************************* |
ttrist | 4:13f78735242e | 42 | void useAvePRS2();//をタイマー割り込みで使用 |
ttrist | 4:13f78735242e | 43 | |
ttrist | 4:13f78735242e | 44 | void PulseCount2();//エンコーダの表を参照するようになった |
ttrist | 4:13f78735242e | 45 | |
ttrist | 4:13f78735242e | 46 | void rotReverce2();//表自体を反転させることで正転方向を変更する |
ttrist | 4:13f78735242e | 47 | |
ttrist | 4:13f78735242e | 48 | void MoveAve_pulse_to_RPS2();//表を参照した移動平均とrps.多分こっちのが処理少し軽い |
ttrist | 4:13f78735242e | 49 | |
ttrist | 4:13f78735242e | 50 | double getRPS2();//MoveAve_pulse_to_RPS2で出したRPS値を返す |
ttrist | 4:13f78735242e | 51 | |
ttrist | 4:13f78735242e | 52 | double Odometry2(double WheelDia);//オドメトリ用関数2 |
ttrist | 4:13f78735242e | 53 | |
ttrist | 4:13f78735242e | 54 | |
ttrist | 0:47508ccc086b | 55 | private: |
ttrist | 0:47508ccc086b | 56 | InterruptIn chA; |
ttrist | 0:47508ccc086b | 57 | InterruptIn chB; |
ttrist | 0:47508ccc086b | 58 | Timer *_timer; |
ttrist | 0:47508ccc086b | 59 | Ticker *_ticker; |
ttrist | 0:47508ccc086b | 60 | int _PPR; |
ttrist | 1:2b1d4925ea1c | 61 | double current_rps; |
ttrist | 0:47508ccc086b | 62 | uint8_t pre_ABstate; |
ttrist | 0:47508ccc086b | 63 | const int data_sizeof = 30; |
ttrist | 0:47508ccc086b | 64 | int pulse,pulseData[data_sizeof]; |
ttrist | 1:2b1d4925ea1c | 65 | double pulseAve; |
ttrist | 1:2b1d4925ea1c | 66 | double rps; |
ttrist | 0:47508ccc086b | 67 | int8_t NrotDIR; |
ttrist | 3:4f69bb55ab4a | 68 | double pre_time; //修正1:関数内staticからグローバルへ |
ttrist | 0:47508ccc086b | 69 | }; |
ttrist | 0:47508ccc086b | 70 | |
ttrist | 0:47508ccc086b | 71 | #endif |