11...Arduino and Motor Control

        

Arduino กับพื้นฐานการควบคุมความเร็วมอเตอร์เบื้องต้น

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


การลกละดับแรงดันให้มอเตอร์


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


วงจรปรับความเร็วรอบมอเตอร์


การปรับความเร็วรอบด้วยความถี่ 
ในการทดลองนี้จะใช้สร้างสัญญาณความถี่แบบง่ายๆในการปรับความเร็ว เพราะ เมื่อความถี่เปลี่ยนไป แรงดันที่ตกคร่อมที่มอเตอร์จะลดลงทำให้มอเตอร์หมุนช้าลงไปด้วย ซึ่งค่า % จะเรียกว่า ค่า Duty cycle และ การสร้างความถี่แบบนี้ เราจะเรียกว่า PWM ( Pulse Width Modulation) 


การเปลี่ยน ค่า% ความถี่


Duty cycle 100 % มอเตอร์จะหมุนด้วยความเร็วเต็มที่ ( ความเร็วปกติ) 
Duty cycle 75 % มอเตอร์จะหมุนด้วยความเร็ว ลดลงมา 
Duty cycle 50 % มอเตอร์จะหมุนด้วยความเร็ว ลดลงมา 
Duty cycle 30 % มอเตอร์จะหมุนด้วยความเร็วช้ามาก หรือ อาจจะหยุดหมุนได้ 


วงจรในการทดสอบ 
ในการทดสอบวงจรนั้นจะใช้วงจรเดียวกันกับวงจรการขับมอเตอร์ทั่วไป 


วงจรที่ใช้ในการทดลอง





รูปการทดลอง


ในการทดสอบจะทดลองตั้งที่ความถี่ใช้งาน 50Hz ซึ่งจะได้ค่าเวลา 20 mS โดยจะกำหนดค่า Duty cycle 3 ค่าดังนี้ Duty cycle ประมาณ 5% มอเตอร์จะหมุนช้า
วันนี้เรามาพูดถึงการควบคุมมอเตอร์กระแสตรงกันหน่อย  (ขอโฆษณานิดนะครับ ของที่ใช้ในการทำอยู่ใน Arduino Stater Kit 1)  แต่บอกไว้ก่อนนะครับ ผมกะจะเขียนบทความแบ่งออกเป็นตอนๆ โดยจะมีเนื้อหาในการควบคุมมอเตอร์ชนิดต่างๆ ดังนี้ครับ 

ง่ายสุดก็ DC motor หรือ มอเตอร์กระแสตรง  ซัก 2 ตอน  โดยว่ากันถึงการควบคุมทิศการหมุน และ การควบคุมความเร็วรอบ
ต่อมาก็ Servo motor  ซัก 2 ตอน 
และปิดท้ายด้วย Stepping Motor 2 ตอน ครับ
และปิดท้ายด้วย Stepping Motor 2 ตอน ครับ
วันนี้ก็ดูจะง่ายๆ ไปก่อนนะครับ Sketch ที่ใช้เป็นตัวอย่างผมไปเอามาจาก Arduino Cookbook โดยคุณ Michael Margolis นะครับ  แล้วมาเขียนเนื้อหาใหม่ โดยอธิบายให้ง่าย และลึกขึ้น  บอกไว้ก่อนเดี๋ยวจะมีคนหาว่าไปลอกมาอีก
   DC motor ประกอบด้วย 2 ส่วนหลักๆ ได้แก่ โรเตอร์ และสเตเตอร์ นะครับ  โรเตอร์ก็คือส่วนที่หมุน ส่วนสเตเตอร์คือส่วนที่เป็นขดลวดที่สร้างสนามแม่เหล็ก 
   หลักการทำงานของ DC motor คร่าวๆ ก็คือการนำกระแสตรงมาตัดผ่านสนามแม่เหล็ก ทำให้เกิดทอร์กขึ้นในทิศที่เหมาะสม และสร้างให้เกิดการหมุนของแกนโรเตอร์  ถ้าอยากดู Animation เท่ห์ๆ ของ Professor ใจดีที่ทำเพื่ออธิบายหลักการทำงานของ DC motor ก็ไปที่นี่เลยครับ
http://www.walter-fendt.de/ph14e/electricmotor.htm
  ทีนี้ในงานส่วนมาก เราต้องการควบคุมทิศทาง และ ความเร็วรอบของมอเตอร์  ไม่ว่าจะเป็นการขับเคลื่อนสายพาน หรือ ล้อของหุ่นยนต์   เพราะเราคงไม่ต้องการให้หมุนแบบอิสระควบคุมไม่ได้  ดังนั้นก็เลยมีคนคิดวงจรที่ใช้ในการควบคุมมอเตอร์ขึ้นมา  แบบที่นิยมใช้กันเรียกว่าวงจร "H-Bridge"
