我正在开发一个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>
答案 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