单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:454|回复:1
打印上一主题下一主题

Arduino步进电机圆弧插补实现程序

[复制链接]
跳转到指定楼层
楼主
ID:1109645发表于 2024-1-19 08:53|只看该作者回帖奖励
#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);*/
}

评分

黑币 +50
收起理由
+ 50
共享资料的黑币奖励!

查看全部评分

沙发
ID:830831发表于 2024-1-19 17:49|只看该作者
楼主,差补表现在哪?

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网