เซอร์โวมอเตอร์ (Servo Motor) เป็นการรวมมอเตอร์ไฟฟ้ากระแสตรง (DC Motor) เข้ากับวงจรควบคุม โดยความแตกต่างที่สำคัญของเซอร์โวมอเตอร์กับมอเตอร์แบบอื่น ๆ คือเซอร์โวมอเตอร์จะรู้ตำแหน่งที่ตัวเองอยู่ และสั่งเปลี่ยนตำแหน่งโดยการเปลี่ยนองศาได้ นิยมใช้งานในเครื่องบินบังคับ เรือบังคับ โดยใช้กำหนดทิศทางของหางเสือเป็นองศา
รูปที่ 1 ตัวอย่างการใช้งานเซอร์โวมอเตอร์ควบคุมหางเสือของเรือบังคับ (ที่มา : FT009 RC BOAT - Servo Replacement)
สนับสนุนบทความดี ๆ แบบนี้ได้ โดยเลือกสั่งซื้อสินค้ากับเรา |
|
ราคา 102.00 บาท |
|
SG90 360 degree Micro Servo เซอร์โวมอเตอร์ SG90 หมุนได้ 360 องศา ราคา 107.00 บาท |
เซอร์โวมอเตอร์(ส่วนใหญ่)ใช้แรงดันไฟฟ้า 5V และมีองศาการหมุนที่ 0 ถึงประมาณ 200 องศา (ยกเว้นมีการดัดแปลงให้หมุน 360 องศา) นอกจาก 2 ข้อนี้ที่เซอร์โวมอเตอร์ทุกรุ่นมีเหมือนกัน ยังมีอีก 4 ข้อที่เซอร์โวมอเตอร์แต่ละรุ่นมีไม่เหมือนกัน
ปัจจัยทั้ง 4 นี้ จะแปรผันตรงกับราคาของเซอร์โวมอเตอร์
ตัวอย่างข้อมูลใน Datasheet ของเซอร์โวมอเตอร์รุ่น SG90 ตาราง Dimensions & Specifications แสดงข้อมูลแรงบิด (Torque) และความเร็วในการหมุน (Speed) ของเซอร์โวมอเตอร์รุ่น SG90
รูปที่ 2 ตาราง Dimensions & Specifications แสดงข้อมูลแรงบิด (Torque) และความเร็วในการหมุน (Speed) ของเซอร์โวมอเตอร์รุ่น SG90
ตัวอย่าง ข้อมูลใน Datasheet ของเซอร์โวมอเตอร์รุ่น MG995 หัวข้อ Specifications แสดงข้อมูลแรงบิด (Torque) และความเร็วในการหมุน (Speed) ของเซอร์โวมอเตอร์รุ่น MG995 โดยแสดงไว้ 2 ค่า คือค่าที่แรงดันต่ำสุดที่เซอร์โวมอเตอร์รุ่นนี้ทำงานได้ และแรงดันสูงสุดที่เซอร์โวมอเตอร์รุ่นนี้ทำงานได้
รูปที่ 3 หัวข้อ Specifications แสดงข้อมูลแรงบิด (Torque) และความเร็วในการหมุน (Speed) ของเซอร์โวมอเตอร์รุ่น MG995
เซอร์โวมอเตอร์ประกอบด้วย 4 ส่วนหลัก คือ มอเตอร์กระแสตรง (DC Motor) ชุดเฟืองทดรอบ (Gear system) วอลุ่ม (Potentiometer หรือ VR) และวงจรควบคุม (Control Electronics)
รูปที่ 4 แสดงส่วนประกอบของเซอร์โวมอเตอร์ (ที่มา : Inside A Servo Motor - Electrical Engineering Books)
หลักการทำงานของเซอร์โวมอเตอร์เริ่มที่วงจรควบคุม เมื่อวงจรควบคุมได้รับข้อมูลองศาที่ต้องการมาแล้ว วงจรควบคุมจะคำนวณว่ามอเตอร์จะต้องหมุนในทิศทางตามเข็มนาฬิกา หรือทวนเข็มนาฬิกา เพื่อให้ไปสู่องศาที่ต้องการได้ เมื่อมอเตอร์เริ่มหมุน ตัววอลุ่มที่ติดอยู่กับชุดเฟืองมอเตอร์จะตรวจสอบตำแหน่งที่มอเตอร์หมุนไป โดยหากวอลุ่มตรวจพบว่าตำแหน่งที่มอเตอร์หมุนเริ่มใกล้กับองศาที่ผู้ใช้กำหนด วงจรส่วนควบคุมจะเริ่มสั่งให้มอเตอร์หมุนช้าลงเพื่อให้หมุนเข้าใกล้องศาที่กำหนดได้มากที่สุด เมื่อมอเตอร์หมุนได้ตำแหน่งองศาที่ถูกต้องแล้ว วงจรส่วนควบคุมจะตรวจสอบตำแหน่งของมอเตอร์เป็นระยะ ๆ โดยอ่านค่าจากวอลุ่ม หากตรวจพบว่าตำแหน่งผิดเพี้ยนไปจากค่าที่ตั้งไว้ (อันอาจเกิดจากผู้ใช้เอามือไปหมุนเล่น หรือภาระส่งผลให้ตำแหน่งเคลื่อน) วงจรควบคุมก็จะสั่งให้มอเตอร์หมุนกลับมาให้ได้ตำแหน่งเป็นระยะ ๆ
เซอร์โวมอเตอร์แบ่งออกเป็น 2 ชนิด ดังนี้
เป็นเซอร์โวมอเตอร์ที่นิยมใช้งานทั่วไป มีหลายรุ่น หลายขนาด และหลายราคา สามารถควบคุมให้หมุดได้ตามองศาที่ต้องการ โดยหมุนได้ 0 ถึง 180 องศา (ในบางรุ่นหมุนได้สุดที่ประมาณ 200 องศา)
เป็นเซอร์โวมอเตอร์ที่ส่วนใหญ่ดัดแปลงมาจากแบบ 180 องศา โดยดัดแปลงวงจรควบคุม และตัดแกนหรือนำเอาวอลุ่มออก เพื่อให้เซอร์โวมอเตอร์สามารถหมุนได้ครบรอบ เซอร์โวมอเตอร์ชนิดนี้ไม่สามารถควบคุมองศาได้ ควบคุมได้แค่ความเร็ว และทิศทางการหมุนเท่านั้น นิยมนำมาใช้เป็นมอเตอร์สำหรับรถบังคับ รถวิ่งตามเส้น เพราะอาศัยชุดเฟืองที่เซอร์โวมอเตอร์มีอยู่แล้ว ทำให้ได้แรงบิดที่มากกว่ามอเตอร์กระแสตรงปกติ รวมทั้งการควบคุมยังไม่ต้องใช้วงจรขับมอเตอร์แยก ทำให้ลดความยุ่งยากในการต่อวงจรไปได้มาก รวมทั้งประหยัดค่าใช้จ่ายด้วย
เซอร์โวมอเตอร์ชื่อรุ่นเดียวกัน แต่อาจจะมีทั้งชนิด 180 องศา และ 360 องศา จำเป็นต้องใช้ความระมัดระวังอย่างมากในการเลือกซื้อ
เซอร์โวมอเตอร์มีสาย 3 เส้น ประกอบด้วย
การควบคุมการหมุนของเซอร์โวมอเตอร์จะทำที่สาย Signal โดยป้อนสัญญาณ PWM ความถี่ 50Hz เข้าไป โดยมีความกว้างพัลส์บวกที่ 0.5mS (ค่าต่ำสุด) ถึง 2.5mS (ค่าสูงสุด) หรือ 1mS (ค่าต่ำสุด) ถึง 2mS (ค่าสูงสุด) ตามแต่รุ่นของเซอร์โวมอเตอร์ โดยหากป้อนสัญญาณ PWM ที่มีความกว้างช่วงบวกเข้าไปเท่าค่าต่ำสุด เซอร์โวมอเตอร์จะหมุนไปที่ 0 องศา หากป้อนสัญญาณ PWM เข้าไปเท่าค่าสูงสุด เซอร์โวมอเตอร์จะหมุนไปที่ 180 องศา
รูปที่ 5 สัญญาณ PWM ที่ส่งผลต่อองศาการหมุนของเซอร์โวมอเตอร์
การหาค่าความกว้างช่วงบวกของสัญญาณ PWM จากค่าองศา สามารถหาได้จากสูตร
ตัวอย่าง หากต้องการให้ Servo มอเตอร์ที่ทำงาน 0.5mS - 2.5mS หมุนไปที่ 120 องศา ความกว้างพัลส์บวกจะเป็นเท่าใด
จึงสรุปได้ว่า ความกว้างพัลส์บวก คือ 1.833mS
สัญญาณ PWM เกิดจากพัลส์บวกและพัลส์ลบ การหาความกว้างพัลส์ลบต้องหาคาบเวลาของสัญญาณก่อน และคาบเวลาของสัญญาณหาได้จากความถี่ โดยใช้สูตร
เมื่อ
เนื่องจากเซอร์โวมอเตอร์ทำงานด้วยสัญญาณ PWM ความถี่ 50Hz ดังนั้นคาบเวลาของสัญญาณจึงหาได้ดังนี้
จึงสรุปได้ว่าที่ความถี่ 50Hz มีคาบเวลาของสัญญาณเป็น 20mS
คาบเวลาของสัญญาณเกิดจากการนำความกว้างพัลส์บวกมาบวกกับความกว้างพัลส์ลบ (T=t1+t2) ดังนั้นหากรู้กว้างพัลส์บวก และรู้คาบเวลาของสัญญาณ ก็จะหาความกว้างพัลส์ลบได้ จากสูตร
เมื่อ
เมื่อแทนค่าความกว้างคลื่นและความกว้างพัลส์บวกลงไป จะได้
จึงสรุปว่า ความกว้างพัลส์ลบมีค่า 18.167mS
ต่อเซอร์โวมอเตอร์เข้ากับบอร์ด Arduino Uno R3 ดังนี้ ตัวอย่างใช้เซอร์โวมอเตอร์รุ่น SG90
รูปที่ 6 การต่อเซอร์โวมอเตอร์เข้ากับบอร์ด Arduino Uno R3
Arduino Uno R3 | เซอร์โวมอเตอร์ |
9 | Signal |
5V | VCC |
GND | GND |
จากตัวอย่างการคำนวณหาค่าความกว้างพัลส์บวก สามารถเขียนโค้ดในโปรแกรม Arduino ได้ดังนี้
หลังจากต่อวงจรครบแล้ว และอัพโหลดโปรแกรมลงไป เซอร์โวมอเตอร์จะหมุนไปที่ 120 องศา ทันที
แต่การสั่งงานเซอร์โวมอเตอร์โดยใช้คำสั่ง delay() มักไม่เป็นที่นิยมใช้งาน เพราะจะทำให้การพัฒนาโปรแกรมต่อทำได้ยาก ดังนั้นการสั่งงานเซอร์โวจึงมักใช้วงจรส่วน Timer ที่มีอยู่ในไมโครคอนโทรลเลอร์ทุกเบอร์อยู่แล้วมาสั่งงานแทน
สำหรับแพลตฟอร์ม Arduino ไม่จำเป็นต้องเขียนโปรแกรมสั่งงาน Timer เอง เนื่องจากแพลตฟอร์มมีไลบรารี่ Servo ให้อยู่แล้ว ทำมาเพื่อให้การเขียนโปรแกรมสั่งงานเซอร์โวมอเตอร์ในแพลตฟอร์ม Arduino ทำได้ง่ายมากขึ้น โค้ดโปรแกรมตัวอย่างการใช้งานไลบรารี่ Servo ดังโค้ดด้านล่าง
มีคำสั่งที่น่าสนใจดังนี้
บรรทัดที่ 3 เป็นการสร้างออปเจค myservo จากคลาส Servo โดยคำสั่งนี้ 1 คำสั่ง จะใช้ควบคุมเซอร์โวมอเตอร์ได้ 1 ตัวเท่านั้น
บรรทัดที่ 6 คำสั่ง myservo.attach(); กำหนดขา Signal ของเซอร์โวมอเตอร์ต่อเข้ากับบอร์ด Arduino จากวงจรด้านบนให้ต่อขา Signal ไว้ที่ขา 9 ในบรรทัดนี้จึงใส่ 9
บรรทัดที่ 10 12 และ 14 คำสั่ง myservo.write(); ใช้กำหนดองศาที่ต้องการให้เซอร์โวมอเตอร์หมุนไป
เซอร์โวมอเตอร์แบบ 360 องศา การควบคุมองศาจะเป็นการควบคุมความเร็วและทิศทางแทน โดยหาก
การเขียนโปรแกรมบนแพลตฟอร์ม Arduino ของเซอร์โว 360 องศา จะเหมือนกันกับแบบ 180 องศา เพียงแต่การกำหนดองศา จะเป็นตัวกำหนดทิศทางการหมุน และความเร็วในการหมุน
ตัวอย่างโค้ดโปรแกรมควบคุมเซอร์โวมอเตอร์ 360 องศา มีดังนี้
เซอร์โวมอเตอร์หากกำหนดองศาที่ต้องการให้หมุนแตกต่างจากองศาที่อยู่ ณ ปัจจุบันมาก จะทำให้เซอร์โวมอเตอร์หมุนเปลี่ยนองศาเร็วมาก ใบบางงานที่ไม่ต้องการให้เซอร์โวมอเตอร์เปลี่ยนองศาด้วยความเร็ว จำเป็นต้องใช้คำสั่ง for loop เข้ามาช่วยให้การเปลี่ยนองศาของเซอร์โวมอเตอร์ช้าลง
หากองศาก่อนหน้ามีค่าน้อยกว่าองศาที่ต้องการให้เซอร์โวมอเตอร์หมุนไป ให้ใช้ for loop วิ่งค่าองศาในตัวแปร angle เป็นค่าขององศาเก่า ไปค่าองศาใหม่ ตัวอย่างโค้ดให้วิ่งจาก 40 องศา ไป 160 องศา อย่างช้า ๆ เป็นดังด้านล่าง
แต่หากองศาเก่ามีค่ามากกว่าองศาใหม่ เงื่อนไขในคำสั่ง for loop จะไปเปลี่ยนไป ตัวอย่างโค้ดให้วิ่งจาก 160 องศา ไป 40 องศา อย่างช้า ๆ เป็นดังด้านล่าง
เซอร์โวมอเตอร์เป็นอุปกรณ์ที่ใช้กระแสไฟฟ้ามาก หากใช้เซอร์โวมอเตอร์รุ่นเล็กอย่าง SG90 หรือ MG90S ไฟที่มาจากช่อง USB ของคอมฯ ยังพอจะเลี้ยงได้อยู่ แต่หากเป็นเซอร์โวมอเตอร์ที่มีขนาดใหญ่ แรงบิดสูง อย่าง Futaba S3003 หรือ MG995 จำเป็นต้องใช้แหล่งจ่ายไฟภายนอกเพิ่ม โดยอาจจะเลือกใช้อแดปเตอร์ 5V มาจ่ายไฟเลี้ยงเซอร์โวมอเตอร์เพิ่ม หรือเลือกใช้สวิตชิ่ง 5V ก็ได้เช่นกัน
รูปที่ 7 ตัวอย่างการต่อไฟเลี้ยงเซอร์โวมอเตอร์เพิ่มเติมโดยใช้สวิตชิ่ง 5V 5A