开源改变世界!!

在 RP2040 Pico 板上归位 #107

推推 grbl 2年前 (2023-02-08) 176次浏览
关闭
jafgraphics 打开了这个问题 2022 年 1 月 12 日 · 10 条评论
关闭

在 RP2040 Pico 板上归位#19

jafgraphics 打开了这个问题 2022 年 1 月 12 日 · 10 条评论

评论

在 RP2040 Pico 板上归位 #107
贡献者

你好,我希望你能对此有所了解。
我在 Pico 板上遇到问题。归位序列发出警报 8。
归位过程的所有部分似乎都在工作,但并不是在一个完整的归位周期中一起工作。似乎有什么东西在触及极限和能够拉下开关之间设置了警报。
我认为这是某种配置问题,请参阅下面的驱动程序图。

以下是事件的顺序。
第一个序列是在归位开始时未按下限位开关

  1. 轴将以搜索速率运行到限位开关上。
  2. 观察到去抖延迟
  3. 轴方向反转。
  4. 使轴脉冲约 20 毫秒,并发出警报 8。

第二个序列在归位开始时按下限制

  1. 轴以寻道速率离开限位开关,距离在 Pull Off distance 中设置
  2. 轴以进给速率运行到限位开关上。
  3. 观察到去抖延迟
  4. 轴方向反转。
  5. 使轴脉冲约 20 毫秒,并发出警报 8。

非常感谢,
西蒙

/*
my_machine_map.h – RP2040 ARM 处理器的驱动程序代码
*/

#if TRINAMIC_ENABLE
#error 不支持 Trinamic 插件!
#万一

#if N_ABC_MOTORS > 0
#error “不支持轴配置!”
#万一

//定义步进脉冲输出引脚。
#define STEP_PINS_BASE 6 // PIO 使用的 N_AXIS 连续引脚数

//定义步进方向输出引脚。
#define DIRECTION_PORT GPIO_OUTPUT
#define X_DIRECTION_PIN 10
#define Y_DIRECTION_PIN 11
#define Z_DIRECTION_PIN 12
#define DIRECTION_OUTMODE GPIO_MAP

// 定义步进驱动器启用/禁用输出引脚。
#define STEPPERS_ENABLE_PORT GPIO_OUTPUT
#define STEPPERS_ENABLE_PIN 14
#define STEPPERS_ENABLE_MASK STEPPERS_ENABLE_BIT

//定义归位/硬限位开关输入引脚。当前配置为共享 X 和 Z 限制引脚。
#define limit_port gpio_in
#define x_limit_pin 2
#define y_limit_pin 3
#define z_limit_pin 4
#define x_limit_bit(1 << x_limit_pin
)|Z_LIMIT_BIT) #define LIMIT_INMODE GPIO_MAP

//定义联动轴或A轴步进脉冲和步进方向输出引脚。
//#if N_ABC_MOTORS > 0
//#define M3_AVAILABLE
//#define M3_STEP_PIN 3
//#define M3_DIRECTION_PIN (Z_DIRECTION_PIN + 1)
//#define M3_LIMIT_PIN (Z_LIMIT_PIN + 1)
//#endif

//定义主轴使能和主轴方向输出引脚。
//#define SPINDLE_ENABLE_PORT GPIO_OUTPUT
//#define SPINDLE_ENABLE_PIN 16
//#define SPINDLE_DIRECTION_PORT GPIO_OUTPUT
//#define SPINDLE_DIRECTION_PIN 17

//定义主轴PWM输出引脚。
#define SPINDLE_PWM_PORT GPIO_OUTPUT
#define SPINDLE_PWM_PIN 22
#define SPINDLE_PWM_BIT (1<<SPINDLE_PWM_PIN)

//定义洪水和喷雾冷却剂启用输出引脚。
//#define COOLANT_FLOOD_PORT GPIO_OUTPUT
//#define COOLANT_FLOOD_PIN 26
//#define COOLANT_MIST_PORT GPIO_OUTPUT
//#define COOLANT_MIST_PIN 27
//#define COOLANT_OUTMODE GPIO_MAP

// 定义用户控制(循环启动、复位、进给保持)输入引脚。
#define RESET_PIN 18
#define FEED_HOLD_PIN 19
#define CYCLE_START_PIN 20
#if SAFETY_DOOR_ENABLE
#define SAFETY_DOOR_PIN 21
#endif
#define CONTROL_INMODE GPIO_MAP

//定义探头开关输入引脚。
#define PROBE_PIN 0

