วันนี้เรามาพูดถึงการควบคุมมอเตอร์กระแสตรงกันหน่อย (ขอโฆษณานิดนะครับ ของที่ใช้ในการทำอยู่ใน Arduino Stater Kit 1) แต่บอกไว้ก่อนนะครับ ผมกะจะเขียนบทความแบ่งออกเป็นตอนๆ โดยจะมีเนื้อหาในการควบคุมมอเตอร์ชนิดต่างๆ ดังนี้ครับ
- ง่ายสุดก็ DC motor หรือ มอเตอร์กระแสตรง ซัก 2 ตอน โดยว่ากันถึงการควบคุมทิศการหมุน และ การควบคุมความเร็วรอบ
- ต่อมาก็ Servo motor ซัก 2 ตอน
- และปิดท้ายด้วย Stepping Motor 2 ตอน ครับ
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 เปืดวงจร
ทีนี้จะทำอย่างไรให้การ เปิดปิดเป็นแบบที่ง่ายกว่านี้ คำตอบก็คือ ใช้อุปกรณ์สารกึงตัวนำเช่น 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 pinsconst int in2Pin = 4;const int in3Pin = 3; // H-Bridge pins for second motorconst 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 motordigitalWrite(in1Pin,LOW);digitalWrite(in2Pin,HIGH);//second motordigitalWrite(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);}}} |
ไม่มีความคิดเห็น:
แสดงความคิดเห็น