如何将列表中的坐标同时传递给多个步进电机,而不是按顺序?

问题描述 投票:0回答:1

我想让多个步进电机同时转动,用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,锌)

python python-3.x iteration
1个回答
1
投票

您已经使用函数组织了您的代码。好。

然而,他们都通过半步迭代和调用来触底

            time.sleep(int(delay) / 10_000)

这与您的设计目标不兼容。

你不能在那里睡觉。 为什么? 因为你还有其他盘子要保留 纺纱, 其他电机保持步进。


林空间 是一个非常简单的函数。 你不必直接调用它, 但你应该创建一个

list
或生成器来捕获它的作用。

我们需要为所有电机制定一个时间表。 选择一些方便的分辨率, 可能是 1 毫秒或 10 毫秒,并产生增量 x、y、z 数字 您希望从每个时间戳开始实现的目标。 当所有增量都为零时,您就完成了并且可以停止 发出时间表行,因为所有电机都已实现 想要的职位。

现在我们需要实施那个时间表。 遍历每个时间戳,然后遍历每个电机, 并根据需要发出半步命令。 这花了一点时间。 查看当前时间并休眠到下一个间隔。 起泡沫,冲洗,重复直到消耗所有计划行。

© www.soinside.com 2019 - 2024. All rights reserved.