//#if KEYPAD_ENABLE
//#define KEYPAD_STROBE_PIN 1
//#endif

在 RP2040 Pico 板上归位 #107
贡献者

是否可以查看报警触发时实时报告中限位引脚显示的状态?
引脚状态在Pn:元素中,有轴字母吗?

<空闲|MPos:-102.550,-26.450,0.000|Bf:35,1024|FS:0,0| Pn:P >

在 RP2040 Pico 板上归位 #107
贡献者作者

Pn: 始终与归零的轴相同。
所以对于 Z 轴归位结果是 Pn:Z,对于 X 轴是 Pn:X 等
我还检查了示波器并且所有控制线都按预期运行。在我看来,在拉断部分仍然启用了一些定时器/中断?

在 RP2040 Pico 板上归位 #107
贡献者

除非相应的限位销已接合,否则报告中不应显示任何轴字母。

在我看来,在拉断部分仍然启用了一些定时器/中断?

在归位期间轮询限制引脚状态,并在拉出后检查。如果仍有任何报告为占用警报 8。所以不涉及中断/定时器。

https://github.com/grblHAL/core/blob/f81fcc49f6e515e8723dd42b18dc4859cd809e2d/limits.c#L387-L389

每个序列的开始都有类似的检查,如果限位开关被触发,则尝试拉出,如果失败则发出警报 8。这仅适用于自动平方轴。

https://github.com/grblHAL/core/blob/f81fcc49f6e515e8723dd42b18dc4859cd809e2d/limits.c#L202-L204

在 RP2040 Pico 板上归位 #107
贡献者作者

我假设只有 388-389 行用于拉断失败,因为另一个检查是针对我没有启用的平方模式?
如果是这种情况,那么只有在设置了 EXEC_CYCLE_COMPLETE 的情况下才应该进行检查,这是否意味着完整的 pull off 例程已经完成?完整的起步距离尚未完成,因此发出警报也就不足为奇了。
查看代码 EXEC_SAFETY_DOOR | EXEC_RESET 输入可能是浮动的,因为我没有使用这些输入,控制器工作正常所以假设这些输入没有影响系统,我明天会检查是否是这种情况。

在 RP2040 Pico 板上归位 #107
贡献者

您是否启用了硬限制?如果是这样,请尝试禁用 – 可能是限制中断在归位期间未按应有的方式禁用。仅供参考,我几天前更改了启用/禁用限制中断的代码,您使用的是最新版本吗?

在 RP2040 Pico 板上归位 #107
贡献者作者

我终于找到了问题所在,当使用 RP2040 驱动程序时,硬限制始终处于启用状态,我已如下更改 limitsEnable 函数来解决。

static void limitsEnable (bool on, bool homing)
{
    uint32_t i = limit_inputs.n_pins;

    on = on && !homing;

    do {
        i--;
        if(on)
        {
            pinEnableIRQ(&limit_inputs.pins.inputs[i], limit_inputs.pins.inputs[i].irq_mode);//enable
        }
        else
        {
            pinEnableIRQ(&limit_inputs.pins.inputs[i], IRQ_Mode_None);//disable
        }
    } while(i);

#if TRINAMIC_ENABLE
    trinamic_homing(homing);
#endif
}
在 RP2040 Pico 板上归位 #107 terjeio 从 grblHAL/core 转移了这个问题 2022 年 1 月 16 日
在 RP2040 Pico 板上归位 #107
贡献者

谢谢,现在已修复 – 加上另一个在更改设置时影响硬限制的错误。

在 RP2040 Pico 板上归位 #107
贡献者作者

不确定您所做的更改是否真的能解决问题。 据我所知,在归位期间禁用硬限制中断的唯一方法是,当功能输入“on”时
“homing”是否为真将是“false”或“settings.limits.flags.hard_enabled”所以​​如果“
settings.limits.flags.hard_enabled”=true 和 “homing”=”true” 硬限制中断仍将启用,因为从未考虑归位状态。

on = on && settings.limits.flags.hard_enabled; 需要 on=on && !homing;

在 RP2040 Pico 板上归位 #107
贡献者

如果限位开关和原位开关是分开的,该homing参数用于切换到第二组输入,或者用于从步进驱动器输出(例如,当使用 Trinamic 无传感器归位时)。该on参数用于中断启用/禁用。
归位时,on参数在此处设置为 false,并在归位完成后重置为配置的硬限制状态。

在 RP2040 Pico 板上归位 #107
贡献者作者

好的,现在说得通了,阅读源代码时不是很明显,但现在已经在 HAL 结构文档中看到了。谢谢。