步进电机线性加速度



我正在编写一个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=应进行加速的步数

问题是,速度以每秒步数而不是每秒步数的方式增加,因此是指数增加而不是线性增加。我发现这篇文章用数学术语解释了如何用步进电机实现线性增长,但我还没有把它翻译成我的Python代码。

如果有人能帮我,我将不胜感激,我认为这对在树莓派上使用Steppers的人来说非常有用(我在这里只找到了Arduino的解决方案)

一个简单的(尽管是近似的)方法是让它按时间而不是按步骤运行。因此,time.sleep()周期是恒定的,您可以跟踪当前的速度以及下一步的时间。只要时间.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

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

我还没有测试过这个,但应该是接近正确的。。。。希望它能有所帮助!

-steve

相关内容

  • 没有找到相关文章

最新更新