我正在编写一个 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
= 加速应该发生的步数问题是速度以每秒 step 而不是 step per second per second 的方式增加,因此以指数方式增加而不是线性增加。我发现 this 文章用数学术语解释了如何使用步进电机实现线性增长,但我还没有设法将其转换为我的 Python 代码。
如果有人可以帮助我,我将不胜感激,我认为这对于在 Raspberry Pi 上使用步进器的人来说非常有用(我只找到了 Arduino here 的解决方案)
最佳答案
一种简单(虽然近似)的方法是让它按时间运行,而不是按步骤运行。因此 time.sleep() 时间段保持不变,您可以跟踪当前速度以及下一次踏步的时间。只要 time.sleep() 周期明显小于执行一步的时间,您将获得相当平滑的加速。
有点像:
accel = 20.0 # steps/sec/sec
time_passed = 0.000
steps_done = 0
cur_speed = 0 # steps/sec
time_for_next_step = 0.0
while (steps_done < steps_needed):
if (time_passed >= time_for_next_step):
self.oneStep(direction, stepstyle)
steps_done += 1
time_for_next_step = time_passed + 1.0/cur_speed
time.sleep(1); # 1 millisecond, I assume
time_passed += 0.001
cur_speed += accel/1000.0
因为延迟周期是恒定的,这也意味着循环本身的开销更接近于该延迟的恒定百分比增量,而不是随着延迟的缩小而增长。这让事情变得更顺利。
我还没有测试过这个,但它应该接近正确......希望它有帮助!
-史蒂夫
关于python - 步进电机线性加速度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34319469/