Posted on

ทำไม BLDC Motors ถึงหมุน?

ข้อดีของมอเตอร์ Brushless DC (BLDC) เมื่อเทียบกับมอเตอร์ DC แบบแปรงถ่าน

มอเตอร์กระแสตรงไร้แปรงถ่าน (BLDC) เป็นมอเตอร์ที่ให้ ประสิทธิภาพสูง ควบคุมได้แม่นยำ และเหมาะกับงานสมัยใหม่ มากกว่ามอเตอร์ DC แบบแปรงถ่าน โดยมีข้อดีหลักดังนี้

  • ประสิทธิภาพสูงกว่า
    ไม่มีการสูญเสียพลังงานจากการเสียดสีของแปรงถ่าน ทำให้แปลงพลังงานไฟฟ้าเป็นพลังงานกลได้ดีกว่า

  • ให้แรงบิดสูงอย่างสม่ำเสมอในช่วงการทำงาน
    มอเตอร์ BLDC สามารถรักษาแรงบิดสูงได้ต่อเนื่องตลอดช่วงความเร็ว
    ในขณะที่มอเตอร์ DC แบบแปรงถ่านให้แรงบิดสูงสุดเฉพาะบางจุดของการหมุนเท่านั้น
    ผลลัพธ์คือ มอเตอร์ BLDC ขนาดเล็กสามารถให้กำลังได้สูงกว่าที่คาด

  • ควบคุมแรงบิดและความเร็วได้อย่างแม่นยำ
    สามารถใช้งานร่วมกับระบบป้อนกลับ (Feedback) เช่น Hall Sensor หรือ Encoder
    เพื่อควบคุมแรงบิดและความเร็วให้ตรงตามที่ต้องการได้อย่างแม่นยำ

  • ใช้พลังงานอย่างมีประสิทธิภาพ และเกิดความร้อนต่ำ
    การควบคุมที่แม่นยำช่วยลดการสูญเสียพลังงาน ลดความร้อนสะสม และเพิ่มอายุการใช้งานของมอเตอร์

  • เหมาะกับระบบใช้แบตเตอรี่
    เนื่องจากกินไฟน้อยกว่าและมีประสิทธิภาพสูง
    ทำให้ อายุการใช้งานแบตเตอรี่ยาวนานขึ้นอย่างชัดเจน

  • สัญญาณรบกวนทางไฟฟ้าต่ำ และไม่มีประกายไฟ
    ไม่มีแปรงถ่าน จึงไม่เกิดประกายไฟจากการสัมผัส
    ลด EMI และเหมาะกับงานอิเล็กทรอนิกส์หรืออุปกรณ์ความแม่นยำสูง

  • บำรุงรักษาน้อย อายุการใช้งานยาว
    ไม่มีชิ้นส่วนที่สึกหรอง่ายอย่างแปรงถ่าน
    เหมาะกับงานที่ต้องทำงานต่อเนื่องหรือเข้าถึงซ่อมยาก

  • ใช้งานแพร่หลายในหลายอุตสาหกรรม
    เช่น ออโตเมชัน หุ่นยนต์ ยานยนต์ไฟฟ้า เครื่องมือแพทย์ พัดลมอุตสาหกรรม และระบบขับเคลื่อนต่าง ๆ


ทำไมมอเตอร์ BLDC ถึงหมุนได้โดยไม่มีแปรงถ่าน?

เนื่องจาก โรเตอร์เป็นแม่เหล็กถาวร
จึงไม่จำเป็นต้องใช้แปรงถ่านในการส่งกระแสไฟฟ้าเหมือนมอเตอร์ DC แบบดั้งเดิม

การจ่ายกระแสไฟฟ้าไปยังขดลวดสเตเตอร์จะถูก ควบคุมจากภายนอกโดยไดรเวอร์อิเล็กทรอนิกส์
ซึ่งทำหน้าที่สลับเฟสกระแสอย่างแม่นยำ ทำให้เกิดสนามแม่เหล็กหมุนและขับให้โรเตอร์หมุนตาม

