วันศุกร์ที่ 22 กันยายน พ.ศ. 2560

บทความการใช้งาน การใช้งาน L298N motor drive

บทความการใช้งาน การใช้งาน L298N motor drive

          เมื่อพูดถึงการใช้งานมอเตอร์กระแสตรงแล้ว หลีกเลี่ยงไม่ได้ที่จะนึกถึง หุ่นยนต์ หรือแม้กระทั่งรถบังคับ ส่วนใหญ่จะใช้มอเตอร์เป็นตัวขับเคลื่อนการทำงาน เช่น การเคลื่อนที่ของรถ บังคับ หรือ แม้กระทั่งใช้เป็นกลไกในการทำงานของของหุ่นยนต์ เมื่อพูดถึงมอเตอร์ การที่จะต้องใช้งานมอเตอร์ทำงานอย่างมีประสิทธิภาพทั้ง การควบคุมความเร็วรอบของมอเตอร์และการควบคุมการหมุนทวนเข็มและตามเข็ม สิ่งเหล่านี้ทำได้ แต่ต้องมีโมดูลเสริมหรือตัวกำหนดตัวแปรที่จะทำให้สามารถควบคุมการทำงานของมอเตอร์ได้ ซึ่งโมดูลที่ใช้ได้มีด้วยกันหลายรุ่น แต่ในที่นี้จะขอยกตัวอย่างเอารุ่น L298N motor drive มาเป็นกรณีศึกษา  
          L298N เป็นชุดขับมอเตอร์ชนิด H-Bridge ซึ่งส่วนใหญ่จะถูกนำไปใช้ในการควบคุมทิศทางและความเร็วของมอเตอร์ ซึ่งสามารถควบคุมมอเตอร์ได้ทั้งหมด 2 Channel
        หลักการทำงาน
วงจร H-Bridge ของ L298N จะขับกระแสเข้ามอเตอร์ ตามขั้วที่กำหนดด้วยลอจิกเพื่อควบคุมทิศทาง ส่วนความเร็วของมอเตอร์นั้นจะถูกควบคุมด้วย สัญญาณ (PWM Pulse Width Modulation)
PWM หมายถึง การควบคุมช่วงจังหวะการทำงานของอิเล็กตรอน ลองจินตนาการถึงแปรงขดลวดในมอเตอร์เป็นระหัดวิดน้ำและอิเล็กตรอนเป็นน้ำที่ตกลงมาจากระหัดวิดน้ำ
ค่าแรงดันไฟฟ้าก็คล้ายกับกระแสน้ำที่ไหลผ่านระหัดวิดน้ำด้วยความเร็วคงที่ ยิ่งกระแสน้ำไหลเร็วเท่าไรก็จะหมายความว่าแรงดันไฟฟ้ายิ่งสูงขึ้น แต่มอเตอร์มีอัตราความเร็วคงที่และสามารถเสียหายได้หากมีแรงดันไฟฟ้าสูงไหลผ่านหรือหยุดทันทีเพื่อที่จะหยุดมอเตอร์ ดังนั้น PWM คล้ายกับการควบคุมระหัดวิดน้ำให้ตักน้ำในจังหวะคงที่ที่กระแสน้ำคงที่ ยิ่งระหัดวิดน้ำหมุนเร็วเท่าไรช่วงของ pulse ก็จะยาวขึ้น ในทางกลับกันถ้าระหัดวิดน้ำหมุนช้าช่วงของ pulse จะสั้นลง ดังนั้นเพื่อยืดอายุการใช้งานของมอเตอร์จึงควรที่จะควบคุมมอเตอร์ด้วย PWM
พิจารณาโครงสร้างโค้ดคร่าวๆของ Arduino
       โค้ดการทำงานของ Arduino มีการพัฒนาขึ้นเรื่อยๆ แต่ยังไม่มีสร้าง library ที่เกี่ยวกับตัว L298N Dual H-Bridge เพื่อควบคุมมอเตอร์ดังนั้นผู้ใช้งานจึงต้องประกาศพินเพื่อใช้งานขึ้นมาเอง สามารถใช้โค้ด int dir(number)Pin(letter) ต่อเข้ากับพินดิจิตอลที่เลือกใช้ แค่นี้ก็สามารถทำงานได้อย่างถูกต้องและช่วยให้ตัว L298N Dual H-Bridge ควบคุมมอเตอร์ได้อย่างอเนกประสงค์ถ้าบอร์ด Arduino ที่เลือกใช้งานมีพินหลายตัว และถ้าต้องการปรับความเร็วของมอเตอร์ด้วย PWM สามารถใช้คำสั่ง int speedPin(letter) แล้วต่อเข้ากับพินที่เลือกใช้ หากต้องการวิธีลัดเพื่อใช้งาน PWM ย่างรวดเร็วสามารถเลือกพินใช้งานได้ตามรายการด้านล่าง
