เซอร์โวมอเตอร์มีประโยชน์อย่างมากในระบบอิเล็กทรอนิกส์และระบบฝังตัว คุณสามารถใช้เซอร์โวมอเตอร์ได้ทุกที่รอบตัวคุณใช้ในของเล่นหุ่นยนต์ถาดซีดีของคอมพิวเตอร์รถยนต์เครื่องบิน ฯลฯ เหตุผลของขอบเขตที่กว้างนี้คือเซอร์โวมอเตอร์มีความน่าเชื่อถือและแม่นยำมาก เราจะหมุนไปมุมไหนก็ได้ มีให้เลือกมากมายตั้งแต่มอเตอร์แรงบิดสูงไปจนถึงมอเตอร์แรงบิดต่ำ ในบทช่วยสอนนี้เราจะเชื่อมต่อเซอร์โวมอเตอร์กับไมโครคอนโทรลเลอร์ 8051 (AT89S52)
ครั้งแรกที่เราต้องเข้าใจหลักการทำงานของเซอร์โวมอเตอร์เซอร์โวมอเตอร์ทำงานบนหลักการPWM (การมอดูเลตความกว้างพัลส์)หมายความว่ามุมของการหมุนถูกควบคุมโดยระยะเวลาของพัลส์ที่ใช้กับ PIN ควบคุม โดยทั่วไปเซอร์โวมอเตอร์ประกอบด้วยมอเตอร์กระแสตรงซึ่งควบคุมโดยตัวต้านทานตัวแปร (โพเทนชิออมิเตอร์) และเกียร์บางตัว มอเตอร์กระแสตรงความเร็วสูงจะถูกแปลงเป็นแรงบิดโดย Gears เรารู้ว่า WORK = FORCE X DISTANCE ใน DC motor Force น้อยกว่าและระยะทาง (ความเร็ว) สูงและใน Servo แรงจะสูงและระยะทางน้อยกว่า โพเทนชิออมิเตอร์เชื่อมต่อกับเพลาเอาท์พุทของเซอร์โวเพื่อคำนวณมุมและหยุดมอเตอร์กระแสตรงตามมุมที่ต้องการ
เซอร์โวมอเตอร์สามารถหมุนได้ตั้งแต่ 0 ถึง 180 องศา แต่สามารถหมุนได้ถึง 210 องศาขึ้นอยู่กับการผลิต ระดับการหมุนนี้สามารถควบคุมได้โดยใช้พัลส์ LOGIC ระดับ 1 เป็นระยะเวลาระหว่าง 1ms ถึง 2ms 1 มิลลิวินาทีสามารถหมุนเซอร์โวเป็น 0 องศา 1.5 มิลลิวินาทีสามารถหมุนได้ถึง 90 องศาและพัลส์ 2 มิลลิวินาทีสามารถหมุนได้ 180 องศา ระยะเวลาระหว่าง 1 ถึง 2 มิลลิวินาทีสามารถหมุนเซอร์โวมอเตอร์ไปยังมุมใดก็ได้ระหว่าง 0 ถึง 180 องศา
แผนภาพวงจรและคำอธิบายการทำงาน
เซอร์โวมอเตอร์มีสายไฟสามสายสีแดงสำหรับ Vcc (แหล่งจ่ายไฟ) สีน้ำตาลสำหรับกราวด์และสีส้มเป็นสายควบคุม สายควบคุมสามารถเชื่อมต่อกับ 8051 เราได้เชื่อมต่อกับ Pin 2.1 ของ 8051 ตอนนี้เราต้องเก็บพินนี้ไว้ที่ Logic 1 เป็นเวลา 1ms เพื่อหมุน 0 องศา 1.5ms สำหรับ 90 องศา 2 ms สำหรับ 180 องศา เราใช้ชิป Timers ของ 8051 เพื่อสร้างความล่าช้า เราได้สร้างการหน่วงเวลา 50us ผ่านฟังก์ชัน“ servo_delay” และใช้ลูป“ for” เพื่อสร้างการหน่วงเวลาในหลาย ๆ 50us
เราใช้ Timer 0 และในโหมด 1 ดังนั้นเราจึงใส่ 01H ในทะเบียน TMOD โหมด 1 คือโหมดจับเวลา 16 บิตและ TH0 มีไบต์สูงและ TL0 มีตัวจับเวลา 16 บิตต่ำ เราได้ใส่ FFD2 ในการลงทะเบียนตัวจับเวลา 16 บิต FF ใน TH0 และ D2 ใน TL0 การใส่ FFD2 จะทำให้เกิดความล่าช้าโดยประมาณ 50 us ด้วยคริสตัล 11.0592MHz TR0 และ TF0 เป็นบิตของทะเบียน TCON ขา TR ที่ใช้เพื่อเริ่มจับเวลาเมื่อตั้งค่าและหยุดเมื่อรีเซ็ต (0) TF คือแฟล็กโอเวอร์โฟลว์ที่กำหนดโดยฮาร์ดแวร์เมื่อโอเวอร์โฟลว์และจำเป็นต้องรีเซ็ตโดยซอฟต์แวร์ โดยทั่วไป TF จะบอกความสมบูรณ์ของ Timer และตั้งค่าโดยฮาร์ดแวร์เมื่อ 16 ตัวจับเวลาเปลี่ยนจาก FFFFH ถึง 0000H คุณสามารถอ่านเกี่ยวกับ“ ตัวจับเวลา 8051” เพื่อทำความเข้าใจการคำนวณมูลค่าในการลงทะเบียนตัวจับเวลาเพื่อสร้างความล่าช้า 50 us
ตอนนี้เมื่อวัดจาก CRO ฟังก์ชัน servo_delay 13 ลูปจะให้ความล่าช้า 1ms ดังนั้นเราจึงเริ่มจาก 1ms (13 ลูป) และไปที่ 2 ms (26 ลูป) เพื่อหมุนเซอร์โวจาก 0 ถึง 180 องศา แต่เราค่อยๆเพิ่มความล่าช้าจาก 1ms เราได้แบ่งหน้าต่าง 1ms ถึง 2 ms ออกเป็น 7 ส่วนเช่น 1.14ms, 1.28 ms, 1.42ms เป็นต้นดังนั้นเซอร์โวจะหมุนหลาย ๆ 26 องศา (180/7) หลังจาก 180 มันจะกลับไปที่ 0 องศาโดยอัตโนมัติ