Search Code

การใช้มอเตอร์สเต็ปเปอร์ 28BYJ-48 กับไดรเวอร์ ULN2003 และ Arduino

การใช้มอเตอร์สเต็ปเปอร์ 28BYJ-48 กับไดรเวอร์ ULN2003 และ Arduino

ในบทแนะนำนี้ เราจะเรียนรู้วิธีควบคุมมอเตอร์สเต็ป 28BYJ-48 โดยใช้ไดรเวอร์ ULN2003 ร่วมกับ Arduino การตั้งค่านี้ช่วยให้สามารถควบคุมตำแหน่งและความเร็วของมอเตอร์ได้อย่างแม่นยำ เมื่อสิ้นสุดโครงการนี้ คุณจะสามารถหมุนมอเตอร์ในทั้งสองทิศทางและควบคุมจำนวนขั้นตอนของมันได้อย่างมีประสิทธิภาพ

เราจะใช้มอเตอร์สเต็ป 28BYJ-48 ซึ่งเป็นตัวเลือกที่ได้รับความนิยมสำหรับโครงการหุ่นยนต์และอัตโนมัติหลายประเภทเนื่องจากมีต้นทุนต่ำและใช้งานง่าย แผงควบคุม ULN2003 เชื่อมต่อมอเตอร์สเต็ปกับ Arduino ทำให้เราสามารถส่งสัญญาณสเต็ปที่ควบคุมการเคลื่อนไหวของมอเตอร์ได้ บทแนะนำนี้จะพาคุณไปยังการเดินสายและโค้ดที่จำเป็นเพื่อให้มอเตอร์ของคุณหมุนได้

สำหรับข้อมูลเพิ่มเติม โปรดดูวิดีโอที่เกี่ยวข้องกับบทแนะนำนี้ (ในวิดีโอที่ 0:45)

อธิบายฮาร์ดแวร์

ส่วนประกอบหลักของโครงการนี้ประกอบด้วยมอเตอร์สเต็ปเปอร์ 28BYJ-48 และบอร์ดไดรเวอร์ ULN2003 มอเตอร์สเต็ปเปอร์ประกอบด้วยขดลวดหลายตัวที่สามารถถูกกระตุ้นในลำดับที่เฉพาะเจาะจงเพื่อสร้างการหมุน บอร์ดไดรเวอร์ ULN2003 ทำหน้าที่เป็นสวิตช์ ช่วยให้ Arduino สามารถควบคุมพลังงานที่ส่งไปยังแต่ละขดลวดได้

ไดรเวอร์ ULN2003 ใช้ชุดทรานซิสเตอร์ดาร์ลิงตันเพื่อจัดการกับกระแสที่สูงขึ้นที่จำเป็นสำหรับมอเตอร์สเต็ปเปอร์ เมื่อพินจาก Arduino ส่งสัญญาณ HIGH จะทำให้กระแสไหลไปยังขดลวดที่สอดคล้องกันในมอเตอร์ ทำให้มันเคลื่อนที่ได้ ซึ่งช่วยให้ควบคุมมุมการหมุนและความเร็วของมอเตอร์ได้อย่างแม่นยำ

รายละเอียดแผ่นข้อมูล

ผู้ผลิตULN2003
หมายเลขชิ้นส่วนULN2003
แรงดันไฟฟ้า Logic/IO5 โวลต์
แรงดันไฟฟ้าจ่าย5-30 โวลต์ (สูงสุด)
กระแสไฟฟ้าเอาต์พุต (ต่อช่อง)500 mA สูงสุด
กระแสสูงสุด (ต่อช่อง)2 A สูงสุด
แนวทางความถี่ PWMN/A
เกณฑ์ตรรกะนำเข้า0.8 โวลต์ (ต่ำ), 2.4 โวลต์ (สูง)
แรงดันไฟฟ้าตก / RDS(on)/ ความอิ่มตัว1.5 โวลต์ สูงสุด
ขีดจำกัดความร้อน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 ตัวอย่างเช่น:

  • IN1ถึงPin 10
  • IN2ถึงPin 11
  • IN3ถึงPin 12
  • IN4ถึงPin 13

สุดท้าย เชื่อมต่อขาไฟฟ้าและขากลับของไดรเวอร์ ULN2003 เข้ากับ Arduino เชื่อมต่อVCCเชื่อมต่อกับขา 5V ของ Arduino และ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ฟังก์ชันตั้งค่าขาแต่ละขาเป็นโหมด OUTPUT ทำให้สามารถส่งสัญญาณได้

สุดท้าย ในลูปหลัก เราสร้างสวิตช์เคสเพื่อควบคุมจำนวนขั้นตอนของมอเตอร์ตามตัวแปร_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); 

}

สิ่งที่คุณอาจต้องการ

แหล่งข้อมูลและเอกสารอ้างอิง

ไฟล์📁

ไม่มีไฟล์ที่พร้อมใช้งาน