แนวคิดนี้ช่วยให้:

  • ควบคุมการหมุนได้ละเอียดกว่า
  • ลดการสูญเสียทางกล
  • เพิ่มประสิทธิภาพและความทนทานของระบบโดยรวม

สรุป:

มอเตอร์ BLDC จึงเป็นตัวเลือกที่เหมาะสำหรับงานที่ต้องการ ความแม่นยำ, ประสิทธิภาพสูง, และการทำงานต่อเนื่อง เช่น ยานยนต์ไฟฟ้า, หุ่นยนต์, เครื่องใช้ไฟฟ้า และโดรน ซึ่งเหนือกว่ามอเตอร์ DC แบบแปรงที่เหมาะกับงานง่าย ๆ และต้นทุนต่ำกว่า

อ้างอิงข้อมูลเชิงเทคนิคจาก Renesas
(Engineer School – Brushless DC Motor Overview)

https://www.renesas.com/us/en/support/engineer-school/brushless-dc-motor-01-overview

Posted on

ตัวอย่างการควบคุม สเต็ปปิ้งมอเตอร์ขนาด 3 แอมป์ ด้วย Arduino + ไมโคร Step Driver TB6600 เบื้องต้น

ตัวอย่างการควบคุม สเต็ปปิ้งมอเตอร์ขนาด 3 แอมป์ ด้วย Arduino + ไมโคร Step Driver TB6600 เบื้องต้น

Linear_Slide_LSSX05_TB6600 https://drive.google.com/drive/folders/1YALYYlV6PUrQz-IYNR843RhyF7twXqQ4?usp=sharing

สเต็ปปิ้งมอเตอร์ขนาด 3 แอมป์ ปรับตั้ง ดิฟต์สวิตช์ของไมโคร Step Driver TB6600 ดังนี้

  • DIP Switch S1 S2 S3 ตั้งเป็น On Off On
  • DIP Switch S4 S5 S6 ตั้งเป็น On Off On
#include <AccelStepper.h>
// The X Stepper pins
#define PUL_PIN 2  // PUL_PIN
#define DIR_PIN 3  // DIR_PIN

AccelStepper stepper(AccelStepper::DRIVER, PUL_PIN, DIR_PIN);
 
void setup()
{
    stepper.setMaxSpeed(3500.0);     // ปรับความเร็ว หน่วยเป็น พัลส์ต่อวินาที steps per second
    stepper.setAcceleration(5500.0); // ปรับความเร่ง หน่วยเป็น พัลส์ต่อวินาทีกำลังสอง steps per second per second
    stepper.setCurrentPosition(0);           //เซตค่าตำแหน่งเริ่มเท่ากับ 0 ก่อนเข้าลูป
}
void loop()
{    
    stepper.runToNewPosition(0); //เริ่มต้นที่ตำแหน่ง 0
    delay(500);
    stepper.runToNewPosition(1500); // ระยะการเคลื่อนที่ไปทางบวก ด้านขวา จำนวน พัลส์
    delay(500);
    
    stepper.runToNewPosition(0);
    delay(500);
    stepper.runToNewPosition(-1500); // ระยะการเคลื่อนที่กลับ ทางลบ ด้านซ้าย จำนวน พัลส์
    delay(500);
}

 

 

Posted on

ตัวอย่างการสั่งงานด้วย Arduino Code สำหรับทดสอบการทำงานบอลสกรู

ตัวอย่างการควบคุม สเต็ปปิ้งมอเตอร์ขนาด 3 แอมป์ ด้วย Arduino + ไมโคร Step Driver TB6600 เบื้องต้น

Linear_Slide_LSSX05_TB6600

https://drive.google.com/drive/folders/1YALYYlV6PUrQz-IYNR843RhyF7twXqQ4?usp=sharing

