步进电机直线加速度

2024-10-02 16:31:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个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代码。在

如果有人能帮助我,我将非常感谢,我认为这将是非常有用的人使用步进机在覆盆子Pi(我只找到了一个解决方案的阿尔杜诺here


Tags: 代码inforifrange线性steps速度
1条回答
网友
1楼 · 发布于 2024-10-02 16:31:39

一个简单的(虽然是近似的)方法是让它按时间运行,而不是按步骤运行。所以时间。睡觉()周期变为常数,您可以跟踪当前速度和下一步的时间。只要时间。睡觉()周期明显少于做一步的时间,你会得到相当平稳的加速。在

有点像:

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

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

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

-史蒂夫

相关问题 更多 >