Grbl_ESP32 支持直线 (G0、G1) 和圆弧 (G2、G3) 的 gcode,但实际上,Grbl_ESP32 用大量非常短的线段替换圆弧来生成圆弧。许多 CAM 程序都做同样的事情。这是完全可以接受的,因为规划器非常高效,并且此方法的默认公差为 0.002 毫米。
基本运动学使用相同原理将默认的笛卡尔坐标系转换为机器的系统要求。它将移动分解得足够小,以至于看不到非线性影响。
Polar Coaster 就是一个很好的例子。它使用一个线性运动轴和一个旋转运动轴。查看polar_coaster.h机器定义文件。
在常规函数前面添加了一个额外的函数来绘制一条线。它会查找#define KINEMATICS。如果未定义,它将调用法线函数。如果已定义,它将调用一个名为inverse_kinematics(…)的函数。此文件必须由用户添加。它会将该线分成许多较小的线,将它们转换为新的坐标系并调用mc_line(…)函数
当您转换到新系统时,无论实现此目的所需的运动学如何,工具仍会在现实世界 XYZ 中穿过材料。转换后的线的总步数可能与原始线的步数不同。为了补偿这一点,您应该计算两个距离并将该比率应用于原始进给速率。
通常,新系统中会报告位置。例如,在极坐标机器上,它将报告当前半径和度数。这可能会让一些人感到困惑。如果他们将其发送到 X10、Y10,它将报告 X14.14 Y 45。为了解决这个问题,可以添加一个正向运动学函数。放入#define FWD_KINEMATICS_REPORTING
您的机器定义文件并在放置逆运动学函数的同一文件中定义一个void forward_kinematics(float *position)
函数。有关示例,请参阅polar_coaster.cpp。这目前仅适用于 WPos 报告。设置 $10=2 以获取该报告模式。
CoreXY 是一种由 2 个电机协作在 XY 平面上产生运动的机器。这样做通常是为了简化机器,并且可以将重型电机从移动部件上移开以提高性能。
传统的 Grbl 已将其内置到主代码中。它这样做是因为这是它支持的唯一奇特运动类型,而 CoreXY 的实现相对简单。当 Grbl_ESP32 添加了添加任何类型运动的功能时,在主代码中保留一个运动类型是没有意义的。
限制
- 仅限 XY 且可使用 CoreXY
- 最多 3 个轴(无 ABC 轴)
- 不能将多个轴放在一个归位循环中
- 您不能拥有任何双电机(联动)轴。
将以下几行添加到您的机器定义中
#define CUSTOM_CODE_FILENAME "../Custom/CoreXY.cpp"
#define USE_KINEMATICS // there are kinematic equations for this machine
#define USE_FWD_KINEMATICS // report in cartesian
#define USE_MACHINE_INIT // There is some custom initialization for this machine
#define USE_CUSTOM_HOMING
如果您使用的是 midTbot 风格的机器,也请添加此行。
#define MIDTBOT // applies the geometry correction to the kinematics
CoreXY 协调 2 个电机以在 XY 方向上移动末端执行器。即使仅在 X 方向上移动也需要两个电机一起移动。这是通过一些运动方程实现的。在内部,Grbl_ESP32 将分辨率和方向等内容应用于各个电机。
如果需要纠正方向,您需要记住这一点。应遵循以下步骤以使方向正常工作。
完全构建 XY 组件。手动保持一个电机静止,用手顺时针转动另一个电机。找到同时将末端执行器沿正 X 方向和正 Y 方向移动的电机,同时另一个电机保持静止。该电机将连接到控制器上的 X 电机驱动器。另一个将连接到控制器上的 Y 电机。
下一步是检查电机是否朝正确的方向移动。使用?命令检查当前模式。如果处于警报模式,请发送$X将其清除。然后发送G91G0。这将使 Grbl 进入增量模式,因此很容易移动。发送$Stepper/DirInvert=以清除任何方向反转。
发送X5Y5。X 电机应顺时针旋转,末端执行器应沿正 X 和 Y 方向移动。如果需要,您可以多次执行此操作。如果它没有朝正确的方向移动,请发送$Stepper/DirInvert=X。这应该会反转 X 轴。通过再次发送 X5Y5进行测试。电机和轴不应朝正确的方向移动。
发送X5Y-5。 Y 电机应顺时针旋转。 如果它没有将 Y 轴添加到$Stepper/DirInvert= 。 因此,如果两者都需要反转,则为=XY ,或者仅更改 Y,则为=Y 。