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