(2014.8.6 作成)
このサイトでダウンロードできるプログラムのサンプルコードです。基本的な環境構築と共通ライブラリはそれぞれのページも参照してください。
基本的な使用法はピン設定などを決めてクラスを作成した後、SetRelativeAngle(台形駆動)、SetSpeed(速度変更)をセットし、後はただひたすらRun関数を呼び出し続けるだけです。ただSTM32の例と異なり10[us]単位で呼び出すタイマーは作れないので、loop()関数内で処理を行っています。注意点としてはloop内でwait関数を使用したり、思い処理を行うとrun関数が呼ばれず、動作が予想外のものになります。
最高速度20[rad/s]で3周往復します。
#include <DKS_GPIO_Arduino.h> #include <DKS_Timer_Arduino.h> #include <DKS_EasyDriver.h> DKS::Timer *tim; DKS::Stepper::IStepperMotor **motors; DKS::Stepper::StepperControl *sc; float angle = M_PI*2*3; DKS::DigitalOut pinDir(2); DKS::DigitalOut pinStp(3); DKS::DigitalOut pinMS1(4); DKS::DigitalOut pinMS2(5); void setup() { tim=new DKS::Timer(1e-6); tim->start(); motors=new DKS::Stepper::IStepperMotor*[1]; motors[0]=new DKS::Stepper::EasyDriver(tim, &pinDir, &pinStp, 1.8f*M_PI/180.0f, &pinMS1, &pinMS2); sc = new DKS::Stepper::StepperControl(motors, 1); sc->SetRelativeAngle(0, angle, maxVelocity, acceleration, acceleration, false); Serial.print("Setup done\r\n"); delay(1); } void loop() { sc->Run(); if (!sc->IsMoving(0)) //動作が止まれば反対方向に動かす { angle *= -1.0f; sc->SetRelativeAngle(0, angle, maxVelocity, acceleration, acceleration, false); } }
停止 → 5[rad/s] → 15[rad/s] → と動作します。
#include <DKS_GPIO_Arduino.h> #include <DKS_Timer_Arduino.h> #include <DKS_EasyDriver.h> const float speedList[] = { 0,5,15,0}; uint8_t stage=0; const uint8_t n=sizeof(speedList)/sizeof(float); const float acceleration = 10.0f; DKS::Timer *tim; DKS::Stepper::IStepperMotor **motors; DKS::Stepper::StepperControl *sc; DKS::DigitalOut pinDir(2); DKS::DigitalOut pinStp(3); DKS::DigitalOut pinMS1(4); DKS::DigitalOut pinMS2(5); void setup() { tim=new DKS::Timer(1e-6); tim->start(); motors=new DKS::Stepper::IStepperMotor*[1]; motors[0]=new DKS::Stepper::EasyDriver(tim, &pinDir, &pinStp, 1.8f*M_PI/180.0f, &pinMS1, &pinMS2); sc = new DKS::Stepper::StepperControl(motors, 1); sc->SetSpeed(0, speedList[0], acceleration); } void loop() { if ( stage != (uint8_t)(tim->readCounter()/5000000)) { stage++; if (stage>=n) while (true); sc->SetSpeed(0, speedList[stage], acceleration); } sc->Run(); }