Search Code

使用28BYJ-48步進馬達配合ULN2003驅動器同Arduino

使用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步進馬達。

  • 確保驅動器可以應付你嘅電動機目前嘅要求。
  • 如有需要,使用散熱器來管理熱限制。
  • 檢查所有連接是否穩固,以避免浮動輸入。
  • 在整合到更大项目之前,通过运行简单的步进序列来测试电机。
  • 確保用足夠的供電電壓為馬達供電。

接線指示

stepper_28BYJ-48_wiring_battery
stepper_28BYJ-48_wiring

將28BYJ-48步進馬達接駁到ULN2003驅動器同Arduino,跟住以下步驟:

首先,將馬達連接到 ULN2003 驅動器。馬達有四條線,通常顏色編碼為橙色、黃色、粉紅色和藍色。將這些線連接到 ULN2003 驅動器的相應輸出引腳。連接如下:

  • Orange線去OUT1
  • Yellow線到OUT2
  • Pink線到OUT3
  • Blue線到OUT4

接住,將 ULN2003 驅動器連接到 Arduino。驅動器上的輸入針腳對應到 Arduino 上的四個數字針腳。例如:

  • IN1Pin 10
  • IN2Pin 11
  • IN3Pin 12
  • IN4Pin 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

圖片

stepper_28BYJ-48_wiring_battery
stepper_28BYJ-48_wiring_battery
stepper_28BYJ-48_poles
stepper_28BYJ-48_poles
stepper_28BYJ-48_waveform_actual
stepper_28BYJ-48_waveform_actual
stepper_28BYJ-48_waveform_inverted
stepper_28BYJ-48_waveform_inverted
stepper_28BYJ-48_wiring
stepper_28BYJ-48_wiring
6-The source code for stepper motor 28BYJ-48 with ULN2003 for Arduino
語言: C++
// 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); 

}

文件📁

冇文件可用。