Contact me: hankecnc@gmail.com

功能请求: 双挤出机支架的工具头距离定义 #146

推推 grbl 3年前 (2023-01-25) 412次浏览

 关闭

功能请求:双挤出机支架的工具头距离定义#146

斯托恩 打开此问题 on Apr 17, 2012 ·10条评论

评论

功能请求: 双挤出机支架的工具头距离定义 #146
贡献者

使用双挤出机时,通过“T”gcode(T0、T1、…)选择激活的工具头/热端。

由于大多数机器将有多个工具头/热端彼此相邻排列,因此它们之间会有一段距离(最有可能在X方向)。

这里我的想法:

==>“Configuration. h”中应有一个选项,允许定义刀头相对于第一个(标准)刀头的距离。

==>使用“T”地理代码更改刀头时,应选择适当的距离,应定位刀头距离(以便新选择的刀头与“T”地理代码之前的旧刀头精确位于相同位置),并且所有新移动应使用新距离设置作为偏移。

迈克

功能请求: 双挤出机支架的工具头距离定义 #146
贡献者

我没有双头机器。这通常是怎么做的?切片软件当前是否正在处理移位?

功能请求: 双挤出机支架的工具头距离定义 #146
贡献者作者

目前,切片软件内部几乎不支持多挤出机。

ReplicatorG-Dualstrusion-分支在启动代码中发送特殊的GCode以设置不同的坐标系,并且无论何时完成工具头变更,它也会变更此特定工具头的坐标系(发送多个GCode以变更工具头)。

Slic3r仅发送刀头更换命令(T0、T1 …)希望机器内部一切正常

在我看来,工具头距离是一个配置要做的机器/固件(所有其他机器相关的设置,如长度的x,y,z长度,步进率,…是在那里完成的,为什么不固定距离的工具头?)。
这也将确保相同的gcode文件可以用在具有不同刀架距离的不同机器上。

我为此创建了一个实验性的补丁,我现在正在测试:

在“Configuration.h”中,我添加了以下代码行(我使用了很多定义,以使二进制文件在不使用该特性的情况下不会增长):

// Distance(s) between the nozzles to correct them automatically at tool head change
#define E0E1_X_DISTANCE  20.0
#define E0E1_Y_DISTANCE   0.0

//#define E0E2_X_DISTANCE   0.0
//#define E0E2_Y_DISTANCE   0.0

在“马林”中,我将“add_toolhead”数组添加到变量部分(就像“add_homeing”一样):

float add_toolhead[3]={0,0,0};

向“process_commands()”函数添加每个轴的偏移量(再次类似于“add_homeing”)

      if(code_seen(axis_codes[X_AXIS])) 
      {
        if(code_value_long() != 0) {
          current_position[X_AXIS]=code_value()+add_homeing[X_AXIS]+add_toolhead[X_AXIS];
        }
      }

      if(code_seen(axis_codes[Y_AXIS])) {
        if(code_value_long() != 0) {
          current_position[Y_AXIS]=code_value()+add_homeing[Y_AXIS]+add_toolhead[Y_AXIS];
        }
      }

      if(code_seen(axis_codes[Z_AXIS])) {
        if(code_value_long() != 0) {
          current_position[Z_AXIS]=code_value()+add_homeing[Z_AXIS]+add_toolhead[Z_AXIS];
        }
      }

然后在“T”gcode处理程序内的gcode解析器中,将相应的工具头距离应用于变量:

  else if(code_seen('T')) 
  {
    tmp_extruder = code_value();
    if(tmp_extruder >= EXTRUDERS) {
      SERIAL_ECHO_START;
      SERIAL_ECHO("T");
      SERIAL_ECHO(tmp_extruder);
      SERIAL_ECHOLN(MSG_INVALID_EXTRUDER);
    }
    else {
      active_extruder = tmp_extruder;

//MULTIPLE TOOLHEAD DISTANCE ADD ON
      st_synchronize();

      //remove old toolhead offset from current position
      current_position[X_AXIS] -= add_toolhead[X_AXIS];
      current_position[Y_AXIS] -= add_toolhead[Y_AXIS];

      //reset current offset
      add_toolhead[X_AXIS] = 0;
      add_toolhead[Y_AXIS] = 0;

      //setup specific toolhead offsets if defined
      if( 1==active_extruder )
      {
        #ifdef E0E1_X_DISTANCE
          add_toolhead[X_AXIS]=E0E1_X_DISTANCE;
        #endif
        #ifdef E0E1_Y_DISTANCE
          add_toolhead[Y_AXIS]=E0E1_Y_DISTANCE;
        #endif
      }
      else
      if( 2==active_extruder )
      {
        #ifdef E0E2_X_DISTANCE
          add_toolhead[X_AXIS]=E0E2_X_DISTANCE;
        #endif
        #ifdef E0E2_Y_DISTANCE
          add_toolhead[Y_AXIS]=E0E2_Y_DISTANCE;
        #endif
      }

      //add new toolhead offset to current position
      current_position[X_AXIS] += add_toolhead[X_AXIS];
      current_position[Y_AXIS] += add_toolhead[Y_AXIS];
      //reset the extruder position
//DO NOT DO THIS!      current_position[E_AXIS] = 0;

      //move to new position...
      plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
//MULTIPLE TOOLHEAD DISTANCE ADD ON

      SERIAL_ECHO_START;
      SERIAL_ECHO(MSG_ACTIVE_EXTRUDER);
      SERIAL_PROTOCOLLN((int)active_extruder);
    }
  }

