簡體   English   中英

步進電機線性加速度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM