(2014.8.4 作成)
このサイトで公開しているステッピングモータを動かすプログラムですが、以下の通りとなっています。
このようにすることで複数のステッピングモータを同時使用することができ、かつEasyDriver以外のモーターコントローラICを使用することが出来ます。
使い方は各モータにSetRelativeAngle(台形駆動), SetSpeed(加速減速)で期待する動作を設定した後、なるべく頻繁にRun関数を呼び出して実際に動かすことになります。Set○○は動作パラメータを更新するだけでモータは動かしません。Run関数を呼び出すことで実際に動作します。
Full = 0 | 1/1 ステップ |
Half = 1 | 1/2 ステップ |
Quarter = 2 | 1/4 ステップ |
Eighth = 3 | 1/8 ステップ |
Stop | 停止中 |
Moving | 一定速度で回転中 |
Accelerating | 加速 / 減速中 |
ひとつのステッピングモータを表す仮想関数です。直接このクラスは使用できません。このクラスを継承した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 |
引数 |
なし |
備考 |
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 など) |
引数 |
なし |
備考 |
複数のステッピングモータをまとめて操作するクラスです。
台形駆動を行う |
||
プロトタイプ |
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] |
引数 |
対象のモータ |
備考 |
|