在本文中,我們將學(xué)習(xí)如何使用A4988步進(jìn)電機(jī)驅(qū)動(dòng)模塊來(lái)控制步進(jìn)電機(jī)。A4988是控制雙極步進(jìn)電機(jī)的驅(qū)動(dòng)模塊,因?yàn)樗浅1阋送瑫r(shí)便于操作,因此在很多Arduino制作項(xiàng)目中A4988得到了廣泛的應(yīng)用。
因?yàn)锳4988內(nèi)置了譯碼器,我們可以可以通過(guò)控制器的2個(gè)引腳來(lái)控制步進(jìn)電機(jī),一個(gè)控制旋轉(zhuǎn)方向,另一個(gè)控制步數(shù)。A4988提供了五種不同的微步控制:全步(full-step),半步(haft-step),四分一步(quarter-step),八分之一步(eight-step)和十六分之一步(sixteenth-step)。此外,它還配備了一個(gè)調(diào)節(jié)電流輸出、過(guò)熱保護(hù)和過(guò)流保護(hù)的電位計(jì)。A4988的邏輯電壓范圍是:3~5.5V,如果配備較好的散熱條件每相最大電流可達(dá)2A,在沒(méi)有配備散熱器的情況下,每相連續(xù)電流最好控制在1A范圍內(nèi)。
A4988驅(qū)動(dòng)模塊的引腳定義圖
現(xiàn)在,讓我們看一下A4988的引腳圖,然后將其與步進(jìn)電機(jī)和Arduino控制器連接起來(lái)。A4988驅(qū)動(dòng)模塊右上側(cè)的兩個(gè)引腳(VMOT、GND)是外部供電引腳,目的是能給電機(jī)提供足夠的動(dòng)力輸出,供電范圍:8-35V,此處使用一個(gè)47uf的電解電容來(lái)保護(hù)驅(qū)動(dòng)板免受瞬時(shí)電壓的沖擊;右下側(cè)的VDD和GND我們需要將它連接到Arduino控制板的5V電源和GND引腳上;1A和1B引腳連接到步進(jìn)電機(jī)的一相,2A和2B引腳連接到步進(jìn)電機(jī)的另一相;左下角的STEP和DIR連接至Arduino控制板的P3和P4引腳,這兩個(gè)針腳主要用于控制電機(jī)的運(yùn)動(dòng)。Direction引腳控制轉(zhuǎn)動(dòng)方向,STEP針腳用于控制電機(jī)旋轉(zhuǎn)的步數(shù)控制。
下一個(gè)是SLEEP針腳,低電平使能使模塊處于休眠模式,當(dāng)電機(jī)不工作時(shí),它可以最大程度地降低功耗,默認(rèn)為高電平。RESET針腳,如果這個(gè)針腳的輸入是低電平,那么所有的微步設(shè)置都將被忽略掉。因此上圖將SLEEP和RESET針腳連接起來(lái),目的是將RESET針腳設(shè)置為高電平,以便模塊可控。
MS1, MS2 和 MS3針腳用于微步設(shè)置,如上圖所示。ENABLE針腳用于打開(kāi)和關(guān)閉場(chǎng)效應(yīng)管的輸出,低電平打開(kāi),高電平關(guān)閉。
完成本例的費(fèi)用測(cè)算
- Arduino Mega
- A4988驅(qū)動(dòng)板
- NEMA17步進(jìn)電機(jī)
- 12V2A電源
- 面包板
Arduino使用A4988控制電機(jī)代碼
const int stepPin = 3;
const int dirPin = 4;
void setup() {
// Sets the two pins as Outputs
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
}
void loop() {
digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
// Makes 200 pulses for making one full cycle rotation
for(int x = 0; x < 200; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
delay(1000); // One second delay
digitalWrite(dirPin,LOW); //Changes the rotations direction
// Makes 400 pulses for making two full cycle rotation
for(int x = 0; x < 400; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
delay(1000);
} |