Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 步进电机直线加速度_Python_Raspberry Pi_Motordriver - Fatal编程技术网

Python 步进电机直线加速度

Python 步进电机直线加速度,python,raspberry-pi,motordriver,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) 范围

我正在编写一个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的
(步数):
如果s
s\u per\u s
=每个步骤之间的时间

astart
=以秒/步为单位的起动速度(例如0.5)

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

加速步骤
=加速应该发生的步骤数

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

如果有人能帮助我,我将不胜感激。我认为这对一般使用覆盆子Pi上的步进器的人来说是非常有用的(我只为Arduino找到了一个解决方案)

一个简单(虽然是近似的)方法是让它按时间运行,而不是按步骤运行。因此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
accel=20.0#步数/秒/秒
经过的时间=0.000
步骤完成=0
电流速度=0步/秒
下一步的时间=0.0
同时(完成步骤<需要步骤):
如果(经过的时间>=下一步的时间):
self.oneStep(方向、步骤样式)
步骤u完成+=1
下一步的时间=通过时间+1.0/当前速度
时间。睡眠(1);#我想是1毫秒吧
通过的时间+=0.001
电流速度+=加速度/1000.0
因为延迟周期是恒定的,这也意味着循环本身的开销更接近于该延迟的恒定%增量,而不是随着延迟的减小而增加。这让事情变得更顺利

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


-史蒂夫

哎呀,我忘了增加已完成的步骤,这将使这项工作需要花费太长时间才能完成…:(嗨,非常感谢,我将对此进行一些尝试。我认为这绝对是朝着正确的方向迈出的一步。我确实认为,随着加速度改变了总持续时间,我需要猜测加速度需要多长时间,但我希望能够预测到这一点。在我的旧公式中,我可以说,加速超过20次0(总)步数(=总步数的20%)。现在我猜x秒应该足够快了。这一点很好。您可以通过实际安装的电机(当然这取决于许多物理变量)非常可靠地进行测量。顺便说一句,如果有兴趣,请查看stackExchange for 3d打印,它正试图从