Marlin中delta结构的笛卡尔空间坐标和电机轴坐标的转换详解 

3D打印技术 /[固件]
2020-02-25 11:47
Marlin固件中需要将从Gcode中获取的待打印器件的3D模型中的坐标,转换为三角洲3D打印机的三个电机轴上的坐标。
电机轴指的是三个电机对应的线轨。
电机轴坐标指的是滑块在电机轴上的位置。
笛卡尔空间坐标是指从Gcode中获取的待打印器件的3D模型中的坐标。
实现坐标转换功能的函数为calculate_delta()。
Marlin中delta结构的笛卡尔空间坐标和电机轴坐标的转换详解 (2).png
变量中的tower指的是电机轴,tower1,tower2和tower3的位置如下图所示
Marlin中delta结构的笛卡尔空间坐标和电机轴坐标的转换详解 (3).png
变量delta_tower1_x为电机轴tower1在笛卡尔坐标系中坐标x的值,
变量delta_tower1_y为电机轴tower1在笛卡尔坐标系中坐标y的值,
变量delta_tower2_x为电机轴tower2在笛卡尔坐标系中坐标x的值,
变量delta_tower2_y,delta_tower3_x,delta_tower3_y类似。
这三个电机轴转换到笛卡尔坐标系后的坐标如代码所示,原理如下图
Marlin中delta结构的笛卡尔空间坐标和电机轴坐标的转换详解 (4).png
这是三角洲3D打印机抽象的俯视图。点tower1,tower2和tower3分别为三个电机轴(因为是俯视图,所以在图中表示为一个点),这三个点构成一个等边三角形,内切圆的圆心为点z,内切圆的半径为delta_radius。
笛卡尔坐标系的原点为等边三角形内切圆的圆心,即点z;x轴穿过原点,并且与tower1和toweer2组成的线段平行;y轴经过tower3和原点;z轴经过原点并且与tower3平行。
电机轴tower1转换到笛卡尔坐标系的坐标x为点M,坐标y为点N。
电机轴tower2转换到笛卡尔坐标系的坐标x为点P,坐标y为点N。
电机轴tower3转换到笛卡尔坐标系的坐标x为0,坐标y为tower3本身。
M的坐标为(-sin60 * delta_radius, 0),
N的坐标为(0, -cos60 * delta_radius),
P的坐标为(sin60 * delta_radius, 0)
所以,tower1在笛卡尔空间坐标系中的x坐标delta_tower1_x= -sin60 * delta_radius,依次类推
delta_tower1_y =-cos60 * delta_radius ,
delta_tower2_x =sin60 * delta_radius ,
delta_tower2_y =-cos60 * delta_radius ,
delta_tower3_x =0 ,
delta_tower3_y =delta_radius ,
再来看下代码是不是这样的。
Marlin中delta结构的笛卡尔空间坐标和电机轴坐标的转换详解.png
回过头来看看是怎么计算电机轴上滑块位置的。假设有下图
Marlin中delta结构的笛卡尔空间坐标和电机轴坐标的转换详解 (5).png
点A为喷头的位置,
点B为点A投影到电机轴tower2(也是平行于笛卡尔坐标系的Z轴),
点C为滑块的位置,
点D为点A投影到笛卡尔坐标系的xy平面的点,
点E为电机轴tower2与笛卡尔坐标系的xy平面相交的点。
其中BE就是打印物品笛卡尔坐标系的z值,AC为推杆长度,AB垂直于BC,根据直角三角形斜边平方等于两直角边平方之和,即
AC*AC = AB *AB +BC*BC
其中AC已知,为推杆长度,AB可以通过喷头在笛卡尔坐标系的X坐标和Y坐标算出来,所以BC也就可以算出来了。
AB = DE
XY平面如下所示
Marlin中delta结构的笛卡尔空间坐标和电机轴坐标的转换详解 (6).png
点D为前一个图点A的投影,点E为点B的投影,点A为喷头的坐标,那么点D的xy坐标也是喷头的xy坐标,是已知的。点E电机轴tower2在XY平面的点,坐标也是已知的,点K和I分别为点E在X和Y轴的投影。
那么DH = OK - OG ,即E的x坐标 - 喷头的x坐标
EH = FI = OI -OF , 即E的y坐标 - 喷头的y坐标
DE*DE = EH*EH +DH*DH
综上所述,滑块的z轴坐标
= BE + BC
=喷头的z坐标 + BC
=喷头的z坐标 + sqrt(推杆长度*推杆长度 -  AB*AB)
=喷头的z坐标 + sqrt(推杆长度*推杆长度 -  (EH*EH + DH*DH))
=喷头的z坐标 + sqrt(推杆长度*推杆长度 -  ((tower2的y坐标 - 喷头的y坐标) * (tower2的y坐标 - 喷头的y坐标) + (tower2的x坐标 - 喷头的x坐标) * (tower2的x坐标 - 喷头的x坐标)))
对应代码为
delta[TOWER_2] =sqrt(delta_diagonal_rod_2_tower_2
                          - sq(delta_tower2_x -cartesian[X_AXIS])
                          - sq(delta_tower2_y -cartesian[Y_AXIS])
                         ) + cartesian[Z_AXIS];
现在再看看函数calculate_delta()
友情提示电机轴坐标,三个电机轴平行,并且原点在限位开关处,即原点在上面。如下所示
Marlin中delta结构的笛卡尔空间坐标和电机轴坐标的转换详解 (1).png
O1,O2,O3分别为三个电机轴的原点。
所以delta[TOWER_2] 是tower2对应的滑块在笛卡尔坐标系中z轴值。
声明:3D打印资源库(3dzyk)内网友所发表的所有内容及言论仅代表其本人,并不代表3D打印资源库(3dzyk)观点和立场;如对文章有异议或投诉,请联系kefu@3dzyk.cn。
Marlin中delta结构的笛卡尔空间坐标和电机轴坐标的转换详解 
快速回复 返回顶部 返回列表