前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3D打印机marlin固件框架与GCode命令总结

3D打印机marlin固件框架与GCode命令总结

作者头像
杨源鑫
发布2021-05-27 15:38:43
6.8K0
发布2021-05-27 15:38:43
举报

1、marlin中Arduino主程序架构
  • setup()
  • Loop()

setup()一般作为初始化的动作:

void setup()
{
 setup_killpin();
 setup_powerhold();
 MYSERIAL.begin(BAUDRATE);
 SERIAL_PROTOCOLLNPGM("start");
 SERIAL_ECHO_START;
 //代码段1
 {
 byte mcu = MCUSR;
 if(mcu&1) SERIAL_ECHOLNPGM(MSG_POWERUP);
 if(mcu&2) SERIAL_ECHOLNPGM(MSG_EXTERNAL_RESET);
 if(mcu&4) SERIAL_ECHOLNPGM(MSG_BROWNOUT_RESET);
 if(mcu&8) SERIAL_ECHOLNPGM(MSG_WATCHDOG_RESET);
 if(mcu&32) SERIAL_ECHOLNPGM(MSG_SOFTWARE_RESET);
 MCUSR = 0;
 }
  # ifdef STRING_VERSION_CONFIG_H
  //代码段2
  {
    #ifdef STRING_CONFIG_H_AUTHOR
  SERIAL_ECHO_START;
  SERIAL_ECHOPGM(MSG_CONFIGURATION_VER);
  SERIAL_ECHOPGM(STRING_VERSION_CONFIG_H);
  SERIAL_ECHOPGM(MSG_AUTHOR);
  SERIAL_ECHOLNPGM(STRING_CONFIG_H_AUTHOR);
  SERIAL_ECHOPGM("Compiled:");
  SERIAL_ECHOLNPGM(_DATE_);
    #endif
  }
  #endif
  //代码段3
  {
  SERIAL_ECHO_START;
  SERIAL_ECHOPGM(MSG_FREE_MEMORY);
  SERIAL_ECHO(freeMemory());
  SERIAL_ECHOPGM(MSG_PLANNER_BUFFER_BYTES);
  SERIAL_ECHOLN((int) sizeof(block_t)*BLOCK_BUFFER_SIZE);
  ......
  Config_RetrieveSettings();//从EEROM载入系统参数
  tp_init();//温度设定的初始化
  plan_init();//路径规划初始化
  watchdog_init();//看门狗初始化
  st_init;/步进马达的初始化
  setup_photpin();//佳能遥控器控制初始化
  servo_init();//RC servo 的初始化
  lcd_init();//lcd初始化
  _delay_ms(1000);
  #if defined((CONTROLLERFAN_PIN)&&CONTROLLERFAN_PIN>-1) //设定CONTROLLERFAN_PIN
  #endif
  }
}

其中setup_killpin():kill pin设high时会disable失能各个功能,包括步进电机,加热器。

setup_powerhold():在有定义PS_ON的情况下,会依ATX power或是X-Box 360203W设定PS_ON。

其中代码段1是检查startup是否成功

检测reset flag MCUSR的值。

代码段2:marlin的版本信息

代码段3:系统剩下多少memory,以及block的size。

Loop()作为执行的主程序:

void Loop()
{
  //如果cmdbuffer有空间,则读取G-code指令
  //读取G-code的buffer为cmdbuffer[BUFSIZE][MAX_CMD_SIZE],BUFSIZE为4,
  //最多存4条指令。MAX_CMD_SIZE为96,一条指令最多存96个字元。
 if(buflen<(BUFSIZE -1))
  get_command();
  #ifdef SDSUPPORT
  card.checkautostart(false);
  #endif
  if(buflen)
  {
   #ifdef SDSUPPORT
   if(card.saving)//当SD卡开启档案作为写入M28时,card.saving会设true,会将cmdbuffer的内容复制到SD卡
   {
    if(strstr_P(cmdbuffer[bufindr],PSTR("M29"))== null)//如果cmdbuffer读取到M29的指令,则结束复制动作。
    card.write_command(cmdbuffer[bufindr]);
    if(card.logging)
    {
     process_commands();//解释并执行G-code的动作
    }
    else
    {
   SERIAL_PROTOCOLLNPGM(MSG_OK);
    }
   }
   else
   {
    SERIAL_PROTOCOLLNPGM(MSG_OK);
   }
   else 
   {
    card.closefile();
    SERIAL_PROTOCOLLNPGM(MSG_FILE_SAVED);
    
   }
  }
  else
  {
  process_commands();
  }
  #else
  process_commands();
  #endif
  buflen= (buflen-1);//载入cmdbuffer下一个命令
  bufindr= (bufindr+1)%BUFSIZE;
  manage_heater();//加热温度控制函数
  manage_inactivity();//检查系统是否有异常的状况
  checkHitEndstops();//检查endstop的状态
  lcd_updata();//更新LCD的讯息
}
2、关于G代码的学习总结

学习3d打印机的基础就是了解并且掌握g-code文件,实际上g-code指的是3d模型在进入3d打印机实际打印之前,必须要经过切片器处理而成的一种中间格式文件。这种中间格式文件的内容,实际上就是每一行3d打印机固件所能理解的命令。而这种命令,也被称为g-code命令。是3d打印机与pc之间最重要的命令交互界面。

常见的计算机与3d打印机的连接,不论是usb还是TCP/IP协议或者是SD卡,所有的连接通道中都是g-code命令。

g-code命令解释_1

G command

#pragma innline void fun(){} //内联编译把fun函数内联到调用它的函数体内。
以下函数都可以内联编译:
static void GCODE_G0_1():提取G0/G1的数据命令,移动命令的数据预处理,在屏上刷新一次坐标。
static void GCODE_G2():获取弧坐标并移动。
static void GCODE_G4():暂停命令。
static void GCODE_G20():设置当前所有距离的单位为英尺。
static void GODE_G21():设置当前所有距离的单位为毫米。
static void GCODE_G28():使3D打印机XYZ轴以及挤出头E轴归零。
static void GCODE_G29():计算平面的倾斜角度。
static void GCODE_G90():设置使用绝对坐标。
static void GCODE_G91():设置使用相对坐标。
static void GCODE_G92():重置当前坐标。

M command

static void GCODE_M17():使能所有步进电机。
static void GCODE_M18():禁止所有步进电机。
static void GCODE_M20():显示SD卡所有目录内容。
static void GCOODE_M21():加载SD卡。
static void GCODE_M23():选择文件。
static void GCODE_M24():开始SD卡的打印。
static void GCODE_M25():暂停SD卡打印。
static void GCODE_M26():设置当前文件的当前位置。
static void GCODE_M27():获取SD卡打印进度。
static void GCODE_M30():删除文件。
static void GCODE_M80():打开ATX电源。
static void GCODE_M81():关闭ATX电源。
g-code 命令解释_2

M command

