Grbl limit.c代码分析

// 回零过程.

void limits_go_home(uint8_t cycle_mask)

{

  if (sys.abort) { return; } // 是否系统中止.

  // 初始化规划直线运动的数据寄存器,为回零运动准备,关闭主轴和冷却..

  plan_line_data_t plan_data;

  plan_line_data_t *pl_data = &plan_data;

  memset(pl_data,0,sizeof(plan_line_data_t));

//设置规划器的条件,表明是系统运动,进给倍率无效

  pl_data->condition = (PL_COND_FLAG_SYSTEM_MOTION|PL_COND_FLAG_NO_FEED_OVERRIDE);

  #ifdef USE_LINE_NUMBERS //是否需要设置本指令行号

    pl_data->line_number = HOMING_CYCLE_LINE_NUMBER;

  #endif.

  uint8_t n_cycle = (2*N_HOMING_LOCATE_CYCLE+1);//设置找零次数

  uint8_t step_pin[N_AXIS];

  #ifdef ENABLE_DUAL_AXIS //如果定义了双轴

    uint8_t step_pin_dual;

    uint8_t dual_axis_async_check;

    int32_t dual_trigger_position;

#if (DUAL_AXIS_SELECT == X_AXIS)//如果X轴是双轴,计算回零运动失败的距离阈值

                                     //如果两个限位在给定的失败距离内都触发表正常,否则失败,

      float fail_distance = (-DUAL_AXIS_HOMING_FAIL_AXIS_LENGTH_PERCENT/100.0)*settings.max_travel[Y_AXIS];

    #else//如果Y轴是双轴,计算回零运动失败的距离阈值

      float fail_distance = (-DUAL_AXIS_HOMING_FAIL_AXIS_LENGTH_PERCENT/100.0)*settings.max_travel[X_AXIS];

    #endif //防止回零失败距离过小或过大

    fail_distance = min(fail_distance, DUAL_AXIS_HOMING_FAIL_DISTANCE_MAX);

    fail_distance = max(fail_distance, DUAL_AXIS_HOMING_FAIL_DISTANCE_MIN);

    int32_t dual_fail_distance = trunc(fail_distance*settings.steps_per_mm[DUAL_AXIS_SELECT]);//把距离变成步进数目

  #endif

  float target[N_AXIS];

  float max_travel = 0.0;

  uint8_t idx;

  for (idx=0; idx<N_AXIS; idx++) {

    // 获取对应轴步进端口的掩码

    step_pin[idx] = get_step_pin_mask(idx);

    #ifdef COREXY//如果是COREXY结构,设置相关掩码

      if ((idx==A_MOTOR)||(idx==B_MOTOR)) { step_pin[idx] = (get_step_pin_mask(X_AXIS)|get_step_pin_mask(Y_AXIS)); }

    #endif

    if (bit_istrue(cycle_mask,bit(idx))) {//判断哪个轴回零,并计算回零过程可运动的最大距离

      max_travel = max(max_travel,(-HOMING_AXIS_SEARCH_SCALAR)*settings.max_travel[idx]);

    }

  }

  #ifdef ENABLE_DUAL_AXIS //定义双轴的步进输出端口

    step_pin_dual = (1<<DUAL_STEP_BIT);

  #endif

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值