使用28BYJ-48步進馬達配合ULN2003驅動器同Arduino
喺呢個教學入面,我哋會學點樣用ULN2003驅動器同Arduino控制28BYJ-48步進馬達。呢個設置可以精確控制馬達嘅位置同速度。到呢個項目完成時,你將可以雙向旋轉馬達,並有效控制佢嘅步數。
我哋會用28BYJ-48步進馬達,因為佢價格低廉同易用,係各種機械人同自動化項目中好受歡迎。ULN2003驅動板將步進馬達同Arduino連接,讓我哋可以發送步進信號來控制馬達嘅運動。呢個教學會指導你完成必要嘅接線同代碼,令你嘅馬達轉動。
如需進一步澄清,請參考與本教程相關的視頻(視頻在0:45)。
硬件解说
呢個項目嘅主要組件包括28BYJ-48步進馬達同ULN2003驅動板。步進馬達由幾個線圈組成,可以按照特定嘅順序通電,從而產生旋轉。ULN2003驅動器作為開關,讓Arduino控制每個線圈供應嘅電力。
ULN2003 驅動器使用達林頓晶體管陣列來處理步進馬達所需的較高電流。當 Arduino 的一個引腳輸出高電平信號時,會允許電流流向馬達中相應的線圈,從而使其運動。這使得對馬達的旋轉角度和速度進行精確控制成為可能。
數據表詳情
| 製造商 | ULN2003 |
|---|---|
| 零件號碼 | ULN2003 |
| 邏輯/輸入輸出電壓 | 5 伏 |
| 供應電壓 | 5-30 伏 (最大) |
| 每個通道的輸出電流 | 最大500毫安 |
| 每個通道的峰值電流 | 2 A 最大 |
| PWM 頻率指導 | N/A |
| 輸入邏輯閾值 | 0.8 伏 (低), 2.4 伏 (高) |
| 電壓降 / RDS(通)/ 飽和度 | 1.5 V 最多 |
| 熱限制 | 70 °C 最多 |
| 包裹 | DIP-16 |
| 備註 / 變體 | 常用於5V步進馬達。 |
- 確保驅動器可以應付你嘅電動機目前嘅要求。
- 如有需要,使用散熱器來管理熱限制。
- 檢查所有連接是否穩固,以避免浮動輸入。
- 在整合到更大项目之前,通过运行简单的步进序列来测试电机。
- 確保用足夠的供電電壓為馬達供電。
接線指示


將28BYJ-48步進馬達接駁到ULN2003驅動器同Arduino,跟住以下步驟:
首先,將馬達連接到 ULN2003 驅動器。馬達有四條線,通常顏色編碼為橙色、黃色、粉紅色和藍色。將這些線連接到 ULN2003 驅動器的相應輸出引腳。連接如下:
Orange線去OUT1Yellow線到OUT2Pink線到OUT3Blue線到OUT4
接住,將 ULN2003 驅動器連接到 Arduino。驅動器上的輸入針腳對應到 Arduino 上的四個數字針腳。例如:
IN1到Pin 10IN2到Pin 11IN3到Pin 12IN4到Pin 13
最後,將ULN2003驅動器嘅電源同接地引腳連接到Arduino。連接VCC釘到Arduino的5V輸出和GND將引腳連接到Arduino的接地。確保在啟動系統之前所有連接都牢固。
代碼示例及步驟說明
喺Arduino代碼嘅設置部分,我哋定義咗連接到ULN2003驅動器嘅引腳:
int Pin1 = 10;
int Pin2 = 11;
int Pin3 = 12;
int Pin4 = 13;
喺呢度,我哋宣告咗四個整數變量:Pin1,Pin2,Pin3, 同Pin4,對應到Arduino上的數字引腳。這些引腳將控制步進電機的運動。
在setup()功能,我们将这些引脚配置为输出:
void setup() {
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
pinMode(Pin4, OUTPUT);
}
呢個設置確保Arduino可以向ULN2003驅動器發送信號,以控制馬達。pinMode函數將每個引腳設置為輸出模式,使它們能夠發送信號。
最後,喺主循環入面,我哋創建一個開關案例,根據變量控制馬達嘅步驟。_step:
switch(_step){
case 0:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, HIGH);
break;
// Additional cases follow
}
在呢段摘录中,我哋用digitalWrite根據電流向每個引腳發送高或低信號_step. 呢個控制邊啲線圈被通電,令到馬達可以轉動。整個整合咗呢啲片段嘅代碼會喺文章下面加載。
示範 / 期待什麼
一旦所有嘢都接好線同埋代碼上載完,步進馬達應該會根據Arduino發出嘅信號轉動。你可以透過修改循環入面嘅延遲或者改變步數嚟測試馬達,睇下佢點樣反應。要注意,如果馬達冇正確供電,佢可能唔會轉動或者會表現得唔穩定。
章節
- 介紹 - 0:00
- 硬件解说 - 1:30
- 接線指示 - 3:15
- 代碼示例及步驟 - 5:00
- 示範 / 期待什麼 - 7:45
// Original source is http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino
// Update by Ahmad Shamshiri for RoboJax.com
// Published on March 27, 2017 in Ajax, ON, Canada.
/*
*
Need wiring diagram from this code: https://youtu.be/0glBk917HPg
Purchase My Arduino course on Udemy.com http://robojax.com/L/?id=62
*
* Get this code and other Arduino codes from RoboJax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
all in one place. Purchase My course on Udemy.com http://robojax.com/L/?id=62
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been downloaded from RoboJax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
int Pin1 = 10;
int Pin2 = 11;
int Pin3 = 12;
int Pin4 = 13;
int _step = 0;
boolean dir = true;// false=clockwise, true=counter clockwise
int count=0;
void setup()
{
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
pinMode(Pin4, OUTPUT);
}
void loop()
{
switch(_step){
case 0:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, HIGH);
break;
case 1:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
digitalWrite(Pin4, HIGH);
break;
case 2:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
digitalWrite(Pin4, LOW);
break;
case 3:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, HIGH);
digitalWrite(Pin4, LOW);
break;
case 4:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
case 5:
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
case 6:
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
case 7:
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, HIGH);
break;
default:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
}
if(dir){
_step++;
}else{
_step--;
}
if(_step>7){
_step=0;
}
if(_step<0){
_step=7;
}
delay(1);
}
你可能需要嘅嘢
-
亞馬遜
-
阿里巴巴速卖通Purchase 5 pcs 28BYJ-48 stepper motors from AliExpresss.click.aliexpress.com
-
阿里巴巴速卖通
資源與參考資料
-
外部
-
外部
-
外部
文件📁
冇文件可用。