สเต็ปปิ้งมอเตอร์ขนาด 3 แอมป์ ปรับตั้ง ดิฟต์สวิตช์ของไมโคร Step Driver TB6600 ดังนี้

  • DIP Switch S1 S2 S3 ตั้งเป็น ON OFF ON 400 P/R 2/A
  • DIP Switch S4 S5 S6 ตั้งเป็น ON OFF OFF 2.0A

ตัวอย่างการควบคุม สเต็ปปิ้งมอเตอร์ขนาด 3 แอมป์ ด้วย Arduino + ไมโคร Step Driver TB6600 เบื้องต้น

ตัวอย่างโปรแกรมควบคุมรางสไลด์ แบบไป-กลับ ตามตำแหน่งที่กำหนด

ซอร์สโค้ดเพื่อควบคุมการทำงาน ได้ตามวีดิโอด้านบน

 

 

#include <AccelStepper.h>
 //12V full step 200 pulse/rev,       1.5A
 //    S1 S2 S3                    S4  S5  S6
 //    NO NO OFF                   NO  OFF NO
 
// The X Stepper pins
#define STEPPER1_DIR_PIN 3
#define STEPPER1_STEP_PIN 2

AccelStepper stepper1(AccelStepper::DRIVER, STEPPER1_STEP_PIN, STEPPER1_DIR_PIN);

 int MaxAcc = 10000;
 int MaxSpd = 800;
 int State = 0;
 int Step = 0;
void setup()
{  
    stepper1.setMaxSpeed(MaxSpd);
    stepper1.setAcceleration(MaxAcc);
    stepper1.setCurrentPosition(0);
    stepper1.moveTo(1000);
    Serial.begin(9600);
    delay(2000);
    Serial.println("Power ON ");
    Serial.print("State = ");
    Serial.print(State);
    Serial.print("t position = ");
    Serial.println(stepper1.currentPosition());
    delay(2000);
}
void loop()
{
 //Serial.println(stepper1.currentPosition());
  switch (State) 
  {
    case 0:    // 
      if (stepper1.distanceToGo() == 0)
      {
        State =1;
        Serial.print("State = ");
        Serial.print(State);
        Serial.print("t position = ");
        Serial.println(stepper1.currentPosition());
        delay(1000);
        stepper1.moveTo(0);
      }
      break;
    case 1:    // your hand is close to the sensor
      if (stepper1.distanceToGo() == 0)
      {
        State = 2;
        Serial.print("State = ");
        Serial.print(State);
        Serial.print("t position = ");
        Serial.println(stepper1.currentPosition());
        delay(1000);
        stepper1.moveTo(2500);
      }
      break;
    case 2:    // your hand is a few inches from the sensor
      if (stepper1.distanceToGo() == 0)
      {
        State=3;
        Serial.print("State = ");
        Serial.print(State);
        Serial.print("t position = ");
        Serial.println(stepper1.currentPosition());
        delay(1000);
        stepper1.moveTo(0);
      }
      break;
    case 3:    // your hand is nowhere near the sensor
      if (stepper1.distanceToGo() == 0)
      {
        State = 4;
        Serial.print("State = ");
        Serial.print(State);
        Serial.print("t position = ");
        Serial.println(stepper1.currentPosition());
        delay(1000);
        stepper1.moveTo(-1000);       
      }
      break;
    case 4:    // your hand is nowhere near the sensor
      if (stepper1.distanceToGo() == 0)
      {
        State = 5;
        Serial.print("State = ");
        Serial.print(State);
        Serial.print("t position = ");
        Serial.println(stepper1.currentPosition());
        delay(1000);
        stepper1.moveTo(0);       
      }
      break;
    case 5:    // your hand is nowhere near the sensor
      if (stepper1.distanceToGo() == 0)
      {
        State = 0;
        Serial.print("State = ");
        Serial.print(State);
        Serial.print("t position = ");
        Serial.println(stepper1.currentPosition());
        delay(1000);
        stepper1.moveTo(-2000);       
      }
      break;
  }
  
stepper1.run();
}

