arduino 控制三个电机同时运动同时停止 三轴联动


void runTo(long x,long y,long z,int speed){ //xyz为脉冲数,speed单位是mm/s
  if(x > 0)
    digitalWrite(X_DIR_PIN,HIGH);
 if(x <= 0)
    digitalWrite(X_DIR_PIN,LOW);
  if(y > 0)
    digitalWrite(Y_DIR_PIN,HIGH);
 if(y <= 0)
    digitalWrite(Y_DIR_PIN,LOW);
  if(z > 0)
    digitalWrite(Z_DIR_PIN,HIGH);
 if(z <= 0)
    digitalWrite(Z_DIR_PIN,LOW);
  long a = abs(x);
  long b = abs(y);
  long c = abs(z);
  long MAX = max(max(a,b),c);//MAX为轴的最大脉冲数,既最远距离的脉冲数。
  unsigned long time_t = (1000000/(speed*100))*MAX;//微妙,如果写成1000000*MAX/(speed*100)就数据越界了
     unsigned long X_interval = time_t/a;
     unsigned long X_inter = X_interval;
     unsigned long Y_interval = time_t/b;
     unsigned long Y_inter = Y_interval;
     unsigned long Z_interval = time_t/c;
     unsigned long Z_inter = Z_interval;
  unsigned long time_last = micros();

  while(a >0 || b>0 || c>0){
     unsigned long time_now =  micros();
    if ( ((time_now - time_last) > X_interval) && (a > 0))
    {
      digitalWrite(X_STEP_PIN,HIGH);
      digitalWrite(X_STEP_PIN,LOW);
      X_interval += X_inter;
      a--;
      }
     if  (((time_now  - time_last) > Y_interval) && (b > 0))
    {
      digitalWrite(Y_STEP_PIN,HIGH);
      digitalWrite(Y_STEP_PIN,LOW);
      Y_interval += Y_inter;
      b--;
      }
          if ( ((time_now  - time_last) > Z_interval) && (c > 0))
    {
      digitalWrite(Z_STEP_PIN,HIGH);
      digitalWrite(Z_STEP_PIN,LOW);
      Z_interval += Z_inter;
      c--;
      }  
 
    
  }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM