ทดลอง MCU ตอนที่ 8 (DC Motor)

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

 

 *ภาพจาก www.robotshop.us

มอเตอร์ไฟฟ้ากระแสตรงสามารถทำงานได้เต็มพิกัดตามที่ระบุที่ตัวมอเตอร์ เช่นมอเตอร์ขนาด 12 โวลต์ทำงานที่สภาพไม่รับภาระ(No Load) ได้ความเร็ว 200 รอบต่อนาที (RPM) เราสามารถที่บังคับให้มอเตอร์ทำงานเกินพิกัดได้เล็กน้อย โดยการเพิ่มแรงดันให้กับตัวมอเตอร์ แต่จะทำให้มอเตอร์ทำงานหนักและอาจเสียหายได้ ในทางปฏิบัติจะใช้มอเตอร์ที่มีความเร็วสูงตามต้องการหากปรับความเร็วจะทำเฉพาะการลดความเร็วเท่านั้น การลดความเร็วทำได้โดยการลดแรงดันที่จ่ายให้กับมอเตอร์

 

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

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

รีเลย์ตัวที่ 1 (RY1) กับรีเลย์ตัวที่ 4 (RY4) จะทำงานพร้อมกัน มอเตอร์จะได้รับการจ่ายแรงดันดังรูป

หากต้องการให้มอเตอร์หมุนกลับทิศทาง จะบังคับให้ รีเลย์ตัวที่ 2 (RY2) กับรีเลย์ตัวที่ 3 (RY3) เป็นตัวทำงานดังรูป

จากวงจรข้างต้นมีข้อเสียตรงที่เมื่อใด รีเลย์ตัวที่ 1 (RY1) กับรีเลย์ตัวที่ 2 (RY2) หรือ รีเลย์ตัวที่ 3 (RY3) กับรีเลย์ตัวที่ 4 (RY4) เกิดทำงานพร้อมกัน(ซึ่งอาจเกิดขึ้นได้จากความผิดพลาดใดก็ตาม) จะเกิดความเสียหายได้เนื่องจะเกิดการลัดวงจรของแหล่งจ่ายโดยตรง

 วิธีแก้ไขทำได้โดยการต่อวงจรดังรูป

 

 รีเลย์ 2(RY2) เป็นรีเลย์ 2 คอนแทคซึ่งจะไม่มีโอกาสลัดวงจรได้เลยการควบคุมเป็นดังรูป


 ปัจจุบันมีไอซีควบคุมมอเตอร์โดยตรงใช้งานคือเบอร์ L298N ซึ่งมีคุณสมบัติดังนี้

- OPERATING SUPPLY VOLTAGE UP TO 46 V
- TOTAL DC CURRENT UP TO 4 A
- LOW SATURATION VOLTAGE
- OVERTEMPERATURE PROTECTION LOGICAL ”0” INPUT VOLTAGE UP TO 1.5 V
(HIGH NOISE IMMUNITY)

โครงสร้างเป็นดังรูป

ตังถังไอซีเป็นดังรูป

การควบคุมการหมุนของมอเตอร์ทำได้โดยการกำหนดลอจิกที่อินพุทในช่องที่ต่อมอเตอร์ ตัวอย่างเช่นต่อมอเตอร์ที่ช่อง A การควบคุมสามารถทำได้ดังตาราง

 อินพุทลอจิก  ผลที่เกิดขึ้นกับมอเตอร์
ขา ENA ขา IN1 ขา IN2
 0  X  X  มอเตอร์หยุดหมุน แต่สามารถจับหมุนได้อิสระลักษณะถูกปลดลอย
 1  0 0  มอเตอร์หยุดหมุนเร็ว เนื่องจากมอเตอร์ถูกชอร์ต
 0 1  มอเตอร์หมุน
 1 0  มอเตอร์หมุนในทิศทางตรงข้าม
 1 1  มอเตอร์หยุดหมุนเร็ว เนื่องจากมอเตอร์ถูกชอร์ต

 


 สำหรับการใช้งานโดยใช้ไมโครคอนโทรลเลอร์ควบคุมการทำงานที่ใช้มอเตอร์เพียงตัวเดียวสามารถต่อวงจรได้ดังรูป

ตัวอย่างโปรแกรมควบคุมการทำงานให้มอเตอร์หมุนซ้ายหมุนขวา

#include<reg52.h>
void delay(int t);
sbit m1cw=P0^0;
sbit m1ccw=P0^1;
sbit m2cw=P0^2;    
sbit m2ccw=P0^3;
sbit ea_m1=P0^4;
sbit ea_m2=P0^5;
void main (void)
{
    TMOD=0x10;    
        while(1)
        { m1cw=0;
          delay(5000);        // 5000=5 second delay
          m1cw=1;
          m1ccw=0;
          delay(5000);
          m1ccw=1;
        }
}
void delay(int t)
{
     int i;
        for(i=0;i<t;i++)
        {
            TH1=0xFC;     //set for 1 milisecond
            TL1=0x66;
            TF1=0;
               TR1=1;
              while(TF1==0)
                  {}
            TR1=0;
        }
}

ตัวอย่างการนำไปใช้ขับเคลื่อนหุ่นยนต์โดยมีการรับสัญญาณตรวจจับ(Sensor) 2 จุดในการทดลองใช้สวิตช์แทนตัวตรวจจับ

#include<reg52.h>
sbit m1cw=P0^0;
sbit m1ccw=P0^1;
sbit m2cw=P0^2;     
sbit m2ccw=P0^3;
sbit ea_m1=P0^4;
sbit ea_m2=P0^5;
sbit sensor1=P2^0;
sbit sensor2=P2^1;
void main (void)
{
         m1cw=0;
         m2cw=0;
        while(1)
        {
            if(sensor1==0)
                m1cw=1;
            else
                m1cw=0;
            if(sensor2==0)
                m2cw=1;
            else
                m2cw=0;
        }
}

การต่อจำลองการทำงาน ทำได้ดังรูป

 

 โปรดติดตามในบทความตอนต่อไป
   ครูประภาส สุวรรณเพชร