欢迎来到天天文库
浏览记录
ID:15617262
大小:66.00 KB
页数:16页
时间:2018-08-04
《delta(rostock型)d打印机算法解读及调试步骤》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Delta(rostock型)3d打印机算法解读及调试步骤一、前言Delta机型是一种并联式运动结构的3d打印机,delta机型实际上是分为两大类,一种是工业上用的并联式机器人;另外一种是rostock的运动结构。这两种结构做出来的打印机给人的感觉都是非常cool的。所以大伙都偏好这类型的打印机,目前主流的固件marlin和repetier都支持rostock结构的3d打印机。这里鸭哥就谈谈自己对rostock机型的运动算法的理解,继而从运动算法中推算一下如何调试一台rostock的参数。二、基础知识要理解rostock的全部运动算法所要涉及的数学知识不是太多,如
2、果不记得的话,是时候找高中数学老师喝喝茶吃个小饭啦。1)三角函数sincos这个是理解rostock计算过程的基础知识2)笛卡尔空间坐标转换/线性代数,这个嘛是属于进阶内容,如果懂那就更好啦,如果不懂也没关系,在把所有的外界条件全部设置为理想情况下,这个笛卡尔空间坐标转换可以不用精通的。(包括鸭哥也不敢说对笛卡尔空间坐标转换和线性代数精通哦)3)marlin程序的结构逻辑结构(对于arduinoide/arduino程序基本教程,这里就不展开了,不懂的小白们可以先学一下arduino的基础教程先,饭要一口一口得出,路要一步一步的走)一、Marlin程序解读这里鸭哥
3、不打算讲marlin的整个loop()函数的流程,讲讲delta机型的核心部分。对于marlin来说,delta机型和非delta机型在对于温控、看门狗、电机运动甚至空间坐标等方面都是一样的。区别在哪里呢?区别就在与delta多了一个笛卡尔坐标转换的函数Marlin的loop()主体流程Voidloop(){Get_command();//从sd卡或者串口获取gcodeProcess_command();//解析gcode并且执行代码Manage_heater();//控制机器的喷头和热床的温度Manage_inactivity();//checkHitEndst
4、ops();//检查endstop的状态Lcd_update();//更新lcd上面的信息}在这个过程中process_command()是控制的核心,各位仔细研读一下process_command()的代码就发现arduino的厉害了。简单说一下process_command()的流程,说白了,process_command()就是一个巨大的case结构,这里讲讲G1命令的大致逻辑(G1命令不知道的自己搜索去):Process_command(){Case0://g0->g1Case1:{if(Stopped==false){get_coordinates();
5、//获取当前的坐标,这里是指打印件的世界坐标哦,不是delta的xyz电机的坐标哦!普通结构的打印机则是一样的。#ifdefFWRETRACTif(autoretract_enabled)if(!(code_seen('X')
6、
7、code_seen('Y')
8、
9、code_seen('Z'))&&code_seen('E')){//获取命令中xyze轴的参数Floatechange=destination[E_AXIS]-current_position[E_AXIS];//这里是算最小回抽值的,如果移动距离小于最小回抽值就不回抽了。这里是一个辅助功能。简单了解可以
10、了。if((echange<-MIN_RETRACT&&!retracted)
11、
12、(echange>MIN_RETRACT&&retracted)){//moveappearstobeanattempttoretractorrecovercurrent_position[E_AXIS]=destination[E_AXIS];//hidetheslicer-generatedretract/recoverfromcalculationsplan_set_e_position(current_position[E_AXIS]);//ANDfromtheplanner
13、retract(!retracted);return;}}#endif//FWRETRACTprepare_move();//执行移动命令return;}}从上面的代码来看呢,对于运动类的Gcode,marlin会在process_command()函数中获取xyze各轴的参数后算出目标坐标(destination[_AXIS]),也会使用get_coordinates()来获取当前坐标(current_position[E_AXIS])(再次强调,这个坐标是打印件的世界坐标),当我们知道了目标坐标和当前坐标以后,空间中移动的距离就可以算出来了(不会算的,请自觉请
14、高中数学老
此文档下载收益归作者所有