嗨,您應該是使用常見的小型驅動模塊比較方便,有以下優點
1、適合驅動 3~35V, 2A 以下的步進馬達;
2、只有簡單的步進和方向控制接口;
3、五個不同的步進模式:全、半、1/4、1/8 和 1/16;
4、可變電阻可調節最大電流輸出,從而獲得更高的步進率;
5、自動電流衰減模式檢測/選擇;
6、過熱關閉電路、欠壓鎖定、交叉電流保護;
7、接地短路保護和加載短路保護
原理圖
但您使用A4988最重要的就是電流調控了,沒調控好可能會燒壞A4988或者輸出電流不穩定,以下是調控方法:
微調電位器(可變電阻)有三個引腳 : 使用三用電表檢測朝向 A4988 晶片的引腳其電壓則為 Vref,可透過微型電位器(可變電阻)調節電流大小,順時針旋轉是增大電流,逆時針則是減小電流量。
公式為
最大電流為 2A 的板子 i = vref /0.8
接線圖
1A, 1B 接一組,2A, 2B 接另一組,一般 1a 2a 都是連接正極,1b 2b 都是連接負極,因為步進馬達各家廠牌規格不盡相同,最好是在接好線之後試跑一下看方向是否正確,假如不對的話,就正負端對調換一下。
步進模式選擇如下圖表格
在電源供電方面, 器件(晶片)邏輯電壓 VDD 和 GND 配接 Arduino 的 +5V 電源端,而步進馬達電源 VMOT 和 GND 則會需要另外配接 DC 8~15V; 另外還有關於三個模式選擇端 MS1、MS2、MS3 全部接地就是全步進模式(轉一圈要200個步進值或一個步進 1.8°),如果要求更高的精度,可通過選擇其他的模式,例如如果選擇 1/4 步進模式,那麼當馬達轉一圈就要送 800個 微步才能完成。
以上都設定準備好了以後,以下是測試的Code
int dirPin = 8; int stepperPin = 7; void setup() { pinMode(dirPin, OUTPUT); pinMode(stepperPin, OUTPUT); } void step(boolean dir,int steps) { digitalWrite(dirPin,dir); delay(50); for(int i=0;i
另外根據您的需求,要串口控制,則需要使用到
String data=Serial.readString();然後根據您的需求列舉出當該字串時要做什麼工作
if(data.compareTo("CLOCKWISE")==0) //順時鐘方向 ... else if(data.compareTo("COUNTERCLOCKWISE")==0) //逆時鐘方向 ... else if(data.compareTo("SPEEDUP")==0) //加速 ... else if(data.compareTo("SPEEDDOWN")==0) //減速 ... 具體實現內容就看您的需求囉,這邊只給出框架
再來是如果只是要顯示在電腦上而非LCD,直接輸出到Seiral即可,用Serial Monitor即可觀看,根據輸入結果方向就已知了,轉了多少,因為步進馬達內部沒有內置霍爾感測,所以您必須在馬達旁架上霍爾感測器,轉軸上或者輪上貼上永久磁鐵,才能進行計數,也很簡單
volatile unsigned int half_revolutions=0; void setup() { attachInterrupt(0, motor, RISING); //霍爾感測到磁場變化,輸出高電位,產生上升沿,使用D2腳位 } void loop() { Serial.println(half_revolutions); } void motor() { half_revolutions++; } 以上採用中斷方式,偵測上升沿,就能輸出轉了多少了,方向可自己再加上去,您先參考這篇思路來做會簡單許多
嗨,您應該是使用常見的小型驅動模塊比較方便,有以下優點
1、適合驅動 3~35V, 2A 以下的步進馬達;
2、只有簡單的步進和方向控制接口;
3、五個不同的步進模式:全、半、1/4、1/8 和 1/16;
4、可變電阻可調節最大電流輸出,從而獲得更高的步進率;
5、自動電流衰減模式檢測/選擇;
6、過熱關閉電路、欠壓鎖定、交叉電流保護;
7、接地短路保護和加載短路保護
原理圖
但您使用A4988最重要的就是電流調控了,沒調控好可能會燒壞A4988或者輸出電流不穩定,以下是調控方法:
微調電位器(可變電阻)有三個引腳 : 使用三用電表檢測朝向 A4988 晶片的引腳其電壓則為 Vref,可透過微型電位器(可變電阻)調節電流大小,順時針旋轉是增大電流,逆時針則是減小電流量。
公式為
最大電流為 2A 的板子 i = vref /0.8
接線圖
1A, 1B 接一組,2A, 2B 接另一組,一般 1a 2a 都是連接正極,1b 2b 都是連接負極,因為步進馬達各家廠牌規格不盡相同,最好是在接好線之後試跑一下看方向是否正確,假如不對的話,就正負端對調換一下。
步進模式選擇如下圖表格
在電源供電方面, 器件(晶片)邏輯電壓 VDD 和 GND 配接 Arduino 的 +5V 電源端,而步進馬達電源 VMOT 和 GND 則會需要另外配接 DC 8~15V; 另外還有關於三個模式選擇端 MS1、MS2、MS3 全部接地就是全步進模式(轉一圈要200個步進值或一個步進 1.8°),如果要求更高的精度,可通過選擇其他的模式,例如如果選擇 1/4 步進模式,那麼當馬達轉一圈就要送 800個 微步才能完成。
以上都設定準備好了以後,以下是測試的Code
int dirPin = 8; int stepperPin = 7; void setup() { pinMode(dirPin, OUTPUT); pinMode(stepperPin, OUTPUT); } void step(boolean dir,int steps) { digitalWrite(dirPin,dir); delay(50); for(int i=0;i
另外根據您的需求,要串口控制,則需要使用到
String data=Serial.readString();然後根據您的需求列舉出當該字串時要做什麼工作
if(data.compareTo("CLOCKWISE")==0) //順時鐘方向 ... else if(data.compareTo("COUNTERCLOCKWISE")==0) //逆時鐘方向 ... else if(data.compareTo("SPEEDUP")==0) //加速 ... else if(data.compareTo("SPEEDDOWN")==0) //減速 ... 具體實現內容就看您的需求囉,這邊只給出框架
再來是如果只是要顯示在電腦上而非LCD,直接輸出到Seiral即可,用Serial Monitor即可觀看,根據輸入結果方向就已知了,轉了多少,因為步進馬達內部沒有內置霍爾感測,所以您必須在馬達旁架上霍爾感測器,轉軸上或者輪上貼上永久磁鐵,才能進行計數,也很簡單
volatile unsigned int half_revolutions=0; void setup() { attachInterrupt(0, motor, RISING); //霍爾感測到磁場變化,輸出高電位,產生上升沿,使用D2腳位 } void loop() { Serial.println(half_revolutions); } void motor() { half_revolutions++; } 以上採用中斷方式,偵測上升沿,就能輸出轉了多少了,方向可自己再加上去,您先參考這篇思路來做會簡單許多
举报