现在我不确定是否需要在G92内部添加刀头距离。我需要确认一下。
顺便说一句:当前马林代码中存在一个错误,如下所示:

    case 92: // G92
      if(!code_seen(axis_codes[E_AXIS]))
        st_synchronize();
      for(int8_t i=0; i < NUM_AXIS; i++) {
        if(code_seen(axis_codes[i])) { 
//==> BUG, REMOVE THIS LINE <==           current_position[i] = code_value()+add_homeing[i];  
           if(i == E_AXIS) {
             current_position[i] = code_value();  
             plan_set_e_position(current_position[E_AXIS]);
           }
           else {
             current_position[i] = code_value()+add_homeing[i]+add_toolhead[i];  
             plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
           }
        }
      }
      break;

我认为像这样的事情是一个简单而干净的解决方案。

功能请求: 双挤出机支架的工具头距离定义 #146

我同意
工具(打印头)偏移应在固件中处理!!!!
我还致力于建设双头机与专用的支持材料的头。
但假设你想要四个头像。
T0为白色ABS
T1为支撑材料
T2为蓝色ABS
T3为红色ABS
如果零件从T0开始,则偏移都可以以此为基础。但是如果你想从T3开始呢?应该能正常工作!!!
所以只是一些思考的食物。

功能请求: 双挤出机支架的工具头距离定义 #146
贡献者

我现在有一个双头的终极制造者。固件中的X/Y偏移会很有帮助。但我更希望看到每个挤出机的E值不同。现在我需要在每次换刀后重新设置E值,或者我需要使用相对E值,这会增加舍入误差。每个刀具的偏移量很容易在软件中进行补偿。

功能请求: 双挤出机支架的工具头距离定义 #146
贡献者

根据CNC加工经验,如果您使用多台虎钳,您可以使用不同的工作坐标偏置选择(G54、G55、G56等)。 在把这个翻译成3D打印机的过程中,我有几个想法:

G53:机床WCS(工件坐标系)
G54:印刷台WCS,定义为G53的偏移量(限位开关)

每个打印头都有自己的校正偏移量:

[层移动]

T0 M6< – 切换到挤出机#1,T0的负载偏移

[层移动]

T1 M6<-切换至挤出机#2,T1的负载偏移

[层移动]

这项工作假设一次用一个挤出机印刷。 需要确定的是何时发生物理偏移? 挤出机应在M6处移动还是应在下一次移动时进行补偿?

功能请求: 双挤出机支架的工具头距离定义 #146

我已经成功地打印了马林和netfab双挤出-这有gcode偏移虽然..

我希望能够使用马林(双挤压)与kisslicer,slic3r等,其中没有gcode偏移固件

Repetier固件刚刚实现了双挤出机与偏移在固件等-将测试时,我回到周日。

功能请求: 双挤出机支架的工具头距离定义 #146

只想为基于固件的挤出机偏移添加+1,因为这显然是特定于机器的内部尺寸。切片软件应当仅仅管理工具架的选择而不知道它们的物理偏移。

功能请求: 双挤出机支架的工具头距离定义 #146 伯尔 添加的 该 T:功能请求 用户请求的功能。标号 on Dec 18, 2014
功能请求: 双挤出机支架的工具头距离定义 #146
贡献者

这个是大约一年前创建的,已经有了很多变化,请下载最新的马林鱼副本,看看问题是否仍然存在。 你也最新的arduino IDE闪存的马林固件。如果您的董事会文件等只工作在旧的IDE升级那些第一,使他们在最新的IDE工作。

如果您为硬件创建的板文件不在https://github.com/ErikZalm/Marlin/tree/Marlin_v1/ArduinoAddons中,请派生marlin并添加文件,然后创建拉取请求,以便我们可以获得支持的硬件。这也会给予你知道人们在使用什么硬件。

功能请求: 双挤出机支架的工具头距离定义 #146 伯尔 关闭此为 已完成 on Dec 19, 2014
功能请求: 双挤出机支架的工具头距离定义 #146 伯尔 移走 T:功能请求 用户请求的功能。PR:改善 标号 on Jun 29, 2015
功能请求: 双挤出机支架的工具头距离定义 #146
吉图亚行动 机器人 评论的 on Apr 15, 2022

此问题已自动锁定,因为在关闭后没有任何近期活动。请为相关错误打开一个新问题。

功能请求: 双挤出机支架的工具头距离定义 #146 吉图亚行动 机器人 锁定和限制与协作者的对话 on Apr 15, 2022
喜欢 (0)