Arduino的控制(二):Arduino控制步进电机(梯形速度算法)

Arduino的控制(二):Arduino控制步进电机(梯形速度算法)#include<math.h>#definePI3.1415926535897932384626433832795//轴2的驱动程序#definePUL2_PIN8#defineDIR2_PIN9voidsetup(){pinMode(PUL2_PIN,OUTPUT);pinMode(DIR2_PIN,OUTPUT);}voidloop(){//joint#2digitalWri..

Arduino的控制(二):Arduino控制步进电机(梯形速度算法)"

  //电机的驱动程序
  #define MOTOR_PIN 7
  #define DIR1_PIN 8
  float i;
  const double dl1 = 360.0/200.0/32.0/5.18;//每个脉冲转过的角度值,5.18为当前步进电机的减速比

  void setup()
  { 
   
    Serial.begin(9600);
    pinMode(MOTOR_PIN, OUTPUT);
    pinMode(DIR1_PIN, OUTPUT);
  }
  void loop()
  { 
   
  if(Serial.available()>0){ 
   
  i = Serial.parseFloat();//获取串口输入的值,通过串口获取步进电机的转动角度值
  delay(2000);
  // Motor #1
  //参数根据自身情况调
  digitalWrite(DIR1_PIN, LOW);//LOW时为步进电机的正方向
  int delValue = 4000;
  int incValue = 7;
  int accRate = 530; //加速的值
  int totSteps = i/0.01085907;//总步数,根据串口数据设定
  //利用每个脉冲之间的间隔实现运动的快慢
  for (int i=0; i < totSteps; i++)
  { 
   
    if (totSteps > (2*accRate + 1))//#1
    { 
   
      if (i < accRate)
      { 
   
      //加速 
      delValue = delValue - incValue;//4000-7 = 3993
      } 
      else if (i > (totSteps - accRate))
     { 
   
      //减速
        delValue = delValue + incValue;
      }
    } 
     else//#1
     { 
   
      //无适当的加速度/减速空间
      if (i < ((totSteps - (totSteps % 2))/2))
      { 
   
        //加速
        delValue = delValue - incValue;
      } 
      else if (i > ((totSteps + (totSteps % 2))/2))
      { 
   
        //减速
        delValue = delValue + incValue;
      }
    }
    digitalWrite(MOTOR_PIN, HIGH);
    delayMicroseconds(delValue);//延迟delValue = 3997(单位:微秒)。一秒等于1000 000微秒。
    digitalWrite(MOTOR_PIN, LOW);
    delayMicroseconds(delValue);
  }
  }
  }

今天的文章Arduino的控制(二):Arduino控制步进电机(梯形速度算法)分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/32081.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注