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