2012-10-01 49 views
0

我如何知道哪一個直接轉彎需要以最短的方式達到新的設定點?車削方向

我有一塊控制steppermotor的Arduino代碼。使用編碼器,我將steppermotor的位置設置爲0..2048。

現在我有一個設定值200,我將移動到200,這應該是順時針。現在我在200點,我想去點2000,這應該發生逆時針,因爲這是最短的路。

如何有效計算我應該轉向哪個方向?

+0

[你有什麼試過?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+0

你究竟是什麼意思? –

回答

3

試試這個:

delta = (setpoint << 5) - (current_position << 5); 
delta = delta >> 5; 

這是假設所有的變量都簽署了16位。你的步進器在2048有一個「翻轉」的計數,它與處理器的數學運算方式相似但不同。通過左移五位,您可以用CPU翻轉來排列步進器翻轉,並且一切正常。通過改變結果,您可以獲得移動步進器所需的計數次數 - 在一個有符號的值中,正向是一種方式,反之則是負向。

+0

我喜歡這個解決方案,它優雅而快速! – YesMan85

1

減去新的設定值。

如果差的絕對值大於1024,那麼你就加上或減去2048的倍數這樣的結果是絕對值在1024

這樣做之後無大的,如果的結果以上計算是正數,然後按順時針方向移動該數量。如果結果爲負數,則逆時針移動該數量的絕對值。