python 加速度_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代码.

如果有人可以帮助我,我会非常感激,我认为这对于一般在Raspberry Pi上使用Steppers的人来说非常有用(我只找到了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

因为延迟周期是恒定的,所以它还意味着循环本身的开销更接近于该延迟的恒定%增量,而不是随着延迟的缩小而增长.这让事情变得更加顺畅.

我没有测试过这个,但它应该接近正确….希望它有所帮助!

史蒂夫

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值