改良版(仮)
Dependents: harurobo1006 harurobo_1026
Fork of EC by
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);
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を押したらリセット } } }
double getDistance_mm | ( | ) |
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ボタンを押したらリセット } }
void reset | ( | ) | [virtual] |
エンコーダを初期状態に戻す関数 countやomegaの値を0にする
Reimplemented in SpeedControl.
void setDiameter_mm | ( | double | diameter_mm ) |
void setGearRate | ( | double | gear_rate ) |
Generated on Thu Aug 4 2022 11:33:19 by 1.7.2