步進(jìn)電機(jī)是一種無(wú)刷直流電機(jī),可以分步旋轉(zhuǎn),是許多精密運(yùn)動(dòng)控制應(yīng)用的最佳選擇。此外,步進(jìn)電機(jī)適用于定位、速度控制和低速需要大扭矩的應(yīng)用。
在之前的MATLAB教程中,我們已經(jīng)介紹了如何使用MATLAB來(lái)控制直流電機(jī)、伺服電機(jī)和家用電器。今天我們將學(xué)習(xí)如何使用MATALB和Arduino開(kāi)發(fā)板控制步進(jìn)電機(jī)。如果您是MATLAB的新手,那么建議您先學(xué)習(xí)使用MATLAB開(kāi)始簡(jiǎn)單的LED閃爍程序。
步進(jìn)電機(jī)的工作模式
在開(kāi)始步進(jìn)電機(jī)的相關(guān)代碼之前,您應(yīng)該了解步進(jìn)電機(jī)的工作或旋轉(zhuǎn)概念。由于步進(jìn)模式的定子由不同的線圈對(duì)構(gòu)成,因此每個(gè)線圈對(duì)可以以許多不同的方法激勵(lì),這使得模式能夠以許多不同的模式驅(qū)動(dòng)。以下是相對(duì)寬泛的分類:
●??全步模式(Full Step)
在全步激勵(lì)模式下,我們可以以最小的匝數(shù)(步長(zhǎng))實(shí)現(xiàn)完整的360°旋轉(zhuǎn)。但這會(huì)導(dǎo)致慣性減小,旋轉(zhuǎn)也不會(huì)平滑。在全步激勵(lì)中還有兩個(gè)分類,它們是一個(gè)相位接通方波步進(jìn)和兩個(gè)相位接通方波步進(jìn)模式。

1.? ? 一個(gè)相位步進(jìn)或波形步進(jìn):在此模式下,只有電機(jī)的一個(gè)端子(相位)將在任何給定時(shí)間通電。這具有較少的步數(shù),因此可以實(shí)現(xiàn)完整的360°旋轉(zhuǎn)。由于步數(shù)較少,因此該方法消耗的電流也非常低。下表顯示了4相步進(jìn)電機(jī)的波形步進(jìn)順序
| 步數(shù) | 相位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è)步數(shù)。它具有與波形步進(jìn)相同的步數(shù),但由于一次有兩個(gè)線圈通電,因此與先前的方法相比可以提供更好的扭矩和速度。但是一個(gè)缺點(diǎn)是這種方法也消耗更多的功耗。
| 步數(shù) | 相位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 |
●??半步模式
半步模式是一個(gè)相位接通模式和兩個(gè)相位接通模式的組合。這種組合將幫助我們克服兩種模式的上述缺點(diǎn)。
正如您可能已經(jīng)猜到的那樣,因?yàn)槲覀儗煞N方法結(jié)合起來(lái),我們將在此方法中執(zhí)行8步以獲得完整的旋轉(zhuǎn)。下面顯示的4相步進(jìn)電機(jī)的切換順序:
| 步數(shù) | 相位1(藍(lán)色) | 相位2(粉紅色) | 相位3(黃色) | 相位4(橙色) |
| 1 | 1 | 0 | 0 | 0 |
| 2 | 0 | 1 | 0 | 0 |
| 3 | 0 | 1 | 0 | 0 |
| 4 | 0 | 1 | 1 | 0 |
| 5 | 0 | 0 | 1 | 0 |
| 6 | 0 | 0 | 1 | 1 |
| 7 | 0 | 0 | 0 | 1 |
| 8 | 1 | 0 | 0 | 1 |
因此,您可以選擇在任何模式下對(duì)步進(jìn)電機(jī)進(jìn)行編程,但我更喜歡兩相步進(jìn)步進(jìn)模式。因?yàn)檫@種方法比單相方法提供更快的速度,并且與半模式相比,由于兩相方法中的步驟數(shù)量較少,所以代碼量較少。
創(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í)針旋轉(zhuǎn)步進(jìn)電機(jī)和逆時(shí)針旋轉(zhuǎn),如下圖所示,

要調(diào)整大小或更改按鈕的形狀,只需單擊它,您就可以拖動(dòng)按鈕的邊角。通過(guò)雙擊切換按鈕,您可以更改該特定按鈕的顏色、字符串和標(biāo)記。我們定制了兩個(gè)按鈕,如下圖所示。


您可以根據(jù)自己的選擇自定義按鈕?,F(xiàn)在當(dāng)你保存它時(shí),在MATLAB的Editor窗口中生成一個(gè)代碼。要對(duì)Arduino進(jìn)行代碼以執(zhí)行與項(xiàng)目相關(guān)的任何任務(wù),您始終必須編輯此生成的代碼。所以下面我們編輯了MATLAB代碼。您可以在MATLAB入門教程中了解有關(guān)命令窗口、編輯器窗口等的更多信息。
使用Arduino控制步進(jìn)電機(jī)的MATLAB代碼
控制步進(jìn)電機(jī)的完整MATLAB代碼在本文末尾處給出。此外,我們?cè)谶@里包含GUI文件(.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ù)要單擊的任務(wù)在兩個(gè)函數(shù)中編寫代碼。
在順時(shí)針按鈕的函數(shù)中,在函數(shù)末尾處復(fù)制并粘貼以下代碼,使電機(jī)順時(shí)針旋轉(zhuǎn)。為了順時(shí)針?lè)较蜻B續(xù)旋轉(zhuǎn)步進(jìn)電機(jī),我們使用while循環(huán)重復(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ù)的位置,以逆時(shí)針?lè)较蛐D(zhuǎn)電機(jī)。為了以逆時(shí)針?lè)较蜻B續(xù)旋轉(zhuǎn)步進(jìn)電機(jī),我們使用while循環(huán)重復(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筆記本電腦
●? ? Arduino UNO開(kāi)發(fā)板
●? ? 步進(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可能需要幾秒鐘的時(shí)間來(lái)響應(yīng),不要點(diǎn)擊任何GUI按鈕,直到MATLAB在左下角顯示忙消息,如下所示,
一切準(zhǔn)備就緒后,順時(shí)針或逆時(shí)針?lè)较虬粹o旋轉(zhuǎn)電機(jī)。 當(dāng)我們使用切換按鈕時(shí),步進(jìn)電機(jī)將以順時(shí)針?lè)较蜻B續(xù)移動(dòng),直到我們?cè)俅伟聪掳粹o。 同樣,按下逆時(shí)針切換按鈕,電機(jī)開(kāi)始逆時(shí)針旋轉(zhuǎn),直到我們?cè)俅伟聪掳粹o。

編輯:hfy
電子發(fā)燒友App















評(píng)論