ステッピングモータ 関数リファレンス

(2014.8.4 作成)

 このサイトで公開しているステッピングモータを動かすプログラムですが、以下の通りとなっています。

  • 単一のステッピングモータは抽象クラスIStepperMotorを継承するEasyDriverクラスで表す。
  • 全てのステッピングモータは複数のIStepperMotorをまとめてStepperControlクラスで制御する。

 このようにすることで複数のステッピングモータを同時使用することができ、かつEasyDriver以外のモーターコントローラICを使用することが出来ます。

 使い方は各モータにSetRelativeAngle(台形駆動), SetSpeed(加速減速)で期待する動作を設定した後、なるべく頻繁にRun関数を呼び出して実際に動かすことになります。Set○○は動作パラメータを更新するだけでモータは動かしません。Run関数を呼び出すことで実際に動作します。

列挙型

StepMode

Full = 0 1/1 ステップ
Half = 1 1/2 ステップ
Quarter = 2 1/4 ステップ
Eighth = 3 1/8 ステップ

Status

Stop 停止中
Moving 一定速度で回転中
Accelerating 加速 /  減速中

IStepperMotor

 ひとつのステッピングモータを表す仮想関数です。直接このクラスは使用できません。このクラスを継承したEasyDriverクラスを使用してください。

コンストラクタ

プロトタイプ

IStepperMotor(

     const DKS::ITimer *Timer,

     const float &FullStepAngle,

     const uint16_t &PulseWidth

);

戻り値

なし

引数

Timer

Timerクラスへのポインタ

FullStepAngle

1/1ステップの際の角度[rad/step] 

PulseWidth

最小パルス幅TimerクラスでのTick間隔基準

備考

なし

台形駆動を行う

プロトタイプ

virtual void SetRelativeAngle(

     const float &RelativeAngle,

     const float &MaxSpeed,

     const float &Acceleration,

     const float &Deceleration,

     const bool &IsSmoothMode

);

戻り値

なし

引数

RelativeAngle

回転角度 [rad]

MaxSpeed

台形駆動の最大速度 [rad/s]

Acceleration

加速時加速度 [rad/s2]

Deceleration

減速時加速度 [rad/s2]

IsSmoothMode

このページで解説しているSmooth, Rampモードを設定する。

TrueだとSmoothモード

備考

モータが停止時のみ使えます。

一定速度(停止含む)で動いている際に速度を変更します。

プロトタイプ

virtual bool SetSpeed(

     const float &TargetSpeed,

     const float &Acceleration = 0.0f

);

戻り値

コマンドが受け付けられればtrue

引数

TargetSpeed

目標速度 [rad/s]

Acceleration

加速時加速度 [rad/s2]

0.0だと非連続に速度が変わる

備考

モータが加速・減速時は使用できません。

回転方向を反転させる際は一度停止させてください。

実際にモーターを動かす

プロトタイプ

virtual void Run(void);

戻り値

なし

引数

なし

備考

前回のステップパルスを下げる前に次のパルスをあげる指示が来た場合モータを停止させる。

主にRun()関数を呼び出す間隔が長すぎる場合に発生する。

停止

プロトタイプ

virtual void Stop(void);

戻り値

なし

引数

なし

備考

 

回転中か確認

プロトタイプ

bool IsMoving(void)const;

戻り値

Stop状態でなければtrue

引数

なし

備考

 

現在の速度を返す

プロトタイプ

float GetCurrentSpeed(void)const;

戻り値

速度 [rad/s]

引数

なし

備考

加速、減速中は値の更新を行わない

設定されている目標速度を返す

プロトタイプ

float GetTargetSpeed(void)const;

戻り値

目標速度 [rad/s]

引数

なし

備考  

現在の動作状態を返す

プロトタイプ

Status GetCurrentStatus(void)const;

戻り値

Stop, Moving or Accelerating

引数

なし

備考  

