开源改变世界

COREXY 双向移动失败 #462

推推 grbl 3年前 (2023-02-05) 246次浏览
关闭
JTrantow 打开了这个问题 2013 年 5 月 3 日 · 3条评论
关闭

COREXY 双向移动失败#462

JTrantow 打开了这个问题 2013 年 5 月 3 日 · 3条评论

评论

COREXY 双向移动失败 #462

COREXY 对 stepper.cpp 行 559-582 的更新是对一个电机的 STEP_PIN 发出两次脉冲,而不是对每个电机发出脉冲。症状是 COREXY 或 Hbot 将在 X 或 Y 方向上正确移动,但如果您尝试一次移动两个方向,它就会移动不正确。从 X0, Y0
G1 X10 ; 作品
G1 Y10 ;作品
G1 X20 Y20 ;没有正确移动,只有一个电机步进。

COREXY 双向移动失败 #462
作者

我的假设是我们总是步进两个电机。
这是我建议的更改。

现有代码真的适用于任何人吗?似乎两次脉冲一个电机是一个错误,除了简单的 1D 移动之外,它会导致任何问题。

  #ifdef COREXY
    counter_x += current_block->steps_x;        
    counter_y += current_block->steps_y;

    WRITE(X_STEP_PIN, !INVERT_X_STEP_PIN);  // We always step both x and y motors.
    WRITE(Y_STEP_PIN, !INVERT_Y_STEP_PIN);

    if ((counter_x > 0)&&!(counter_y>0)){  //X step only
      counter_x -= current_block->step_event_count; 
      count_position[X_AXIS]+=count_direction[X_AXIS];         
    }

    if (!(counter_x > 0)&&(counter_y>0)){  //Y step only
      counter_y -= current_block->step_event_count; 
      count_position[Y_AXIS]+=count_direction[Y_AXIS];
    }        

    if ((counter_x > 0)&&(counter_y>0)){  //step in both axes
      if (((out_bits & (1<<X_AXIS)) == 0)^((out_bits & (1<<Y_AXIS)) == 0)){  //X and Y in different directions
        counter_x -= current_block->step_event_count;             
        step_wait();
        count_position[X_AXIS]+=count_direction[X_AXIS];
        count_position[Y_AXIS]+=count_direction[Y_AXIS];
        counter_y -= current_block->step_event_count;
      }
      else{  //X and Y in same direction
        counter_x -= current_block->step_event_count;             
        step_wait();
        count_position[X_AXIS]+=count_direction[X_AXIS];
        count_position[Y_AXIS]+=count_direction[Y_AXIS];
        counter_y -= current_block->step_event_count;    
      }
    }
    WRITE(X_STEP_PIN, INVERT_X_STEP_PIN);  // We always step both x and y motors.
    WRITE(Y_STEP_PIN, INVERT_Y_STEP_PIN);
  #endif //corexy
COREXY 双向移动失败 #462
作者

我只是查看了示波器上的信号,意识到我的代码是错误的。当在两个维度上移动时,如果您握住一个电机并使另一个电机脉冲两次,COREXY 可以 45 度角移动。
我的 hbot 仍然无法在二维中正确移动,但这不是问题所在。