步進(jìn)電機(jī)是一種以離散步進(jìn)旋轉(zhuǎn)的無(wú)刷直流電機(jī),是許多精密運(yùn)動(dòng)控制應(yīng)用的最佳選擇。此外,步進(jìn)電機(jī)適用于定位、速度控制和需要在低速時(shí)需要高扭矩的應(yīng)用。
在MATLAB之前的教程中,我們已經(jīng)解釋了如何使用MATLAB來(lái)控制直流電機(jī),伺服電機(jī)和家用電器。今天我們將學(xué)習(xí)如何使用 MATALB 和 Arduino 控制步進(jìn)電機(jī)。
步進(jìn)電機(jī)的工作模式
在開(kāi)始對(duì)步進(jìn)電機(jī)進(jìn)行編碼之前,您應(yīng)該了解步進(jìn)電機(jī)的工作或旋轉(zhuǎn)概念。由于步進(jìn)模式的定子由不同的線圈對(duì)構(gòu)成,因此每個(gè)線圈對(duì)都可以以許多不同的方法激勵(lì),這使得模式可以在許多不同的模式下驅(qū)動(dòng)。以下是廣泛的分類
全步模式
在全步激勵(lì)模式下,我們可以以最少的匝數(shù)(步長(zhǎng))實(shí)現(xiàn)完整的 360° 旋轉(zhuǎn)。但這會(huì)導(dǎo)致慣性減少,并且旋轉(zhuǎn)也不會(huì)平穩(wěn)。全步激勵(lì)還有另外兩種分類,它們是相控波步進(jìn)和兩種相進(jìn)模式。
1. 單相步進(jìn)或波步進(jìn):在這種模式下,在任何給定時(shí)間,電機(jī)的一個(gè)端子(相位)將通電。這步數(shù)較少,因此可以實(shí)現(xiàn)完整的 360° 旋轉(zhuǎn)。由于步數(shù)較少,因此該方法消耗的電流也非常低。下表顯示了 4 相步進(jìn)電機(jī)的波形步進(jìn)順序
?
步 | 階段 1(藍(lán)色) | 第 2 階段(粉紅色) | 第 3 階段(黃色) | 第 4 階段(橙色) |
1 | 1 | 0 | 0 | 0 |
2 | 0 | 1 | 0 | 0 |
3 | 0 | 0 | 1 | 0 |
4 | 0 | 0 | 0 | 1 |
?
2.兩相步進(jìn):顧名思義,這種方法中兩個(gè)相將是一個(gè)。它具有與Wave步進(jìn)相同的步數(shù),但由于一次通電兩個(gè)線圈,因此與以前的方法相比,它可以提供更好的扭矩和速度。雖然一個(gè)缺點(diǎn)是這種方法也會(huì)消耗更多的功率。
?
步 | 階段 1(藍(lán)色) | 第 2 階段(粉紅色) | 第 3 階段(黃色) | 第 4 階段(橙色) |
1 | 1 | 1 | 0 | 0 |
2 | 0 | 1 | 1 | 0 |
3 | 0 | 0 | 1 | 1 |
4 | 1 | 0 | 0 | 1 |
?
半步模式
半步模式是單相開(kāi)啟和兩相開(kāi)啟模式的組合。這種組合將幫助我們克服上述兩種模式的缺點(diǎn)。
正如您可能已經(jīng)猜到的那樣,由于我們正在結(jié)合這兩種方法,因此我們必須在此方法中執(zhí)行8 個(gè)步驟才能獲得完整的旋轉(zhuǎn)。4相步進(jìn)電機(jī)的開(kāi)關(guān)順序如下所示
?
步 | 階段 1(藍(lán)色) | 第 2 階段(粉紅色) | 第 3 階段(黃色) | 第 4 階段(橙色) |
1 | 1 | 0 | 0 | 0 |
2 | 1 | 1 | 0 | 0 |
3 | 0 | 1 | 0 | 0 |
4 | 0 | 1 | 1 | 0 |
5 | 0 | 0 | 1 | 1 |
6 | 0 | 0 | 0 | 1 |
7 | 1 | 0 | 0 | 1 |
8 | 1 | 0 | 0 | 0 |
?
因此,您可以選擇在任何模式下對(duì)步進(jìn)電機(jī)進(jìn)行編程,但我更喜歡兩相步進(jìn)全步進(jìn)模式。由于這種方法比單相方法提供更快的速度,并且與半模式相比,由于兩相方法中的步驟數(shù)較少,編碼部分更少。
在此處了解有關(guān)步進(jìn)電機(jī)及其模式的更多信息
創(chuàng)建用于控制步進(jìn)電機(jī)的 MATLAB 圖形用戶界面
然后我們必須構(gòu)建GUI(圖形用戶界面)來(lái)控制步進(jìn)電機(jī)。要啟動(dòng) GUI,請(qǐng)?jiān)诿畲翱谥墟I入以下命令
guide
將打開(kāi)一個(gè)彈出窗口,然后選擇新的空白GUI,如下圖所示,
現(xiàn)在選擇兩個(gè)用于順時(shí)針和逆時(shí)針旋轉(zhuǎn)步進(jìn)電機(jī)的切換按鈕,如下所示,
要調(diào)整按鈕的大小或更改按鈕的形狀,只需單擊它,您就可以拖動(dòng)按鈕的角。通過(guò)雙擊切換按鈕,您可以更改該特定按鈕的顏色、字符串和標(biāo)簽。我們自定義了兩個(gè)按鈕,如下圖所示。
?
您可以根據(jù)自己的選擇自定義按鈕。
用于控制步進(jìn)電機(jī)的 MATLAB 代碼與 Arduino
用于控制步進(jìn)電機(jī)的完整MATLAB 代碼在本項(xiàng)目結(jié)束時(shí)給出。此外,我們?cè)诖颂幇珿UI文件(.fig)和代碼文件(.m)以供下載(右鍵單擊鏈接,然后選擇“將鏈接另存為...”)),您可以使用它們根據(jù)您的要求自定義按鈕。以下是我們使用兩個(gè)切換按鈕順時(shí)針和逆時(shí)針旋轉(zhuǎn)步進(jìn)電機(jī)所做的一些調(diào)整。
將以下代碼復(fù)制并粘貼到第 74 行,以確保每次運(yùn)行 m 文件時(shí) Arduino 都在與 MATLAB 通信。
clear all;
global a;
a = arduino();
向下滾動(dòng)時(shí),您將看到為 GUI 中的兩個(gè)按鈕創(chuàng)建了兩個(gè)函數(shù)?,F(xiàn)在,根據(jù)要在單擊時(shí)執(zhí)行的任務(wù)在兩個(gè)函數(shù)中編寫(xiě)代碼。
在順時(shí)針按鈕的函數(shù)中,在函數(shù)結(jié)束之前復(fù)制并粘貼以下代碼,以順時(shí)針?lè)较蛐D(zhuǎn)電機(jī)。為了沿順時(shí)針?lè)较蜻B續(xù)旋轉(zhuǎn)步進(jìn)電機(jī),我們使用while回路重復(fù)順時(shí)針?lè)较虻膬蓚€(gè)相位步進(jìn)全模式步驟。
while get(hObject,'Value')
global a;
writeDigitalPin(a, 'D9', 0);
writeDigitalPin(a, 'D10', 0);
writeDigitalPin(a, 'D11', 1);
pause(0.0002);
writeDigitalPin(a, 'D8', 0);
writeDigitalPin(a, 'D9', 0);
writeDigitalPin(a, 'D10', 1);
writeDigitalPin(a, 'D11', 1);
pause(0.0002);
writeDigitalPin(a, 'D8', 0);
writeDigitalPin(a, 'D9', 1);
writeDigitalPin(a, 'D10', 1);
writeDigitalPin(a, 'D11', 0);
pause(0.0002);
writeDigitalPin(a, 'D8', 1);
writeDigitalPin(a, 'D9', 1);
writeDigitalPin(a, 'D10', 0);
writeDigitalPin(a, 'D11', 0);
pause(0.0002);
end
現(xiàn)在,在逆時(shí)針按鈕的功能中,將以下代碼粘貼到函數(shù)的處,以逆時(shí)針?lè)较蛐D(zhuǎn)電機(jī)。為了沿逆時(shí)針?lè)较蜻B續(xù)旋轉(zhuǎn)步進(jìn)電機(jī),我們使用 while 回路重復(fù)逆時(shí)針?lè)较虻膬蓚€(gè)相位步進(jìn)全模式步驟。
while get(hObject,'Value')
global a;
writeDigitalPin(a, 'D8', 1);
writeDigitalPin(a, 'D9', 1);
writeDigitalPin(a, 'D10', 0);
writeDigitalPin(a, 'D11', 0);
pause(0.0002);
writeDigitalPin(a, 'D8', 0);
writeDigitalPin(a, 'D9', 1);
writeDigitalPin(a, 'D10', 1);
writeDigitalPin(a, 'D11', 0);
pause(0.0002);
writeDigitalPin(a, 'D8', 0);
writeDigitalPin(a, 'D9', 0);
writeDigitalPin(a, 'D10', 1);
writeDigitalPin(a, 'D11', 1);
pause(0.0002);
writeDigitalPin(a, 'D8', 1);
writeDigitalPin(a, 'D9', 0);
writeDigitalPin(a, 'D10', 0);
writeDigitalPin(a, 'D11', 1);
pause(0.0002);
end
所需材料
MATLAB 安裝筆記本電腦(偏好:R2016a 或更高版本)
Arduino UNO
步進(jìn)電機(jī) (28BYJ-48, 5VDC)
ULN2003 - 步進(jìn)電機(jī)驅(qū)動(dòng)器
電路圖
?
使用 MATLAB 控制步進(jìn)電機(jī)
根據(jù)電路圖設(shè)置硬件后,只需單擊運(yùn)行按鈕即可在.m文件中運(yùn)行編輯后的代碼
MATLAB 可能需要幾秒鐘才能響應(yīng),在 MATLAB 在左下角顯示忙消息之前不要單擊任何 GUI 按鈕,如下所示,
一切準(zhǔn)備就緒后,單擊順時(shí)針或逆時(shí)針按鈕以旋轉(zhuǎn)電機(jī)。當(dāng)我們使用撥動(dòng)按鈕時(shí),步進(jìn)電機(jī)將不斷沿順時(shí)針?lè)较蛞苿?dòng),直到我們?cè)俅伟聪掳粹o。同樣,通過(guò)按下逆時(shí)針切換按鈕,電機(jī)開(kāi)始逆時(shí)針?lè)较蛐D(zhuǎn),直到我們?cè)俅伟聪掳粹o。
評(píng)論
查看更多