AT MEGA –PWM 2-13 และ 44-46 ตั้งค่าเอาท์พุทของ PWM ให้เป็น 8 bit ด้วยฟังก์ชั่น analogWrite()
UNO-PWM 3, 5, 6, 9, 10 และ 11 ตั้งค่าเอาท์พุทของ PWM ให้เป็น 8 bit ด้วยฟังก์ชั่น analogWrite()


รูปที่ 1 แสดงรายละเอียดของบอร์ด
          รายละเอียดของบอร์ด
§  Out 1: ช่องต่อขั้วไฟของมอเตอร์ A
§  Out 2: ช่องต่อขั้วไฟของมอเตอร์ A
§  Out 3: ช่องต่อขั้วไฟของมอเตอร์ B
§  Out 4: ช่องต่อขั้วไฟของมอเตอร์ B

§  12V: ช่องจ่ายไฟเลี้ยงมอเตอร์ 12V (ต่อได้ตั้งแต่ 5V ถึง 35V)
§  GND: ช่องต่อไฟลบ (Ground) 
§  5V: ช่องจ่ายไฟเลี้ยงมอเตอร์ 5V (หากมีการต่อไฟเลี้ยงที่ช่อง 12V แล้ว 
§  ช่องนี้จะทำหน้าที่จ่ายไฟออก เป็น 5V Output 
§  สามารถต่อไฟจากช่องนี้ไปเลี้ยงบอร์ด Arduino ได้

§  ENA: ช่องต่อสัญญาณ PWM สำหรับมอเตอร์
§  IN1: ช่องต่อสัญญาณลอจิกเพื่อควบคุมทิศทางของมอเตอร์ A
§  IN2: ช่องต่อสัญญาณลอจิกเพื่อควบคุมทิศทางของมอเตอร์ A
§  IN3: ช่องต่อสัญญาณลอจิกเพื่อควบคุมทิศทางของมอเตอร์ B
§  IN4: ช่องต่อสัญญาณลอจิกเพื่อควบคุมทิศทางของมอเตอร์ B
§  ENB: ช่องต่อสัญญาณ PWM สำหรับมอเตอร์

สเปกทางเทคนิค
·       Dual H bridge Drive Chip : L298N
·       แรงดันสัญญาณลอจิก : 5V Drive voltage: 5V-35V
·       กระแสของสัญญาณลอจิก : 0-36mA
·       กระแสขับมอเตอร์ : สูงสุดที่ 2A (เมื่อใช้มอเตอร์เดียว)
·       กำลังไฟฟ้าสูงสุด : 25W
·       ขนาด : 43 x 43 x 26 มิลลิเมตร
·       น้ำหนัก : 26 กรัม
*มี Power Supply 5V ในตัว สามารถจ่ายไฟออกจากช่อง 5V (เพื่อจ่ายให้บอร์ด Arduino) ได้ เมื่อต่อไฟเลี้ยงเข้าที่ช่อง 12V

อุปกรณ์
1.Arduino UNO R3
2. DC Motor 1ตัว
3. L298 Motor Drive Module
การต่อเข้าใช้งานกับ Arduino
ในการต่อกับ Arduino นั้น ขา IN1,IN2,IN3 และ IN4 นั้น สามารถต่อกับพอร์ต Digital ใดๆก็ได้ เนื่องจาก 4 ขานี้ จะใช้ในการควบคุมสัญญาณลอจิกบอกทิศทางให้กับมอเตอร์ ส่วน ENA และ ENB นั้น จำเป็นที่จะต้องต่อกับพอร์ต Digital ที่รองรับ PWM เนื่องจากจะต้องใช้สัญญาณ PWM ในการควบคุมความเร็วของมอเตอร์

รูปที่ 2 แสดงการต่อใช้งานอุปกรณ์
ตัวอย่างโปรแกรม

// Declare L298N Dual H-Bridge Motor Controller directly since there is not a library to load.
// Motor 1
int dir1PinA = 4;
int dir2PinA = 5;
int speedPinA = 10; // Needs to be a PWM pin to be able to control motor speed
void setup() {  // Setup runs once per reset
            Serial.begin(9600);
//Define L298N Dual H-Bridge Motor Controller Pins
    pinMode(dir1PinA,OUTPUT);
    pinMode(dir2PinA,OUTPUT);
    pinMode(speedPinA,OUTPUT);
}
void loop() {
// Initialize the Serial interface:
int speed; // Local variable
analogWrite(speedPinA, 255);//Sets speed variable via PWM
          digitalWrite(dir1PinA, LOW);
          digitalWrite(dir2PinA, HIGH);
          Serial.println("Motor 1 Forward");
}

อ้างอิง