marlin代码解析

本文深入探讨了Marlin固件在Delta 3D打印机中的运动算法,特别是针对Rostock结构。文章从Marlin的loop()函数、process_command()和prepare_move()函数入手,解析了Delta机型的笛卡尔坐标转换。通过计算目标坐标与当前坐标的笛卡尔距离,减少CPU浮点运算量。文章还介绍了如何调试Rostock参数,建议先调校Z轴,再调校XY轴,以提高打印精度。作者分享了调机心得,包括同步轮选择和调机顺序,帮助读者更好地理解和优化3D打印过程。
摘要由CSDN通过智能技术生成

一、前言
Delta机型是一种并联式运动结构的3d打印机,delta机型实际上是分为两大类,一种是工业上用的并联式机器人;另外一种是rostock 的运动结构。这两种结构做出来的打印机给人的感觉都是非常cool的。所以大伙都偏好这类型的打印机,目前主流的固件marlin 和repetier都支持rostock结构的3d打印机。这里鸭哥就谈谈自己对rostock机型的运动算法的理解,继而从运动算法中推算一下如何调试一台rostock的参数。
二、基础知识
要理解rostock的全部运动算法所要涉及的数学知识不是太多,如果不记得的话,是时候找高中数学老师喝喝茶吃个小饭啦。
1)三角函数 sin cos 这个是理解rostock计算过程的基础知识
2)笛卡尔空间坐标转换/线性代数,这个嘛是属于进阶内容,如果懂那就更好啦,如果不懂也没关系,在把所有的外界条件全部设置为理想情况下,这个笛卡尔空间坐标转换可以不用精通的。(包括鸭哥也不敢说对笛卡尔空间坐标转换和线性代数精通哦)
3)marlin程序的结构逻辑结构(对于arduino ide /arduino程序基本教程,这里就不展开了,不懂的小白们可以先学一下arduino的基础教程先,饭要一口一口得出,路要一步一步的走)
三、Marlin程序解读
这里鸭哥不打算讲marlin的整个loop()函数的流程,讲讲delta机型的核心部分。对于marlin来说,delta机型和非delta机型在对于温控、看门狗、电机运动甚至空间坐标等方面都是一样的。区别在哪里呢?区别就在与delta多了一个笛卡尔坐标转换的函数
Marlin的loop()主体流程
Void loop ()
{
Get_command() ; //从sd卡或者串口获取gcode
Process_command(); //解析gcode并且执行代码
Manage_heater();//控制机器的喷头和热床的温度
Manage_inactivity();//
checkHitEndstops();//检查endstop的状态
Lcd_update(); //更新lcd 上面的信息
}

在这个过程中 process_command()是控制的核心,各位仔细研读一下process_command()的代码就发现arduino的厉害了。简单说一下process_command()的流程,说白了,process_command()就是一个巨大的case 结构,这里讲讲G1命令的大致逻辑(G1命令不知道的自己搜索去):
Process_command()
{
Case 0: //g0->g1
Case 1 :
{
if(Stopped == false) {
get_coordinates(); // 获取当前的坐标,这里是指打印件的世界坐标哦,不是delta的xyz电机的坐标哦!普通结构的打印机则是一样的。
#ifdef FWRETRACT
if(autoretract_enabled)
if( !(code_seen('X') ||code_seen('Y') || code_seen('Z')) && code_seen('E')) { //获取 命令中 xyze轴的参数
Float echange=destination[E_AXIS]-current_position[E_AXIS];//这里是算最小回抽值的,如果移动距离小于最小回抽值就不回抽了。这里是一个辅助功能。简单了解可以了。
if((echange<-MIN_RETRACT&& !retracted) || (echange>MIN_RETRACT && retracted)) {//move appears to be an attempt to retract or recover
current_position[E_AXIS] =destination[E_AXIS]; //hide the slicer-generated retract/recover fromcalculations
plan_set_e_position(current_position[E_AXIS]); //AND from the planner
retract(!retracted);
return;
}
}
#endif //FWRETRACT
prepare_move(); //执行移动命令

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值