#include <AccelStepper.h>
#include <MultiStepper.h>
#define STEPPER1_DIR_PIN 2
#define STEPPER1_STEP_PIN 3
#define STEPPER2_DIR_PIN 8
#define STEPPER2_STEP_PIN 9
#define Ena_PIN 10 //使能位為引腳10。(低電平電機禁止運動,高電平電機有效)
AccelStepper stepper1(AccelStepper::DRIVER, STEPPER1_STEP_PIN, STEPPER1_DIR_PIN); // 配置電機1 的脈沖引腳 方向引腳
AccelStepper stepper2(AccelStepper::DRIVER, STEPPER2_STEP_PIN, STEPPER2_DIR_PIN); // 配置電機2 的脈沖引腳 方向引腳
#define a 400 //電機旋轉一圈的脈沖數
long positions[2]; //2個電機坐標位置
/*庫函數說明
* setMaxSpeed ----------設置步進電機最大運行速度
* setAcceleration ------設置步進電機加速度
* setSpeed--------------設置步進電機運行速度
* targetPosition--------獲取步進電機運行目標位置
* currentPosition ------獲取步進電機運行當前位置
* setCurrentPosition----復位步進電機初始位置
* move------------------設置步進電機運動的相對目標位置
* moveTo----------------設置步進電機運動的絕對目標位置
* run-------------------步進電機運行(先加速后減速模式)
* runSpeed--------------步進電機運行(勻速模式)
* runToNewPosition------電機運行到用戶指定位置值,目標位置為絕對位置。此函數將“block”程序運行。即電機沒有到達目標位置前,Arduino將不會繼續執行后續程序內容。這一點很像Arduino官方Stepper庫中的step函數。
*/
void setup()
{
//
Serial.begin(9600);
//
pinMode(Ena_PIN, OUTPUT);
digitalWrite(Ena_PIN, 1);
//
stepper1.setMaxSpeed(a*5); //設置1#電機最大速度
stepper1.setSpeed(a*3.0); //設置1#電機速度
stepper1.setAcceleration(a*4); //設置1#電機加速度
//stepper2.setMaxSpeed(CIRCLE_Puls*1.5);
//stepper2.setSpeed(CIRCLE_Puls*1.0);
// stepper2.setAcceleration(CIRCLE_Puls/4);
delay(1000);
}
void loop()
{
/*================1、絕對位置運動1---向前轉3圈=============================*/
//設置電機的目標位置
positions[0] = a*100;
//positions[1] = CIRCLE_Puls*3;
stepper1.runToNewPosition(positions[0]);
//串口反饋1#電機當前的位置
Serial.print("1# Motor Current Position is: ");
Serial.println(stepper1.currentPosition());
delay(2000);
/*================2、絕對位置運動2---到零位=============================*/
/*
//設置電機的目標位置
positions[0] = CIRCLE_Puls*0;
//positions[1] = CIRCLE_Puls*0;
stepper1.runToNewPosition(positions[0]);
//串口反饋1#電機當前的位置
Serial.print("1# Motor Current Position is: ");
Serial.println(stepper1.currentPosition())*
delay(2000);*/
} |