开源改变世界

使用 Max6675 在 Sanguino 上冻结(修复) #259

推推 grbl 2年前 (2023-02-05) 196次浏览
关闭
gif3 打开了这个问题 2012 年 10 月 9 日 · 8条评论
关闭

使用 Max6675 在 Sanguino 上冻结(修复)#259

gif3 打开了这个问题 2012 年 10 月 9 日 · 8条评论

评论

使用 Max6675 在 Sanguino 上冻结(修复) #259

嗨,我使用了一些旧版本的 Marlin 并分离了挤出机加热器控制器,它可以工作。
在切换到较新的 Marling 之后,当我也将它用于加热器控制时,我在初始化/启动期间冻结了。

我的机器是定制设计的,类似于钢型材的 Ultimaker。控制器也是定制的,在 20 MHz 下使用 Atmel ATMega644P,对于挤出机的温度,我使用 Max6675(SPI 连接)。
在 Marling 中,我对板 62(Sanguino)使用修改后的配置,并且必须添加

#define MAX_SCK_PIN 7
#define MAX_MISO_PIN 6
#define MAX_MOSI_PIN 5
#define MAX6675_SS 4
}

问题 – 冻结 – 对我来说是通过使用解决的:
delayMicroseconds(1); 而不是在 temperature.cpp 的第 795 行的函数 read_max6675() 中
“确保 100ns 延迟 – 多一点就可以了” (在 延迟(1)之前; 这太长了}

我不知道如何使用 github 来提供/提供补丁,所以请检查这个,并合并“delayMicroseconds(1);” 进入主分支。或者即使您知道是否有某些函数只等待 100ns?

谢谢
动图

使用 Max6675 在 Sanguino 上冻结(修复) #259

完全消除延迟(参见问题#169)。延迟是不需要的。我确定了范围并检查了数据表。这种延迟(在 isr 内)是一种错误的而非无害的实现。我认为它没有被修复的唯一原因是大多数人不使用 max6675。此问题已在 Teacup 固件中修复。

使用 Max6675 在 Sanguino 上冻结(修复) #259
贡献者

100ns 是 2 个周期,延迟 1ms(而 Arduino 实现很可能会延迟 1 到 2 ms)简直是疯了。我插入了两个“nops”,它们不会损害运行时间,但会影响到 100ns。(我没有时间检查数据表,这是一个巨大的改进)

使用 Max6675 在 Sanguino 上冻结(修复) #259

我用我的示波器测量了 610 ns 的时序,没有任何 nop 或
任何类型的代码在 16Mhz 328 上运行
。延迟被添加到一个 isr 中,删除这个延迟解决
了只有 max6675 才会出现的锁定问题。这已经在 TeaCup 中存在了一段
时间。https://github.com/triffid/Teacup_Firmware/issues/22
感谢您将其纳入 Marlin 代码。

我以为我也开始了 TB6560 Marlin 问题?好像忘记了 我正在运行经过修改的 Marlin,对 需要更长时钟脉冲
的东芝步进驱动器进行了细微改动。http://forums.reprap.org/read.php?13,127151,129602#msg-129602 Marlin 立即关闭步进脉冲,这不适 用于 Toshiba 30usec vs A4988 1usec 保持时间。如果您只是将关闭 功能移到稍后的位置,它也可以与东芝步进 驱动器一起使用。此修复来自 Teacup 固件。请参阅http://forums.reprap.org/read.php?146,129472,129577#msg-129577中的范围图

在 2012 年 12 月 17 日星期一凌晨 4:06,daid notifications@github.com写道:

100ns 是 2 个周期,延迟 1ms(而 Arduino 实现
很可能会延迟 1 到 2 ms)简直是疯了。我插入了两个
“nops”,它们不会损害运行时间,但会影响到 100ns。(我
没有时间检查数据表,这是一个巨大的改进)


直接回复此电子邮件或在 GitHub 上查看它 https://github.com/ErikZalm/Marlin/issues/259#issuecomment-11436108。

使用 Max6675 在 Sanguino 上冻结(修复) #259
贡献者

我在某个地方看到了步进器计时的补丁,默认计时也导致我们在 KamerMaker 项目中使用的步进器出现问题。但我不确定补丁去了哪里。

如果在逻辑电源之前施加电机电源,TB6560 驱动器不是会爆炸吗?

使用 Max6675 在 Sanguino 上冻结(修复) #259

是的,这些是逻辑电源应该在
电机电源之前打开的驱动程序。
然而,一年多来我每周使用几次,没有任何问题。就我而言,arduino 已关闭 USB 电源。我的
电机功率是一个很大的电源,我在打印时打开/关闭
它以避免电源顺序问题。

我使用的步进器修复是保留打开单个
步进的逻辑,但将关闭移动到函数的后面。那时,我
关闭了所有的步进器(即使只有一个真正打开)。我还有
一个在关闭前增加延迟的规定。我不记得
我是否需要它。这类似于茶杯实现。如果有帮助,我
可以做一些不同的改变。

在 2012 年 12 月 17 日星期一上午 11:03,daid notifications@github.com写道:

我在某个地方看到了步进器计时的补丁,默认计时也导致我们在 KamerMaker 项目
中使用的步进器出现问题。
但我不确定补丁去了哪里。

如果在逻辑电源之前施加电机电源,TB6560 驱动器不是会爆炸吗?


直接回复此电子邮件或在 GitHub 上查看它 https://github.com/ErikZalm/Marlin/issues/259#issuecomment-11449978。

使用 Max6675 在 Sanguino 上冻结(修复) #259

更改在文件 stepper.cpp 中的函数 ISR(TIMER1_COMPA) 中。我对
Git 不是很熟悉,这里是我对 Marlin_v1 所做的更改。
delayMicroseconds(EXTEND_STEP_PULSE_USEC) 使用:

#define EXTEND_STEP_PULSE_USEC (10) // 修改后的步进器中断为
XYZ 步进器提供步进脉冲周期 = 10 usec 加上此值。否则
步进脉冲对驱动器来说太短了。TB6560AHQ 规格 30usec。

我正在为挤出机使用 Polulo 驱动器,所以我没有修改挤出机
步进脉冲,但我猜挤出机也需要这种改变。

@@ -453,7 +457,6 @@ ISR(TIMER1_COMPA_vect)
if (counter_x > 0) {
WRITE(X_STEP_PIN, HIGH);
counter_x -= current_block->step_event_count;

  •    WRITE(X_STEP_PIN, LOW);
     count_position[X_AXIS]+=count_direction[X_AXIS];
    

    }

@@ -461,7 +464,6 @@ ISR(TIMER1_COMPA_vect)
if (counter_y > 0) {
WRITE(Y_STEP_PIN, HIGH);
counter_y -= current_block->step_event_count;

  •    WRITE(Y_STEP_PIN, LOW);
     count_position[Y_AXIS]+=count_direction[Y_AXIS];
    

    }

@@ -469,7 +471,6 @@ ISR(TIMER1_COMPA_vect)
if (counter_z > 0) {
WRITE(Z_STEP_PIN, HIGH);
counter_z -= current_block->step_event_count;

  •    WRITE(Z_STEP_PIN, LOW);
     count_position[Z_AXIS]+=count_direction[Z_AXIS];
    

    }

@@ -483,6 +484,19 @@ ISR(TIMER1_COMPA_vect)
}
#endif //!ADVANCE
step_events_completed += 1;
+
+

  •  /*
    
  •    Turn off all steps (even if they aren't high).
    
  •    This will lengthen out the step pulse width for slower
    

    步进驱动器。

  •  */
    
  •  #if defined(EXTEND_STEP_PULSE_USEC)
    
  •    delayMicroseconds(EXTEND_STEP_PULSE_USEC);
    
  •  #endif
    
  •  WRITE(X_STEP_PIN, LOW);
    
  •  WRITE(Y_STEP_PIN, LOW);
    
  •  WRITE(Z_STEP_PIN, LOW);
    
    • 如果(step_events_completed >= current_block->step_event_count)中断;
      }
      // 计算新定时器值
      @@ -550,7 +564,7 @@ ISR(TIMER1_COMPA_vect)
      plan_discard_current_block();
      }
      }
      -}
      +} // 中断服务程序(TIMER1_COMPA_vect)。

