first

Dependents:   17robo_fuzi 17robo_tokyo_kaede

Committer:
echo_piyo
Date:
Wed Sep 27 08:58:30 2017 +0000
Revision:
1:0c64de09bd9b
Parent:
0:929eee8e2c2c
?????????????; ???????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
echo_piyo 1:0c64de09bd9b 1 /*
echo_piyo 1:0c64de09bd9b 2 [Encorder]
echo_piyo 1:0c64de09bd9b 3 **PositionPidを継承しているバージョン
echo_piyo 1:0c64de09bd9b 4 **エンコーダICからの出力を読み取りPprを指定することで, pulse, deg, rad, 回転数などを出力
echo_piyo 1:0c64de09bd9b 5 **ターゲット角度を指定することでPID制御を通した出力値(-1.0~0.0~1.0)出力できる
echo_piyo 1:0c64de09bd9b 6
echo_piyo 1:0c64de09bd9b 7 [Public Member Functions]
echo_piyo 1:0c64de09bd9b 8 Encoder (PinName A_Phase, PinName B_Phase);
echo_piyo 1:0c64de09bd9b 9 **<Create> 宣言
echo_piyo 1:0c64de09bd9b 10
echo_piyo 1:0c64de09bd9b 11 void setup(float Kp, float Ki, float Kd, float dt);
echo_piyo 1:0c64de09bd9b 12 **PIDのパラメータを設定
echo_piyo 1:0c64de09bd9b 13
echo_piyo 1:0c64de09bd9b 14 void cal(float target, float dt);
echo_piyo 1:0c64de09bd9b 15 **calを行うことでデータを更新できる
echo_piyo 1:0c64de09bd9b 16
echo_piyo 1:0c64de09bd9b 17 float duty();
echo_piyo 1:0c64de09bd9b 18 **PID計算を行ったモーターへの出力値(-1.0~1.0)を出力
echo_piyo 1:0c64de09bd9b 19
echo_piyo 1:0c64de09bd9b 20 float duty_enableWidth(float duty_min, float duty_max);
echo_piyo 1:0c64de09bd9b 21 **PID計算を行ったモーターへの出力値(-1.0~1.0)を出力
echo_piyo 1:0c64de09bd9b 22 **引数でduty値を0と基準としたときの前後を指定することで、ストールさせないようにする
echo_piyo 1:0c64de09bd9b 23
echo_piyo 1:0c64de09bd9b 24 void setPpr(int Ppr);
echo_piyo 1:0c64de09bd9b 25 **エンコーダのPPRを指定
echo_piyo 1:0c64de09bd9b 26
echo_piyo 1:0c64de09bd9b 27 float deg();
echo_piyo 1:0c64de09bd9b 28 **設定したPPRに基づきdegを出力
echo_piyo 1:0c64de09bd9b 29
echo_piyo 1:0c64de09bd9b 30 float get_deg_cylinder();
echo_piyo 1:0c64de09bd9b 31 **cylinder用のdegを出力 //基本的に17roboの大会用
echo_piyo 1:0c64de09bd9b 32
echo_piyo 1:0c64de09bd9b 33 float rad();
echo_piyo 1:0c64de09bd9b 34 **設定したPPRに基づきradを出力
echo_piyo 1:0c64de09bd9b 35
echo_piyo 1:0c64de09bd9b 36 int pulse();
echo_piyo 1:0c64de09bd9b 37 **設定したPPRに基づきradを出力
echo_piyo 1:0c64de09bd9b 38
echo_piyo 1:0c64de09bd9b 39 float N();
echo_piyo 1:0c64de09bd9b 40 **設定したPPRに基づき回転数を出力
echo_piyo 1:0c64de09bd9b 41
echo_piyo 1:0c64de09bd9b 42 void origin();
echo_piyo 1:0c64de09bd9b 43 **エンコーダ読み取り数を原点に指定する
echo_piyo 1:0c64de09bd9b 44 */
echo_piyo 1:0c64de09bd9b 45
echo_piyo 0:929eee8e2c2c 46 #ifndef MBED_PID_ENCORDER_H
echo_piyo 0:929eee8e2c2c 47 #define MBED_PID_ENCORDER_H
echo_piyo 0:929eee8e2c2c 48
echo_piyo 0:929eee8e2c2c 49 #include "pid.h"
echo_piyo 0:929eee8e2c2c 50 #include "mbed.h"
echo_piyo 0:929eee8e2c2c 51
echo_piyo 0:929eee8e2c2c 52 #define PI 3.141592654f
echo_piyo 0:929eee8e2c2c 53 #define Nmax 18000
echo_piyo 0:929eee8e2c2c 54 #define invalidN 0.1
echo_piyo 0:929eee8e2c2c 55
echo_piyo 0:929eee8e2c2c 56 class Encoder : public PositionPid //: public Speed_pid
echo_piyo 0:929eee8e2c2c 57 {
echo_piyo 0:929eee8e2c2c 58 public:
echo_piyo 0:929eee8e2c2c 59 Encoder (PinName A_Phase, PinName B_Phase);
echo_piyo 0:929eee8e2c2c 60 void setPpr(int Ppr);
echo_piyo 0:929eee8e2c2c 61 void cal(float target, float dt);
echo_piyo 0:929eee8e2c2c 62 float deg();
echo_piyo 0:929eee8e2c2c 63 float get_deg_cylinder();
echo_piyo 0:929eee8e2c2c 64 float rad();
echo_piyo 0:929eee8e2c2c 65 int pulse();
echo_piyo 0:929eee8e2c2c 66 float N();
echo_piyo 0:929eee8e2c2c 67 void origin();
echo_piyo 0:929eee8e2c2c 68
echo_piyo 0:929eee8e2c2c 69 private :
echo_piyo 0:929eee8e2c2c 70 InterruptIn A;
echo_piyo 0:929eee8e2c2c 71 InterruptIn B;
echo_piyo 0:929eee8e2c2c 72
echo_piyo 0:929eee8e2c2c 73 int ppr;
echo_piyo 0:929eee8e2c2c 74 signed int count;
echo_piyo 0:929eee8e2c2c 75 float radian,oldtheta;
echo_piyo 0:929eee8e2c2c 76 float w,v,n;
echo_piyo 0:929eee8e2c2c 77 float degree, deg_cylinder;
echo_piyo 0:929eee8e2c2c 78
echo_piyo 0:929eee8e2c2c 79 void A_count();
echo_piyo 0:929eee8e2c2c 80 void B_count();
echo_piyo 0:929eee8e2c2c 81 };
echo_piyo 0:929eee8e2c2c 82
echo_piyo 0:929eee8e2c2c 83 #endif