使Klipper 3D打印机支持圆弧运动的方式

圆弧移动在通常情况下会被切片软件分割成一段段较短的直线来模拟出圆形的样子,在切片软件刚出现时就已经拥有将圆形转换成平滑的贝塞尔曲线的技术,
圆弧移动可以消除模型圆弧部分的震纹,在高速打印时减少机器振动并且平滑挤出压力,帮助机器在打印弧线时能够像打印直线一样拥有均匀的挤出并且保持加速,这项功能会让打印机运行的更加平稳并且大幅增强打印质量,
很多CNC铣削设备也都支持进行非线性的曲线运动,但曾经的3D打印机主控板使用的都是8位处理器,这些主控通常只有少量的整数计算单元并且没有浮点计算单元,如果要读取曲线数据并且进行插值运动的话会消耗大量的计算时间,

直接体现在机器上的结果就是在打印曲线时速度会大幅降低并且不停抖动,这是因为机器的执行速度超过了于计算曲线所需的时间导致运行完当前命令之后需要等待主控计算出下一条命令才能继续执行,
但随着芯片制造技术的提升,制造一颗复杂的处理器所需的成本大大降低,现在即使是一块8元的STM32主控也比10年前数万元的数控设备处理器要强大的多,
在marlin固件内拥有内建的圆弧运动功能,只需要在固件内激活相应的设置即可,
此设置在“ Configuration_adv.h ”文件中,取消掉“ //#define ARC_SUPPORT ”前的注释即可开启此功能,此功能在mega2560包括处理性能在此之上的主控都可以顺畅运行,可以微调下方的选项来平衡最佳性能和最佳打印质量,


如果你的机器运行的是klipper固件,只需将以下内容复制到打印机配置文件内保存并重启,就可以让机器支持曲线运动
---------------------------------------------------------------------------------------------------------------
[gcode_arcs]
resolution: 0.1
[gcode_macro m201]
gcode:
{% if 'X' in params or 'Y' in params %}
{% set accel = (params.X|default(params.Y)|float,
params.Y|default(params.X)|float)|min %}
SET_VELOCITY_LIMIT ACCEL={accel} ACCEL_TO_DECEL={accel * 0.5}
{% else %}
SET_VELOCITY_LIMIT
{% endif %}
[gcode_macro m203]
gcode:
{% if 'X' in params or 'Y' in params %}
{% set speed = (params.X|default(params.Y)|float,
params.Y|default(params.X)|float)|min %}
SET_VELOCITY_LIMIT VELOCITY={speed}
{% else %}
SET_VELOCITY_LIMIT
{% endif %}
[gcode_macro M205]
gcode:
{% if 'X' in params or 'Y' in params %}
{% set corner_speed = (params.X|default(params.Y)|float,
params.Y|default(params.X)|float)|min %}
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={corner_speed}
{% else %}
SET_VELOCITY_LIMIT
{% endif %}
---------------------------------------------------------------------------------------------------------------
如果想要打印曲线,需要让切片软件输出曲线数据,这边展示的是SuperSlicer的开启方式,如果你使用的是PrusaSlicer或BambuStuodio,那么开启方式将是相同的,这三款软件都是基于Slic3r开发而成






开启此功能后,切片软件会自动平滑stl文件内的圆弧部分并且将其输出成曲线数据,在预览中会显示简化后的曲线,但实际上这些曲线已经被处理成了以圆心和半径生成的插值曲线
marlin固件对G2-G3的详细解释
https://marlinfw.org/docs/gcode/G002-G003.html