ในการประยุกต์ใช้งานไมโครคอนโทรลเลอร์ตั้งแต่อดีตจนถึงปัจจุบัน สิ่งที่นำไปประยุกต์ใช้งานที่แพร่หลายอย่างหนึ่งคือการนำไปควบคุมการทำงานของมอเตอร์ไฟฟ้ากระแสตรง เช่นการควบคุมการเคลื่อนไหวของหุ่นยนต์ เนื่องจากมอเตอร์ไฟฟ้ากระแสตรงสามารถใช้พลังงานจากแบตเตอรี ซึ่งจะต้องบรรจุอยู่ใยตัวหุ่นยนต์ และอีกประการหนึ่งคือมอเตอร์ไฟฟ้ากระแสตรงสามารถควบคุมการทำงานได้ง่าย
*ภาพจาก 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; } } |
การต่อจำลองการทำงาน ทำได้ดังรูป
โปรดติดตามในบทความตอนต่อไป
ครูประภาส สุวรรณเพชร