使Klipper 3D打印機(jī)支持圓弧運(yùn)動(dòng)的方式

圓弧移動(dòng)在通常情況下會(huì)被切片軟件分割成一段段較短的直線來(lái)模擬出圓形的樣子,在切片軟件剛出現(xiàn)時(shí)就已經(jīng)擁有將圓形轉(zhuǎn)換成平滑的貝塞爾曲線的技術(shù),
圓弧移動(dòng)可以消除模型圓弧部分的震紋,在高速打印時(shí)減少機(jī)器振動(dòng)并且平滑擠出壓力,幫助機(jī)器在打印弧線時(shí)能夠像打印直線一樣擁有均勻的擠出并且保持加速,這項(xiàng)功能會(huì)讓打印機(jī)運(yùn)行的更加平穩(wěn)并且大幅增強(qiáng)打印質(zhì)量,
很多CNC銑削設(shè)備也都支持進(jìn)行非線性的曲線運(yùn)動(dòng),但曾經(jīng)的3D打印機(jī)主控板使用的都是8位處理器,這些主控通常只有少量的整數(shù)計(jì)算單元并且沒(méi)有浮點(diǎn)計(jì)算單元,如果要讀取曲線數(shù)據(jù)并且進(jìn)行插值運(yùn)動(dòng)的話會(huì)消耗大量的計(jì)算時(shí)間,

直接體現(xiàn)在機(jī)器上的結(jié)果就是在打印曲線時(shí)速度會(huì)大幅降低并且不停抖動(dòng),這是因?yàn)闄C(jī)器的執(zhí)行速度超過(guò)了于計(jì)算曲線所需的時(shí)間導(dǎo)致運(yùn)行完當(dāng)前命令之后需要等待主控計(jì)算出下一條命令才能繼續(xù)執(zhí)行,
但隨著芯片制造技術(shù)的提升,制造一顆復(fù)雜的處理器所需的成本大大降低,現(xiàn)在即使是一塊8元的STM32主控也比10年前數(shù)萬(wàn)元的數(shù)控設(shè)備處理器要強(qiáng)大的多,
在marlin固件內(nèi)擁有內(nèi)建的圓弧運(yùn)動(dòng)功能,只需要在固件內(nèi)激活相應(yīng)的設(shè)置即可,
此設(shè)置在“ Configuration_adv.h ”文件中,取消掉“ //#define ARC_SUPPORT ”前的注釋即可開(kāi)啟此功能,此功能在mega2560包括處理性能在此之上的主控都可以順暢運(yùn)行,可以微調(diào)下方的選項(xiàng)來(lái)平衡最佳性能和最佳打印質(zhì)量,


如果你的機(jī)器運(yùn)行的是klipper固件,只需將以下內(nèi)容復(fù)制到打印機(jī)配置文件內(nèi)保存并重啟,就可以讓機(jī)器支持曲線運(yùn)動(dòng)
---------------------------------------------------------------------------------------------------------------
[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 %}
---------------------------------------------------------------------------------------------------------------
如果想要打印曲線,需要讓切片軟件輸出曲線數(shù)據(jù),這邊展示的是SuperSlicer的開(kāi)啟方式,如果你使用的是PrusaSlicer或BambuStuodio,那么開(kāi)啟方式將是相同的,這三款軟件都是基于Slic3r開(kāi)發(fā)而成






開(kāi)啟此功能后,切片軟件會(huì)自動(dòng)平滑stl文件內(nèi)的圓弧部分并且將其輸出成曲線數(shù)據(jù),在預(yù)覽中會(huì)顯示簡(jiǎn)化后的曲線,但實(shí)際上這些曲線已經(jīng)被處理成了以圓心和半徑生成的插值曲線
marlin固件對(duì)G2-G3的詳細(xì)解釋
https://marlinfw.org/docs/gcode/G002-G003.html