เอาต์พุตแสดงตำแหน่ง ที่เคลื่อนที่ไป โดยจะทำงานวนไปตั้งแต่ stateที่ 0 ถึง state 5

การต่อสายสัญญาณ ระหว่างบอร์ดอาดูโน่ และ ไดร์ฟเวอร์ สเต็ปเปอร์มอเตอร์

การตั้งค่าตัวไดร์ฟเวอร์ ขับสเต็ปเปอร์ ความละเอียด 200 สเต็ปต่อรอบ ตั้งค่ากระแส1.0 แอมป์

 

ตัวอย่างการสั่งงานด้วย Arduino Code

  •  กระแสที่ 3 แอมป์
  • Micro Step = 4, PPR = 800

ตัวอย่างการสั่งงานด้วย Arduino Code สำหรับทดสอบการทำงานเบื้องต้น

  • กระแสที่ 3 แอมป์
  • Micro Step = 4, PPR = 800

Linear_Slide_LSSX05_TB6600

#include <AccelStepper.h>
 
// The X Stepper pins
#define PUL_PIN 2  // PUL_PIN
#define DIR_PIN 3  // DIR_PIN

AccelStepper stepper(AccelStepper::DRIVER, PUL_PIN, DIR_PIN);
 
void setup(){
    stepper.setMaxSpeed(10000.0);     // ปรับความเร็ว
    stepper.setAcceleration(10000.0); // ปรับความเร่ง
}
void loop(){    
    stepper.runToNewPosition(0);
    delay(500);
    stepper.runToNewPosition(10000); // ระยะการเคลื่อนที่ไป
    delay(500);
    stepper.runToNewPosition(0);
    delay(500);
    stepper.runToNewPosition(-10000); // ระยะการเคลื่อนที่กลับ
    delay(500);
}

ตัวอย่างการสั่งงานด้วย Arduino Code แบบมี Home Limit Switch

#include <AccelStepper.h>
 
// The X Stepper pins
#define STEPPER1_DIR_PIN 3
#define STEPPER1_STEP_PIN 2
AccelStepper stepper(AccelStepper::DRIVER, STEPPER1_STEP_PIN, STEPPER1_DIR_PIN);
 const int buttonPin = 7; //home switch
 int state = 0;
 int buttonState = 0; 
 int MaxAcc = 6000;
 int MaxSpd = 4000;
void setup()
{
     Serial.begin(9600);
     pinMode(buttonPin, INPUT_PULLUP);
    stepper.setMaxSpeed(MaxSpd); // ทดลองปรับความเร็ว
    stepper.setAcceleration(MaxAcc); // ทดลองปรับความเร่ง
}
void loop()
{    
    //Serial.println(state);
    buttonState = digitalRead(buttonPin);
    if((buttonState == HIGH)&&(state == 0))//
    {
        stepper.setMaxSpeed(MaxSpd); // หมุนช้าเข้าหาสวิตช์ Home
        stepper.setAcceleration(MaxAcc);
        stepper.setSpeed(-500);
        stepper.runSpeed();
        
    }
    else if ((buttonState == LOW) &&(state == 0))
    {
          stepper.setMaxSpeed(MaxSpd); 
          stepper.setAcceleration(MaxAcc);
          stepper.setCurrentPosition(0);
          state = 1;
          delay(1000);
    } 
    if(state ==1 )
    {
      stepper.runToNewPosition(12000);
      delay(1000);
      stepper.runToNewPosition(0);
      delay(1000);
    }
}

 

Posted on

วงจรรีเลย์กลับทางหมุนมอเตอร์ Motor reversing relay circuit

