找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 389|回复: 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);*/
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

快速回复 返回顶部 返回列表