GCODE_M84():设置步进电机自动关闭的时间。
GCODE_M92():设置3D打印机内存中XYZE的步进电机的分辨率。
GCODE_M104():设置挤出头的目标温度。可以不需要立即到达这个温度才执行下一条g语句。相关参数:
Snnn:目标温度
Tnnn:对应的挤出头编号
Pnnn:是否等待前面的指令完成后,再开始设置挤出头温度。
Fnnn:到达目标温度后,是否触发蜂鸣器。F1表示要触发
GCODE_M105():获取当前温度值,包括挤出头和热床的温度。相关参数:
X:输出AD转换输入的原始值
GCODE_M106():打开风扇。相关参数:
Snnn:打开风扇时风扇的转速,范围是0-255之间。
Pnnn:等待前面的指令完成后,再开始调整风扇转速。
GCODE_M107():关闭风扇。相关参数与M106一样。
GCODE_M109():等待挤出头加热达到目标温度,并等待达到这个温度。相关参数:
Snnn:表示目标温度;
Tnnn:表示对应的挤出头
Fnnn:到达目标温度后,是否触发蜂鸣器,F1表示要触发。
GCODE_M110():强行重置打印机。
GCODE_M112():紧急停车。
GCODE_M114():输出挤出头当前位置。
GCODE_M115():输出3D打印机信息。
GCODE_M117():发送消息到LCD屏。显示当前状态信息。参数为:message消息内容。
GCODE_M119():输出限位开关状态。
GCODE_M163():为混合挤出机设置单一比例。
GCODE_M164():将混合物保存到一个虚拟的挤出机。
GCODE_M165():为混合物设置比例。
GCODE_M140():设置热床目标温度,不需要等待到达这个温度,立即开始执行下一条G-code语句。相关参数:
Snnn:目标温度。
Fnnn:到达温度后,是否触发蜂鸣器。F1表示触发。
GCODE_M190():设置热床目标温度,并等待到达这个温度。相关参数:
S:目标温度。
F:到达目标温度后是否触发蜂鸣器。F1表示要触发。
GCODE_M201():挤出头在打印过程中的运动加速度。
GCODE_M202():挤出头不工作时移动的运动加速度。相关参数:
X:x轴的加速度。
Y:y轴的加速度
Z:z轴的加速度
E:e轴的加速度
GCODE_M203():使用串口输出监控3D打印机的温度。参数是:
S:是否监控,s0关闭监控,s1打开监控。
GCODE_M204():设置默认的加速度.
GCODE_M205():输出EEPROM的当前设置值表格。
GCODE_M220():设置3D打印机运行速度系数。相关参数:
S:表示一个百分数的系数。若无S则使用缺省值100;
GCODE_M280():有些特殊配置的3D打印机,允许2-4头同时工作,并且这些挤出头动作完全一致,同时打印出多件完全一样的打印件,这种工作模式叫做多头重复打印模式。相关参数:
S:挤出头的个数,s0表示关闭多头重复打印模式;s3表示在多头重复打印模式中有额外的3个挤出头。
GCODE_M300():播放蜂鸣器。
GCODE_M301():设置挤出头的温度控制PID参数,相关参数是:
S:对应的挤出头编号,若无S则表示使用当前挤出头。
X:表示P参数
Y:表示I参数
Z:表示D参数
GCODE_M304():设置热床的PID参数
GCODE_M500():保存内存中的设置值到EEPROM。
GCODE_M502():将内存中的设置值重置。
GCODE_M851():选定范围以调整Z探针的偏移。
GCODE_M2000():设置SN号。
GCODE_M2002():设置最小的地盘定位,以及每毫米步进电机的步距,和电机的home位置,Z轴的偏差,最大的进料速度,回home的速度,电机的旋转方向
GCODE_M2003():最大的地盘定位
GCODE_M2004():设置每毫米步进电机的步距以及步距的加速度。
GCODE_M2005():设置电机的旋转方向。
GCODE_M2006():设置电机的最大速度。
GCODE_M2007():设置电机的归位速度。
GCODE_M2009():HV写入flash
GCODE_M2100():LCD屏固件升级控制。
GCODE_M2101():发送打印机状态。
GCODE_M2102():获取wifi信号强度。
GCODE_M2103():终止打印
GCODE_M2104():网络断开
GCODE_M2105():挤出头出料与退料
GCODE_M2104():耗材检测
GCODE_M2108():设置电机解锁时间单位:s
GCODE_M2111():步进电机的控制
GCODE_M2115():设置电机解锁时间单位:s
GCODE_M2120():手动调平或自动调平。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式云IOT技术圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、marlin中Arduino主程序架构
  • 2、关于G代码的学习总结
  • g-code命令解释_1
  • g-code 命令解释_2
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档