我想让多个步进电机同时转动,用L298N驱动器.

我的 idea 是在铣床上使用相对坐标,在进行相对定位计算之前,从输入坐标中分离出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,zn)

推荐答案

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

但是,它们都是通过半步迭代和调用

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

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

你不能睡在那里. 为什么? 因为你还有其他车牌要保留 spinning, 其他马达继续前进.


linspace个 是一个非常简单的函数. 你不必直接打给它, 但您应该创建一个list或生成器来捕获它所做的事情.

我们需要在所有马达上生产schedule马力. Select 一些方便的解决方案, 可能是1毫秒或10毫秒,并产生增量x,y,z图 您希望在每个时间戳开始时实现的目标. 当所有的增量都为零时,您就可以停止了 emits 计划行,正如所有电机都已实现的那样 想要的位置.

现在我们需要把这个时间表改到implement%. 逐个判断每个时间戳,然后判断每个马达, 并根据需要发出HalfStep命令. 这需要一段时间才能做到. 参考当前时间,睡眠至下一时间间隔. 起泡,冲洗,重复,直到所有明细表行都用完为止.

我们在这里取得了什么成就? 我们把睡眠()调高了一个级别, 所以它并不是特定马达所特有的. 如果需要,我们会命令一台或多台马达减速, 然后暂停,当他们all人这样做时, 然后再循环一次,看看是否还有 仍需发布的命令.

Python相关问答推荐

优化在numpy数组中非零值周围创建缓冲区的函数的性能

使用polars .滤镜进行切片速度比pandas .loc慢

仅从风格中获取 colored颜色 循环

线性模型PanelOLS和statmodels OLS之间的区别

运行回文查找器代码时发生错误:[类型错误:builtin_index_or_system对象不可订阅]

Select 用a和i标签包裹的复选框?

如何过滤包含2个指定子字符串的收件箱列名?

在极性中创建条件累积和

部分视图的DataFrame

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

巨 Python :逆向猜谜游戏

如何在Python Pandas中填充外部连接后的列中填充DDL值

Python 3试图访问在线程调用中实例化的类的对象

如何合并具有相同元素的 torch 矩阵的行?

有没有办法在不先将文件写入内存的情况下做到这一点?

如何在Airflow执行日期中保留日期并将时间转换为00:00

如何使用加速广播主进程张量?

我怎么才能用拉夫分拣呢?

在matplotlib中重叠极 map 以创建径向龙卷风图

按条件计算将记录拆分成两条记录