步進(jìn)電機(jī)是一種無刷直流電機(jī),可以分步旋轉(zhuǎn),是許多精密運(yùn)動控制應(yīng)用的最佳選擇。此外,步進(jìn)電機(jī)適用于定位、速度控制和低速需要大扭矩的應(yīng)用。
在之前的MATLAB教程中,我們已經(jīng)介紹了如何使用MATLAB來控制直流電機(jī)、伺服電機(jī)和家用電器。今天我們將學(xué)習(xí)如何使用MATALB和Arduino開發(fā)板控制步進(jìn)電機(jī)。如果您是MATLAB的新手,那么建議您先學(xué)習(xí)使用MATLAB開始簡單的LED閃爍程序。
步進(jìn)電機(jī)的工作模式
在開始步進(jìn)電機(jī)的相關(guān)代碼之前,您應(yīng)該了解步進(jìn)電機(jī)的工作或旋轉(zhuǎn)概念。由于步進(jìn)模式的定子由不同的線圈對構(gòu)成,因此每個線圈對可以以許多不同的方法激勵,這使得模式能夠以許多不同的模式驅(qū)動。以下是相對寬泛的分類:
●??全步模式(Full Step)
在全步激勵模式下,我們可以以最小的匝數(shù)(步長)實(shí)現(xiàn)完整的360°旋轉(zhuǎn)。但這會導(dǎo)致慣性減小,旋轉(zhuǎn)也不會平滑。在全步激勵中還有兩個分類,它們是一個相位接通方波步進(jìn)和兩個相位接通方波步進(jìn)模式。
1.? ? 一個相位步進(jìn)或波形步進(jìn):在此模式下,只有電機(jī)的一個端子(相位)將在任何給定時間通電。這具有較少的步數(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):正如該方法中的名稱所示,兩個相位將是一個步數(shù)。它具有與波形步進(jìn)相同的步數(shù),但由于一次有兩個線圈通電,因此與先前的方法相比可以提供更好的扭矩和速度。但是一個缺點(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 |
●??半步模式
半步模式是一個相位接通模式和兩個相位接通模式的組合。這種組合將幫助我們克服兩種模式的上述缺點(diǎn)。
正如您可能已經(jīng)猜到的那樣,因?yàn)槲覀儗煞N方法結(jié)合起來,我們將在此方法中執(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 |
因此,您可以選擇在任何模式下對步進(jìn)電機(jī)進(jìn)行編程,但我更喜歡兩相步進(jìn)步進(jìn)模式。因?yàn)檫@種方法比單相方法提供更快的速度,并且與半模式相比,由于兩相方法中的步驟數(shù)量較少,所以代碼量較少。
創(chuàng)建用于控制步進(jìn)電機(jī)的MATLAB圖形用戶界面
然后我們必須構(gòu)建GUI(圖形用戶界面)來控制步進(jìn)電機(jī)。要啟動GUI,請?jiān)诿畲翱谥墟I入以下命令
guide
將打開一個彈出窗口,然后選擇新的空白GUI,如下圖所示,
現(xiàn)在選擇兩個切換按鈕,用于順時針旋轉(zhuǎn)步進(jìn)電機(jī)和逆時針旋轉(zhuǎn),如下圖所示,
要調(diào)整大小或更改按鈕的形狀,只需單擊它,您就可以拖動按鈕的邊角。通過雙擊切換按鈕,您可以更改該特定按鈕的顏色、字符串和標(biāo)記。我們定制了兩個按鈕,如下圖所示。
您可以根據(jù)自己的選擇自定義按鈕?,F(xiàn)在當(dāng)你保存它時,在MATLAB的Editor窗口中生成一個代碼。要對Arduino進(jìn)行代碼以執(zhí)行與項(xiàng)目相關(guān)的任何任務(wù),您始終必須編輯此生成的代碼。所以下面我們編輯了MATLAB代碼。您可以在MATLAB入門教程中了解有關(guān)命令窗口、編輯器窗口等的更多信息。
使用Arduino控制步進(jìn)電機(jī)的MATLAB代碼
控制步進(jìn)電機(jī)的完整MATLAB代碼在本文末尾處給出。此外,我們在這里包含GUI文件(.fig)和代碼文件(.m)供下載(右鍵單擊鏈接然后選擇“將鏈接保存為...”),使用它可以根據(jù)您的要求自定義按鈕。下面是我們使用兩個切換按鈕順時針和逆時針旋轉(zhuǎn)步進(jìn)電機(jī)所做的一些調(diào)整。
復(fù)制并粘貼以下代碼到74行代碼,確保每次運(yùn)行m文件時Arduino正在與MATLAB通信。
clear all;
global a;
a = arduino();
向下滾動時,您將看到為GUI中的兩個按鈕創(chuàng)建了兩個函數(shù)?,F(xiàn)在根據(jù)要單擊的任務(wù)在兩個函數(shù)中編寫代碼。
在順時針按鈕的函數(shù)中,在函數(shù)末尾處復(fù)制并粘貼以下代碼,使電機(jī)順時針旋轉(zhuǎn)。為了順時針方向連續(xù)旋轉(zhuǎn)步進(jìn)電機(jī),我們使用while循環(huán)重復(fù)順時針方向的兩個相位步進(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ù)的位置,以逆時針方向旋轉(zhuǎn)電機(jī)。為了以逆時針方向連續(xù)旋轉(zhuǎn)步進(jìn)電機(jī),我們使用while循環(huán)重復(fù)逆時針方向的兩個相位步進(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開發(fā)板
●? ? 步進(jìn)電機(jī)(28BYJ-48,5VDC)
●? ? ULN2003 - 步進(jìn)電機(jī)驅(qū)動器
電路原理圖
用MATLAB控制步進(jìn)電機(jī)
根據(jù)電路圖設(shè)置硬件后,只需單擊運(yùn)行按鈕即可在.m文件中運(yùn)行編輯后的代碼
MATLAB可能需要幾秒鐘的時間來響應(yīng),不要點(diǎn)擊任何GUI按鈕,直到MATLAB在左下角顯示忙消息,如下所示,
一切準(zhǔn)備就緒后,順時針或逆時針方向按鈕旋轉(zhuǎn)電機(jī)。 當(dāng)我們使用切換按鈕時,步進(jìn)電機(jī)將以順時針方向連續(xù)移動,直到我們再次按下按鈕。 同樣,按下逆時針切換按鈕,電機(jī)開始逆時針旋轉(zhuǎn),直到我們再次按下按鈕。
編輯:hfy
評論
查看更多