步进电机线性加速度

时间:2015-12-16 18:27:50

标签: python raspberry-pi motordriver

我正在开发一个Python代码(下面),它可以加速步进电机直到达到特定的步数。

for s in range (steps):
    if s < accelerationsteps:
        lateststep = self.oneStep(direction, stepstyle)
        time.sleep(s_per_s)
        s_per_s = s_per_s - ((astart - aend) / accelerationsteps)

s_per_s =每个步骤之间的时间

astart =以秒/步开始的速度(例如0.5)

aend =加速应该停止的速度(例如0.05)

accelerationsteps =加速应该发生的步数

问题在于速度以每秒步骤步长而非每秒每秒步长增加,因此以指数方式而非线性方式增加。我发现this文章用数学术语解释了如何使用步进电机实现线性增加,但我还没有设法将其转换为我的Python代码。

如果有人可以帮助我,我会非常感激,我认为这对于一般在Raspberry Pi上使用Steppers的人来说非常有用(我只找到了Arduino的解决方案here)< / p>

1 个答案:

答案 0 :(得分:2)

一种简单(尽管近似)的方式是让它全部按时间运行,而不是按步骤运行。因此time.sleep()周期变得不变,并且您可以跟踪当前的速度以及接下来的时间。只要time.sleep()周期明显小于一步的时间,你就可以获得相当平稳的加速度。

有点像:

A=fscanf(fid,'%[^\n] *\n')
B=sscanf(A,'%c ')
Z=fscanf(fid,'%[^\n] *\n')
C=sscanf(Z,'%d')
....

因为延迟周期是恒定的,所以它也意味着循环本身的开销更接近于该延迟的恒定%增量,而不是随着延迟的缩小而增长。这让事情变得更加顺畅。

我还没有对此进行测试,但它应该接近正确....希望它有所帮助!

-Steve