EasyDriver

 IStepperMotorクラスを継承したEasyDriver操作用クラスです。

 SetRelativeAngle, SetSpeed関数はMS1, MS2ピンが接続されている場合、最大速度から適切なステップ角を設定します。

コンストラクタ

プロトタイプ

EasyDriver(

     const DKS::ITimer *Timer,

     const DKS::IDigitalOut *DIR,

     const DKS::IDigitalOut *STEP,

     const float &FullStepAngle,

     const DKS::IDigitalOut *MS1,

     const DKS::IDigitalOut *MS2

);

戻り値

なし

引数

Timer

Timerクラスへのポインタ

DIR

STEP

MS1, MS2

各ピンへ接続しているDigitalOutクラス

MS1, MS2を使用しない場合はがNULLにしてください。

FullStepAngle

1ステップの角度 [rad/step]

 

備考

なし

現在のStepModeを返す

プロトタイプ StepMode GetStepMode()const;

 

戻り値

ステップモード (FullStep, HalfStep など)

引数

なし

備考  

StepperControl

 複数のステッピングモータをまとめて操作するクラスです。

台形駆動を行う

プロトタイプ

virtual void SetRelativeAngle(

     const uint8_t &Motor,

     const float &RelativeAngle,

     const float &MaxSpeed,

     const float &Acceleration,

     const float &Deceleration,

     const bool &IsSmoothMode

);

戻り値

なし


引数

Motor

操作対象モータ。

RelativeAngle

回転角度 [rad]

MaxSpeed

台形駆動の最大速度 [rad/s]

Acceleration

加速時加速度 [rad/s2]

Deceleration

減速時加速度 [rad/s2]。0ならばAccelerationと同じ

IsSmoothMode

このページで解説しているSmooth, Rampモードを設定する。

TrueだとSmoothモード

備考

モータが停止時のみ使えます。

コンストラクタ

プロトタイプ

StepperControl(

     IStepperMotor **Motors,

     const uint8_t &NumOfMotors

);

戻り値

なし

引数

Motors

各ステッピングモータへのポインタの配列

NumOfMotors

配列の長さ

備考

なし

一定速度(停止含む)で動いている際に速度を変更します。

プロトタイプ

virtual bool SetSpeed(

     const uint8_t &Motor,

     const float &TargetSpeed,

     const float &Acceleration = 0.0f

);

戻り値

コマンドが受け付けられればtrue


引数

Motor

操作対象モータ

TargetSpeed

目標速度 [rad/s]

Acceleration

加速時加速度 [rad/s2]

0.0だと非連続に速度が変わる

備考

モータが加速・減速時は使用できません。

反転はサポートしていません。反転させる場合は一度停止させてさい。

個別モータへのアクセス

プロトタイプ IStepperMotor* operator[] (const uint8_t &i)const;
戻り値

ステッピングモータへのポインタ

引数

配列内の順番

備考

 

実際にモーターを動かす

プロトタイプ

virtual void Run(void);

戻り値

なし

引数

なし

備考

各モータのRun関数を順次呼び出すことで全てのモータを動かします。

モーターが動いているか確認

プロトタイプ

bool IsMoving(void)const;

bool IsMoving(const uint8_t &Motor)const;

戻り値

個別または全てのモータが停止していなければtrue

引数

確認対象モータ

備考

 

モーターにエラーが発生しているか確認

プロトタイプ

bool IsError(void)const;

戻り値

いずれかのモータにエラーが発生していればtrue

引数

 

備考

 

モーターを直ちに停止させる

プロトタイプ

void Stop(void);

void Stop(const uint8_t &Motor);

戻り値

なし

引数

個別または全てのモータを直ちに停止させる 

備考

 

モータの速度を得る

プロトタイプ

float GetCurrentSpeed(const uint8_t &Motor)const;

戻り値

速度 [rad/s]

引数

対象のモータ

備考