计算笔式绘图仪 x 和 y 速度的方程式,以确保笔速恒定

Equation to calculate x and y speed for pen plotter to ensure constant pen speed

我正在编写软件来控制笔式绘图仪,我希望我的笔以特定速度移动。我有两台电机,一台用于 x,一台用于 y。我需要知道 运行 每个笔的移动速度值。这取决于 x 和 y 的变化量。我有能力 运行 这些电机的距离和速度。

我想告诉我的绘图仪以每秒 100 个单位的速度将笔从点 a (x1,y1) 移动到点 b (x2,y2)。我无法弄清楚如何计算每秒移动多少个单位来移动 x 和 y 电机以达到所需的笔速度,因为笔将以一定角度移动。这比我想象的要难得多。

我正在使用的代码

常量

PEN_VIRTUAL_COORDINATES_PER_SECOND = 7
MOTOR_UNITS_PER_VIRTUAL_COORDINATE_X = 3
MOTOR_UNITS_PER_VIRTUAL_COORDINATE_Y = 6

整数变量。这是笔每一步需要移动多少个虚拟坐标

delta_x
delta_y

电机控制接口
position 是移动的电机单位距离
速度是每秒的电机单位

x_axis_motor.run_to_rel_pos(speed=, position=delta_y*MOTOR_UNITS_PER_VIRTUAL_COORDINATE_Y)

我卡住的是计算"speed"

好吧,随着您使用过的 API 的更新,我是这样看的。你得到了想要的速度 v [mm/s] 和增量 dx,dy [mm] 移动和步长 mx,my [mm/step] 然后:

所以我们知道:

a=atan2(dy,dx);
vx=abs(v*cos(a)/mx);
vy=abs(v*sin(a)/my);

其中 vx,vy [step/s] 是电机的单独速度,[step/s][Hz] 中的频率相同。它只是一个毕达哥拉斯三角形,其中 x,y 轴和整个速度 v 之间的 [mm/s] 速度比与三角形长度相同,因此 sin,cos以同样的方式应用到他们身上。我刚刚添加了转换 [mm/s] -> [step/s] = [Hz]。我也 abs 结果,因为你的增量已经有迹象......出于同样的原因,你也可以使用 atan 而不是 atan2

a=atan(dy/dx);

但不要忘记处理 dx 接近 zero 的边缘情况!!!

如果你的步长是倒置的 [step/mm] 那么你只需乘以而不是除以它们。

此外,如果您没有随手可得的测角仪或者您不想使用它,您也可以使用三角形相似度:

l = sqrt( dx^2 + dy^2 )
sin(a) = dy/l
cos(a) = dx/l

所以:

vx=abs((v*dx)/(l*mx));
vy=abs((v*dy)/(l*my));

这也可以在整数上计算,并且计算起来也应该更快更精确......再次注意除以零(点而不是线)在这种情况下只需设置速度(l==0)两个轴都为零。