【龙印】3D打印固件Marlin中限位开关相关代码解读

本文以三角洲3D打印机为例,探讨Marlin固件如何处理限位开关在G28归零、自动调平及打印过程中的应用。在执行G28时,电机会上升至碰到限位开关停止;自动调平利用挤出机限位检测打印平面;打印时若接触打印平面,Marlin会中断当前指令。关键函数为update_endstops(),其中UPDATE_ENDSTOP(AXIS,MINMAX)宏是核心部分。" 119988920,7520242,闲鱼数据采集与分析实践,"['数据挖掘', '网络爬虫', 'Android开发', '移动应用']
摘要由CSDN通过智能技术生成
本文为在用龙芯1c做3D打印机过程中的笔记。龙芯1c做的3d打印机简称“龙印”.

以我手上的三角洲3D打印机为例,讨论一下限位开关在marlin中的几个应用场景,
3个导轨上方和挤出机各安装了一个限位开关。
在执行G28指令让电机xyz归零时,三个导轨上的电机带动滑块向上运动,直到碰到限位块后停止;
在自动调平时,会利用挤出机上的限位开关来探测是否接触到打印平面了;
在正常打印最下面的几层时,如果调平没有做的很好的话,可能出现打印头移动过程中会触碰到打印平面。marlin对于这种情况的处理是只要碰到打印平面则立即放弃当前gcode指令,转而执行下一条gcode指令。

现在来看marlin源码,读取限位开关状态的函数是update_endstops(),其中定义了一个宏UPDATE_ENDSTOP(AXIS,MINMAX),这是函数update_endstops()的要点,其它的是各种编译宏为了兼容各种3d打印机而设置的,这里重点分析宏UPDATE_ENDSTOP(AXIS,MINMAX),源码如下

// Check endstops - Called from ISR!
inline void update_endstops() {

  #if ENABLED(Z_DUAL_ENDSTOPS)
    uint16_t
  #else
    byte
  #endif
      current_endstop_bits = 0;

  #define _ENDSTOP_PIN(AXIS, MINMAX) AXIS ##_## MINMAX ##_PIN
  #define _ENDSTOP_INVERTING(AXIS, MINMAX) AXIS ##_## MINMAX ##_ENDSTOP_INVERTING
  #define _AXIS(AXIS) AXI
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值