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