วงจรที่เห็นนี้ทำหน้าที่ได้ทั้งคุมทิศทางและความเร็วของมอเตอร์นะครับ   มาว่ากันทีละส่วน  เริ่มจากการคุมทิศทางการหมุนก่อนครับ
โดยปกติหากต้องการกลับทิศการหมุนของมอเตอร์กระแสตรง วิธีนึงที่ทำได้คือ กลับทิศแหล่งจ่าย  ทีนี้ลองดูที่รูปวงจร H-Bridge ด้านบนนะครับ
หากต้องการให้หมุนตามเข็ม (Clockwise :CW) ก็ให้ S1 และ S4 ปิดวงจร  และให้ S2 และ S3 เปืดวงจร
หากต้องการให้หมุนทวนเข็ม (Conter Clockwise :CCW) ก็ให้ S2และ S3 ปิดวงจร  และให้ S1 และ S4 เปืดวงจร
จะเห็นว่าสวิตช์จะทำงานเป็นคู่นะครับ S1 คู่กับ S4 และ S2 คู่กับ S3 คู่แรกทำงาน คู่สองต้องเปิดวงจร และในทางตรงข้ามก็คือคู่สองทำงาน คู่แรกต้องเปิดวงจร  
ทีนี้จะทำอย่างไรให้การเปิดปิดเป็นแบบที่ง่ายกว่านี้  คำตอบก็คือ ใช้อุปกรณ์สารกึงตัวนำเช่น MOSFET หรือ IGBT หรือ อื่นๆ แล้วแต่ความเหมาะสม เช่น ขนาดกระแส แรงดันที่ต้องการควบคุม ครับ
Schematic ขอวงจร H-Bridge ก็ตามนี้ครับ  จะใช้วงจรนี้ก็ต้องเชิญไปบ้านหม้อและซื้ออุปกรณ์ตามลิงค์นี้มาต่อวงจรกันเอานะครับ   แต่โชคดีที่เรามีทั้ง Motor Shield L293D  Motor Shield L298P    และ IC ที่มีวงจร H-Bridge ให้ครับ  ที่มีขายในบ้านเรามีให้เลือก 2 แบบ หลักๆ คือ L293D และ L298P ครับ  สองตัวนี้ต่างกันอย่างไรเหรอครับ  ก็ที่ขนาดของกระแสที่รับได้  ซึ่งหมายถึงขนาดของมอเตอร์ที่ใช้นะครับ 
ถ้ามากกว่านี้เหรอครับ  คงต้องต่อกันเอาเองแล้วครับ แต่จริงๆ ก็ไม่ได้ยากอะไรขนาดนั้นครับ แค่ต่อตาม Schematic เท่านั้น  แต่แหม เลือกได้คงไม่ต่อเองใช่รึเปล่าครับ
วันนี้ลองมาใช้ L293D ทีให้มาใน Arduino Stater Kit 1 ของร้าน Arduitronics เพื่อทดลองคุมทิศทางการหมุนดูนะครับ
   ก่อนอื่นเริ่มจากการต่อวงจรก่อนครับ ก็ต่อตามภาพด้านล่างนี้ครับ (ภาพจาก Arduino Cookbook by Michael Margolis)
ในตัวอย่างนี้ผมใช้ถ่าน 9 V เป็นแหล่งจ่ายนะครับ  อย่าใช้ 5 V จาก Board เป็นแหล่งจ่ายนะครับ เพราะ Port ของ Arduino จ่ายกระแสได้แค่ 50 mA เท่านั้น  อาจจะทำให้บอร์ดพังได้ครับ
Sketch ก็ตามนี้นะครับ
/*
* Brushed_H_Bridge_simple2 sketch
* commands from serial port control motor direction
* + or - set the direction, any other key stops the motors
*/
const int in1Pin = 5;  // H-Bridge input pins
const int in2Pin = 4;
const int in3Pin = 3;  // H-Bridge pins for second motor
const int in4Pin = 2;
void setup()
{
  Serial.begin(9600);
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(in3Pin, OUTPUT);
  pinMode(in4Pin, OUTPUT);
  Serial.println("+ - sets direction of motors, any other key stops motors");
}
void loop()
{
  if ( Serial.available()) {
    char ch = Serial.read();
    if (ch == '+')
    {
      Serial.println("CW");
      // first motor
      digitalWrite(in1Pin,LOW);
      digitalWrite(in2Pin,HIGH);
      //second motor
      digitalWrite(in3Pin,LOW);
      digitalWrite(in4Pin,HIGH);
     
    }
    else if (ch == '-')
    {
      Serial.println("CCW");
      digitalWrite(in1Pin,HIGH);
      digitalWrite(in2Pin,LOW);
      digitalWrite(in3Pin,HIGH);
      digitalWrite(in4Pin,LOW);
    }
    else
    {
      Serial.print("Stop motors");
      digitalWrite(in1Pin,LOW);
      digitalWrite(in2Pin,LOW);
      digitalWrite(in3Pin,LOW);
      digitalWrite(in4Pin,LOW);
    }
  }
}
อ้างอิง  https://www.arduitronics.com/article/22/arduino-and-motor-control-part-1

ความคิดเห็น

บทความที่ได้รับความนิยม