2016-04-28 812 views
0

我想用ArduinoMega 2560(R3)控制24V NEMA23步進電機。
我正在使用ST-M5045驅動程序。Arduino步進庫工作/ AccelStepper不工作

當我使用默認的Arduino步進庫時,電機運行良好。

我正在使用引腳31的步驟和引腳30的方向。

我的代碼如下所示:

#include <Stepper.h> 

const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution 

void setup() { 
    pinMode(30,OUTPUT); 
    pinMode(31,OUTPUT); 
    digitalWrite(30,LOW); 
    digitalWrite(31,LOW); 
} 

void loop() { 
    digitalWrite(31,HIGH); 
    digitalWrite(31,LOW); 
} 

現在,我想要操作使用AccelStepper相同的電機,但不能得到任何迴應。

我的代碼看起來謊言:

#include <AccelStepper.h> 

AccelStepper stepper3(1, 31, 30); 

void setup() 
{ 
    stepper3.setMaxSpeed(400.0); 
    stepper3.setAcceleration(100.0); 
    stepper3.moveTo(100000); 
} 

void loop() 
{ 
    stepper3.run(); 
} 

爲什麼這是行不通的任何想法? 我已經嘗試了幾個變化,沒有運氣。

在此先感謝您的幫助。

問候, 詹姆斯

+1

你試過[恆速示例](http://www.airspayce。 com/mikem/arduino/AccelStepper/ConstantSpeed_8pde-example.html)的庫?當然你應該使用你的步進驅動器的定義.. – frarugi87

+0

我也試過,以及包括變體,我把1,2和4作爲AccelStepper定義的第一個參數。 – user1805103

+0

呃,不,如果你有一個帶有「STEP」和「DIR」輸入的步進驅動器,'AccelStepper stepper3(1,31,30);應該保持這種方式......所以它適用於你的原始代碼,但不適用於這個例子?你讓它跑了很多時間嗎?因爲你的電機似乎很慢(在你的代碼中你每秒發送大約1M步),所以也許它只是慢慢地移動...... – frarugi87

回答

2

一些測試後,它看起來像這個問題只是速度。

原始代碼(帶手動引腳移動的代碼)爲這些步驟生成了一個非常高的頻率時鐘(我認爲接近1MHz)。

因此,當使用400步/秒的最大速度時,用戶可以認爲電機停止。實際上,電機旋轉速度太慢。

爲了確保電機正常工作,檢查控制器上的腳踏是否脈動就足夠了。或者,只需提高速度即可看到電機實際旋轉。

但是有一點要說。所有這些步驟是否真的有必要?我的意思是,如果電機真的轉得很慢,可能是因爲您將驅動器設置爲微步模式(每步可能爲32或64個脈衝)。如果是這種情況,也許你應該降低這個,除非你真的需要非常精確的動作(但是你將不得不犧牲速度)

+1

再次,很好的評論。我可能有微步開關設置不正確。看着它,我現在設置爲需要25600步/轉。這太高了。如果它被設置爲一個更合理的數字(比如3200),原始代碼就可以工作。再次感謝。 – user1805103

+0

我可以要求跟進嗎?你如何計算應該在AccelStepper中指定的速度?我使用的電機說它使用200步/轉。此外,我已經將ST-M5045設置爲6400脈衝/轉,我認爲這對應於32個微步。當我使用我的非AccellStepper代碼時,電機會一起撕裂。當我使用我的AccelStepper代碼時,它的移動速度可能是速度的1/4或更慢。例如,使用Random示例代碼並將20000作爲基礎使用,它仍然非常慢。我該如何提高速度?謝謝 – user1805103

+0

@ user1805103好吧,我認爲設置20000個脈衝/秒意味着它將每秒鐘轉動大約3次。如果速度較慢,也許微控制器速度不夠快,所以你不能那麼快。如果是這種情況,不幸的是,除了選擇另一塊電路板,或者更好的是,將控制器板設置爲更少的步數/轉(畢竟6400個脈衝/轉真的很高)之外沒有任何解決方案 – frarugi87