2012 年 12 月 17 日星期一上午 11:44,Jerry Trantow JTrantow@ieee.org写道:

是的,这些是逻辑电源应该在
电机电源之前打开的驱动程序。
然而,一年多来我每周使用几次,没有任何问题。就我而言,arduino 已
关闭 USB 电源。我的电机功率是一个很大的电源,我在
打印时打开/关闭它以避免电源顺序问题。

我使用的步进器修复是保留打开单个
步进的逻辑,但将关闭移动到函数的后面。那时,我
关闭了所有的步进器(即使只有一个真正打开)。我还有
一个在关闭前增加延迟的规定。我不记得
我是否需要它。这类似于茶杯实现。如果有帮助,我
可以做一些不同的改变。

在 2012 年 12 月 17 日星期一上午 11:03,daid notifications@github.com写道:

我在某个地方看到了步进器计时的补丁,默认计时也导致我们在 KamerMaker 项目
中使用的步进器出现问题。
但我不确定补丁去了哪里。

如果在逻辑电源之前施加电机电源,TB6560 驱动器不是会爆炸吗?


直接回复此电子邮件或在 GitHub 上查看它 https://github.com/ErikZalm/Marlin/issues/259#issuecomment-11449978。

这个被引用了2014 年 2 月 10 日
使用 Max6675 在 Sanguino 上冻结(修复) #259
贡献者

这个是大约一年前创建的,有很多变化,请下载最新的 marlin 副本,看看问题是否仍然存在。您还可以使用最新的 arduino IDE 来刷新 marlin 固件。如果您的板文件等只能在旧的 ide 下工作,请先升级它们,以便它们在最新的 IDE 下工作。

如果您为不在https://github.com/ErikZalm/Marlin/tree/Marlin_v1/ArduinoAddons中的硬件创建板文件,请 fork marlin 并添加文件,然后创建一个拉取请求,以便我们可以获得硬件支持的。这也将使人们了解人们正在使用什么硬件。