用MATLAB程序控制伺服电机,使用MATLAB和Arduino开发板进行步进电机控制
步進電機是一種無刷直流電機,可以分步旋轉,是許多精密運動控制應用的最佳選擇。此外,步進電機適用于定位、速度控制和低速需要大扭矩的應用。
在之前的MATLAB教程中,我們已經介紹了如何使用MATLAB來控制直流電機、伺服電機和家用電器。今天我們將學習如何使用MATALB和Arduino開發板控制步進電機。如果您是MATLAB的新手,那么建議您先學習使用MATLAB開始簡單的LED閃爍程序。
步進電機的工作模式
在開始步進電機的相關代碼之前,您應該了解步進電機的工作或旋轉概念。由于步進模式的定子由不同的線圈對構成,因此每個線圈對可以以許多不同的方法激勵,這使得模式能夠以許多不同的模式驅動。以下是相對寬泛的分類:
●全步模式(Full Step)
在全步激勵模式下,我們可以以最小的匝數(步長)實現完整的360°旋轉。但這會導致慣性減小,旋轉也不會平滑。在全步激勵中還有兩個分類,它們是一個相位接通方波步進和兩個相位接通方波步進模式。
STEPPER-MOTOR-28BYJ-48-Pinout.jpg (52.97 KB, 下載次數: 116)
2018-10-10 09:24 上傳
1.? ? 一個相位步進或波形步進:在此模式下,只有電機的一個端子(相位)將在任何給定時間通電。這具有較少的步數,因此可以實現完整的360°旋轉。由于步數較少,因此該方法消耗的電流也非常低。下表顯示了4相步進電機的波形步進順序
步數相位1(藍色)相位2(粉紅色)相位3(黃色)相位4(橙色)
11000
20100
30010
40001
2.? ?兩相步進:正如該方法中的名稱所示,兩個相位將是一個步數。它具有與波形步進相同的步數,但由于一次有兩個線圈通電,因此與先前的方法相比可以提供更好的扭矩和速度。但是一個缺點是這種方法也消耗更多的功耗。
步數相位1(藍色)相位2(粉紅色)相位3(黃色)相位4(橙色)
11000
20100
30010
40001
●??半步模式
半步模式是一個相位接通模式和兩個相位接通模式的組合。這種組合將幫助我們克服兩種模式的上述缺點。
正如您可能已經猜到的那樣,因為我們將兩種方法結合起來,我們將在此方法中執行8步以獲得完整的旋轉。下面顯示的4相步進電機的切換順序:
步數相位1(藍色)相位2(粉紅色)相位3(黃色)相位4(橙色)
11000
20100
30100
40110
50010
60011
70001
81001
因此,您可以選擇在任何模式下對步進電機進行編程,但我更喜歡兩相步進步進模式。因為這種方法比單相方法提供更快的速度,并且與半模式相比,由于兩相方法中的步驟數量較少,所以代碼量較少。
創建用于控制步進電機的MATLAB圖形用戶界面
然后我們必須構建GUI(圖形用戶界面)來控制步進電機。要啟動GUI,請在命令窗口中鍵入以下命令
guide復制代碼
將打開一個彈出窗口,然后選擇新的空白GUI,如下圖所示,
Creating-GUI-in-MATLAB.png (20.25 KB, 下載次數: 96)
2018-10-10 09:24 上傳
現在選擇兩個切換按鈕,用于順時針旋轉步進電機和逆時針旋轉,如下圖所示,
Toggle-Button-in-MATLAB-GUI.png (8.28 KB, 下載次數: 120)
2018-10-10 09:24 上傳
要調整大小或更改按鈕的形狀,只需單擊它,您就可以拖動按鈕的邊角。通過雙擊切換按鈕,您可以更改該特定按鈕的顏色、字符串和標記。我們定制了兩個按鈕,如下圖所示。
GUI-Inspector-for-Changing-Tag-strings-and-color.png (29.07 KB, 下載次數: 113)
2018-10-10 09:24 上傳
MATLAB-GUI-for-Stepper-Motor-Control.png (5.26 KB, 下載次數: 106)
2018-10-10 09:24 上傳
您可以根據自己的選擇自定義按鈕。現在當你保存它時,在MATLAB的Editor窗口中生成一個代碼。要對Arduino進行代碼以執行與項目相關的任何任務,您始終必須編輯此生成的代碼。所以下面我們編輯了MATLAB代碼。您可以在MATLAB入門教程中了解有關命令窗口、編輯器窗口等的更多信息。
使用Arduino控制步進電機的MATLAB代碼
控制步進電機的完整MATLAB代碼在本文末尾處給出。此外,我們在這里包含GUI文件(.fig)和代碼文件(.m)供下載(右鍵單擊鏈接然后選擇“將鏈接保存為...”),使用它可以根據您的要求自定義按鈕。下面是我們使用兩個切換按鈕順時針和逆時針旋轉步進電機所做的一些調整。
復制并粘貼以下代碼到74行代碼,確保每次運行m文件時Arduino正在與MATLAB通信。
clear all;
global a;
a = arduino();復制代碼
IInitializing-Arduino-in-MATLAB.png (3.74 KB, 下載次數: 113)
2018-10-10 09:24 上傳
向下滾動時,您將看到為GUI中的兩個按鈕創建了兩個函數。現在根據要單擊的任務在兩個函數中編寫代碼。
在順時針按鈕的函數中,在函數末尾處復制并粘貼以下代碼,使電機順時針旋轉。為了順時針方向連續旋轉步進電機,我們使用while循環重復順時針方向的兩個相位步進完全模式步驟。
while get(hObject,'Value')
global a;
writeDigitalPin(a, 'D8', 1);
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復制代碼
Code-for-rotating-stepper-motor-in-clockwise-direction.png (16.07 KB, 下載次數: 104)
2018-10-10 09:24 上傳
現在在逆時針按鈕的函數中,將以下代碼粘貼到函數的位置,以逆時針方向旋轉電機。為了以逆時針方向連續旋轉步進電機,我們使用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復制代碼
Code-for-rotating-stepper-motor-in-anti-clockwise-direction.png (39.23 KB, 下載次數: 117)
2018-10-10 09:24 上傳
所需的材料
●? ? 安裝MATLAB筆記本電腦
●? ? Arduino UNO開發板
●? ? 步進電機(28BYJ-48,5VDC)
●? ? ULN2003 - 步進電機驅動器
電路原理圖
Circuit-Diagram-for-Stepper-motor-control-using-Arduino-and-MATLAB.png (47.54 KB, 下載次數: 117)
2018-10-10 09:24 上傳
Stepper-Motor-Control-using-MATLAB-and-Arduino.jpg (93.98 KB, 下載次數: 110)
2018-10-10 09:24 上傳
用MATLAB控制步進電機
根據電路圖設置硬件后,只需單擊運行按鈕即可在.m文件中運行編輯后的代碼
Run-MATLAB-GUI.png (15.71 KB, 下載次數: 116)
2018-10-10 09:38 上傳
MATLAB可能需要幾秒鐘的時間來響應,不要點擊任何GUI按鈕,直到MATLAB在左下角顯示忙消息,如下所示,
Processing-MATLAB-GUI-Program.png (1.3 KB, 下載次數: 112)
2018-10-10 09:24 上傳
一切準備就緒后,順時針或逆時針方向按鈕旋轉電機。 當我們使用切換按鈕時,步進電機將以順時針方向連續移動,直到我們再次按下按鈕。 同樣,按下逆時針切換按鈕,電機開始逆時針旋轉,直到我們再次按下按鈕。
Stepper-Motor-in-action-using-MATLAB-and-Arduino.jpg (79.47 KB, 下載次數: 193)
2018-10-10 09:24 上傳
代碼
本篇文章的完整代碼如下所示:
main.rar
(539 Bytes, 下載次數: 74)
2018-10-10 09:39 上傳
點擊文件名下載附件
總結
以上是生活随笔為你收集整理的用MATLAB程序控制伺服电机,使用MATLAB和Arduino开发板进行步进电机控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Python编程从入门到实践》第五章4
- 下一篇: HTML的表单及框架