改良版(仮)

Dependents:   harurobo1006 harurobo_1026

Fork of EC by ROBOSTEP_LIBRARY

Embed: (wiki syntax)

« Back to documentation index

Ec Class Reference

Ec Class Reference

increment型encoder用class. More...

#include <EC.h>

Inherited by SpeedControl.

Public Member Functions

 Ec (PinName signalA, PinName signalB, PinName signalZ, int s, double t)
 コンストラクタの定義
int getCount ()
 countの値を返す関数(int型)
void CalOmega ()
 omega(角速度 rad/s)の値を計算する関数
double getOmega ()
 omega(角速度 rad/s)の値を返す関数(double型)
double getPreCount ()
 四倍精度のcountの値を返す関数(double型)
virtual void reset ()
 エンコーダを初期状態に戻す関数 countやomegaの値を0にする
void setTime (double t)
 角速度計算の間隔dtを決めることができる(デフォルトは0.05秒)
int getRev ()
 (Z相を使用する場合)回転回数を返す関数(int型)
double getRPM ()
 (Z相を使用する場合)回転速度(rpm)の値を返す関数(double型)
double getDistance_mm ()
 先にsetDiameter_mmをしないと正しい値とならない
void setDiameter_mm (double diameter_mm)
void setGearRate (double gear_rate)

Detailed Description

increment型encoder用class.

Z相(1周につき1回立ち上がる)の機能あり. 普通に使う分には不必要な機能ですが、回転回数が欲しい場合や、回転が非常に早い物の回転速度が欲しい場合などで A,B相での処理だとマイコンが追いつかない場合などに使ってください

Definition at line 13 of file EC.h.


Constructor & Destructor Documentation

Ec ( PinName  signalA,
PinName  signalB,
PinName  signalZ,
int  s = defsolution,
double  t = deftime 
)

コンストラクタの定義

***Z相の機能を追加したことで引数が増えました!!!!***

main関数の前に必ず一度宣言する

使うエンコーダの数だけ設定する必要がある

Parameters:
signalAエンコーダA相のピン名
signalBエンコーダB相のピン名
signalZエンコーダZ相のピン名
sエンコーダの分解能(省略可)
t角速度計算の間隔(省略可)

CAUTION

今まで以下のように定義していたものは

  #include "mbed.h"
  #include "EC.h"

  Ec Ec1(PA_0,PA_1,1024,0.05);

次のようにZ相の引数の部分に、NCと入れれば今までの様に使える

  #include "mbed.h"
  #include "EC.h"

  Ec Ec1(PA_0,PA_1,NC,1024,0.05);

Definition at line 81 of file EC.cpp.


Member Function Documentation

void CalOmega (  )

omega(角速度 rad/s)の値を計算する関数

CAUTION

CalOmega関数は、一定時間ごと(dtごと)に計算される必要があるので、main関数内でタイマー割り込みを設定する必要がある。

  #include "mbed.h"
  #include "EC.h"        //ライブラリをインクルード

  Ec Ec1(PA_0,PA_1,NC,1024,0.05); //分解能1024、計算間隔0.05秒に設定、Z相は使わない
  Ticker ticker;
  DigitalIn button(USER_BUTTON);
  Serial pc(USBTX,USBRX);

  void calOmega(){
      Ec1.CalOmega();
  }

  int main(){
      ticker.attach(&calOmega,0.05); //0.05秒間隔で角速度を計算
     while(1){
          pc.printf(" count1=%d ",Ec1.getCount());
          pc.printf(" omega1=%f\r\n ",Ec1.getOmega());
          if(pc.readable()) {
              char sel=pc.getc();
              if(sel=='r') Ec1.reset(); //rを押したらリセット
          }
      }
  }

Definition at line 119 of file EC.cpp.

int getCount (  )

countの値を返す関数(int型)

Definition at line 114 of file EC.cpp.

double getDistance_mm (  )

先にsetDiameter_mmをしないと正しい値とならない

Returns:
現在距離.
#include <mbed.h>
#include "EC.h"
Ec ec(PB_5, PB_4, NC, 500, 0.5);
int main()
{
    ec.setDiameter_mm(48);
    while(1) {
        printf("%f\r\n", ec.getDistance_mm());
        wait(0.1);
    }
}

Definition at line 172 of file EC.cpp.

double getOmega (  )

omega(角速度 rad/s)の値を返す関数(double型)

Definition at line 125 of file EC.cpp.

double getPreCount (  )

四倍精度のcountの値を返す関数(double型)

Definition at line 130 of file EC.cpp.

int getRev (  )

(Z相を使用する場合)回転回数を返す関数(int型)

Definition at line 162 of file EC.cpp.

double getRPM (  )

(Z相を使用する場合)回転速度(rpm)の値を返す関数(double型)

SAMPLE

z相を使う場合のプログラムの例

  #include "mbed.h"
  #include "EC.h"        //ライブラリをインクルード

  Ec Ec1(NC,NC,PA_0,1024,0.05); //A相B相が不必要な場合も、このようにNCと入れればよい
  DigitalIn button(USER_BUTTON);
  Serial pc(USBTX,USBRX);

  int main(){
     while(1){
          pc.printf(" rev1=%d ",Ec1.getRev());
          pc.printf(" rpm1=%f\r\n ",Ec1.getRPM());
          if(!button) Ec1.reset();     //USERボタンを押したらリセット
      }
  }

Definition at line 157 of file EC.cpp.

void reset (  ) [virtual]

エンコーダを初期状態に戻す関数 countやomegaの値を0にする

Reimplemented in SpeedControl.

Definition at line 137 of file EC.cpp.

void setDiameter_mm ( double  diameter_mm )
Parameters:
diameter_mm測定輪半径

Definition at line 178 of file EC.cpp.

void setGearRate ( double  gear_rate )
Parameters:
gear比(エンコーダタイムプーリー/測定輪タイムプーリー)

Definition at line 184 of file EC.cpp.

void setTime ( double  t )

角速度計算の間隔dtを決めることができる(デフォルトは0.05秒)

Definition at line 152 of file EC.cpp.