[英]Stepper motor linear acceleration
我正在開發一個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代碼。
我將十分感謝,如果有人可以幫助我這個,我認為這將是一個使用的樹莓派一般人踏步機非常有用的(我只找到了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
因為延遲周期是恆定的,所以它還意味着環路本身的開銷更接近於該延遲的恆定%增量,而不是隨着延遲的縮小而增長。 這讓事情變得更加順暢。
我沒有測試過這個,但它應該接近正確....希望它有所幫助!
史蒂夫
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.