开源改变世界

触发硬限制,电机失去保持力矩并降低 Z 轴。避免的方法? #961

推推 grbl 2年前 (2023-01-23) 105次浏览

关闭
KevinBaileyCrum 打开了这个问题 2020 年 11 月 26 日 · 5 条评论
关闭

触发硬限制,电机失去保持力矩并降低 Z 轴。避免的方法?#961

KevinBaileyCrum 打开了这个问题 2020 年 11 月 26 日 · 5 条评论

注释

触发硬限制,电机失去保持力矩并降低 Z 轴。避免的方法? #961

在 grbl 中,当我启用了硬限制并且它是一个限位开关时,机器进入警报状态。
在发送 \x18 然后发送 $X 所需的时间内,保持扭矩从电机下降。
结果我的 z 轴掉了!

grbl 中是否有一个设置,我可以修改以在警报和重置期间保持保持扭矩?我尝试查看 config.h、limits.c 和 motion_control.c,但找不到我要查找的内容

-注意:我知道这不是一个问题,而是一个问题,但我找不到 grbl 问题论坛的存在,所以我在这里发帖。如果这是不正确的,我很抱歉。

触发硬限制,电机失去保持力矩并降低 Z 轴。避免的方法? #961

1 美元=255 美元?

触发硬限制,电机失去保持力矩并降低 Z 轴。避免的方法? #961

1 美元是 255

触发硬限制,电机失去保持力矩并降低 Z 轴。避免的方法? #961

@terjeio:设置 $1=255 不会在警报条件下保持步进器启用。
@KevinBaileyCrum:是的,您可以在固件*中更改此行为。如果您不熟悉 grbl,一个更简单的方法可能是断开步进器启用引脚(328p Uno 上的 pin8)……这将始终保持步进器启用。

*在 grbl 源中搜索“st_wake_up()”的实现。

触发硬限制,电机失去保持力矩并降低 Z 轴。避免的方法? #961

@doppelhub我会看看st_wake_up() 我在阅读源代码时不确定,因为我当然想阻止步进电机移动,但我不想禁用它们的保持扭矩。我在想这将涉及改变mc_reset()st_go_idle但又想停止电机移动。

关于从 arduino 上断开引脚,限位开关是否仍会工作/发送信号以停止 grbl 中的电机,但不会终止 duino 上的信号?

触发硬限制,电机失去保持力矩并降低 Z 轴。避免的方法? #961

最终更改了 st_go_idle() 方法。它适用于我的实施,即限位开关被击中,电机不会降低其保持扭矩,因此使我的 z 轴保持悬浮在空中。希望这不是太危险的改变并帮助其他人。

// Stepper shutdown
void st_go_idle()
{
  // Disable Stepper Driver Interrupt. Allow Stepper Port Reset Interrupt to finish, if active.
  TIMSK1 &= ~(1<<OCIE1A); // Disable Timer1 interrupt
  TCCR1B = (TCCR1B & ~((1<<CS12) | (1<<CS11))) | (1<<CS10); // Reset clock to no prescaling.
  busy = false;

  // Set stepper driver idle state, disabled or enabled, depending on settings and circumstances.
  /* bool pin_state = false; // Keep enabled. */
  /* if (((settings.stepper_idle_lock_time != 0xff) || sys_rt_exec_alarm || sys.state == STATE_SLEEP) && sys.state != STATE_HOMING) { */
    // Force stepper dwell to lock axes for a defined amount of time to ensure the axes come to a complete
    // stop and not drift from residual inertial forces at the end of the last movement.
    /* delay_ms(settings.stepper_idle_lock_time); */
    /* pin_state = true; // Override. Disable steppers. */
  /* } */
  /* if (bit_istrue(settings.flags,BITFLAG_INVERT_ST_ENABLE)) { pin_state = !pin_state; } // Apply pin invert. */
  /* if (pin_state) { STEPPERS_DISABLE_PORT |= (1<<STEPPERS_DISABLE_BIT); } */
  /* else { STEPPERS_DISABLE_PORT &= ~(1<<STEPPERS_DISABLE_BIT); } */
}
喜欢 (0)