我想让多个步进电机同时转动,用L298N驱动。
我的想法是在铣床上使用相对坐标,并在进行相对定位计算之前从输入坐标中分离出x,y,z值。
密码是
def coordinate(inputlist, d):
D = int(d)
l = ast.literal_eval(f"[{inputlist}]")#do not use "eval()" code
lx = [x for x,y,z in l]
ly = [y for x,y,z in l]
lz = [z for x,y,z in l]
x_value(lx, axisx, D)
y_value(ly, axisy, D)
z_value(lz, axisz, D)
def x_value(lx, axisx, D):
delay = D
stepper = axisx
x = lx
xv = []
for f in range(len(x)-1):
bx = x[f+1] - x[f]
xv.append(bx)
print(xv)
for steps in xv:
if (steps >=0):
forword(delay, steps, stepper)
elif (steps <=0):
backward(delay, steps, stepper)
def y_value(ly, axisy, D):
delay = D
stepper = axisy
y = ly
yv = []
for g in range(len(y)-1):
by = y[g+1] - y[g]
yv.append(by)
print(yv)
for steps in yv:
if (steps >=0):
forword(delay, steps, stepper)
elif (steps <=0):
backward(delay, steps, stepper)
def z_value(lz, axisz, D):
delay = D
stepper = axisz
z = lz
zv = []
for h in range(len(z)-1):
bz = z[h+1] - z[h]
zv.append(bz)
print(zv)
for steps in zv:
if (steps >=0):
forword(delay, steps, stepper)
elif (steps <=0):
backward(delay, steps, stepper)
def forword(delay, steps, stepper):
for i in range(steps):
for halfstep in range(8):
for pin in range(4):
GPIO.output(stepper[pin], seq[halfstep][pin])
time.sleep(int(delay) / 10000)
def backward(delay, steps, stepper):
seq.reverse()
for i in range(-int(steps)):
for halfstep in range(8):
for pin in range (4):
GPIO.output(stepper[pin], seq[halfstep][pin])
time.sleep(int(delay) / 10000)
seq.reverse()
try:
while True:
inputlist = input("Coordinate List (Unit is 10um, 1mm = 100 (10um)):")
d = input("speed of stepper(do not less then 7):")
coordinate(inputlist, d)
不管我怎么试,三个步进电机都是分开转的。
我想让步进电机同时转动,不管我用坐标形式输入什么值(x1,y1,z1),(x2,y2,z2)......,(xn,yn,锌)
您已经使用函数组织了您的代码。好。
然而,他们都通过半步迭代和调用来触底
time.sleep(int(delay) / 10_000)
这与您的设计目标不兼容。
你不能在那里睡觉。 为什么? 因为你还有其他盘子要保留 纺纱, 其他电机保持步进。
林空间 是一个非常简单的函数。 你不必直接调用它, 但你应该创建一个
list
或生成器来捕获它的作用。
我们需要为所有电机制定一个时间表。 选择一些方便的分辨率, 可能是 1 毫秒或 10 毫秒,并产生增量 x、y、z 数字 您希望从每个时间戳开始实现的目标。 当所有增量都为零时,您就完成了并且可以停止 发出时间表行,因为所有电机都已实现 想要的职位。
现在我们需要实施那个时间表。 遍历每个时间戳,然后遍历每个电机, 并根据需要发出半步命令。 这花了一点时间。 查看当前时间并休眠到下一个间隔。 起泡沫,冲洗,重复直到消耗所有计划行。