วงจรรีเลย์กลับทางหมุนมอเตอร์ Motor reversing relay circuit ทางหมุนมอเตอร์ (Motor Drive) เป็นระบบที่ใช้ในการควบคุมมอเตอร์หรือเครื่องขับเคลื่อนอื่น ๆ ซึ่งสามารถปรับความเร็วหรือทิศทางการหมุนของมอเตอร์ได้ตามที่ต้องการ เมื่อนำทั้งวงจรรีเลย์และทางหมุนขั้วมอเตอร์มาใช้ร่วมกัน จะได้วงจรควบคุมมอเตอร์ที่สามารถเปิด-ปิดหรือควบคุมการทำงานของมอเตอร์ได้ตามที่ต้องการ ต่อไปนี้คือตัวอย่างวงจรที่ใช้ร่วมกันระหว่างรีเลย์และ มอเตอร์ ในที่นี้, การปิดหรือเปิดของรีเลย์จะทำให้มอเตอร์เปิดหรือปิดตามนั้น โดยสวิทช์หรือสัญญาณควบคุมจะถูกนำมาใช้ควบคุมรีเลย์ และจากนั้นรีเลย์จะควบคุมการทำงานของมอเตอร์.

วงจรควบคุมมอเตอร์ด้วยรีเลย์เบื้องต้น

  • RY1 Relay1 , RY2 Relay2 รีเลย์ 2 ชุด (SPDT Relay)
  • MT มอเตอร์

การทำงาน

  • Relay 1 = ON / Relay 2 = OFF  มอเตอร์หมุน CW
  • Relay 1 = OFF / Relay 2 = ON มอเตอร์หมุน CCW

Posted on

ควบคุมสเต็ปปิ้งมอเตอร์โดยใช้บอร์ดอาดูโน่และลิมิตสวิทช์

ควบคุมสเต็ปปิ้งมอเตอร์โดยใช้บอร์ดอาดูโน่

#define Go_L 8 // กำหนดขาที่ต่อกับสวิตช์โยก
#define Go_R 9 // กำหนดขาที่ต่อกับสวิตช์โยก
#define Limit_R 11 //กำหนดขาที่ต่อกับลิมิตสวิทช์
#define Limit_L 12 //กำหนดขาที่ต่อกับลิมิตสวิทช์
int speed1 = 900; //กำหนดความเร็ว ค่าน้อย มอเตอร์หมุนเร็ว ค่ามาก มอเตอร์หมุนช้า
void setup(){  
  pinMode(5, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(Go_L, INPUT_PULLUP);
  pinMode(Go_R, INPUT_PULLUP);
  pinMode(Limit_R, INPUT_PULLUP);
  pinMode(Limit_L, INPUT_PULLUP);     
}
void loop() {
if(digitalRead(Go_R)==0)  //โยกไปขวา
      {
            if (digitalRead(Limit_R))//ตราบเท่าที่ยังไม่ชนลิมิตสวิตช์ สั่งให้มอเตอร์หมุนต่อไป
            {
                digitalWrite(2, LOW);
                digitalWrite(5, HIGH);
                delayMicroseconds(speed1);
                digitalWrite(5, LOW);
                delayMicroseconds(speed1);  
            }  
            else
            {
              // ชนลิมิตสวิตช์แล้ว มอเตอร์หยุด
            }
      }
  if(digitalRead(Go_L)==0) //โยกไปซ้าย
      {          
            if (digitalRead(Limit_L))//ตราบเท่าที่ยังไม่ชนลิมิตสวิตช์ สั่งให้มอเตอร์หมุนต่อไป
            {
                 digitalWrite(2, HIGH);
                digitalWrite(5, HIGH);
                delayMicroseconds(speed1);
                digitalWrite(5, LOW);
                delayMicroseconds(speed1); 
            }  
            else
            {
              // ชนลิมิตสวิตช์แล้ว มอเตอร์หยุด
            }
      }
}