- เซอร์โวมอเตอร์คืออะไร?
- การเชื่อมต่อเซอร์โวมอเตอร์กับไมโครคอนโทรลเลอร์:
- การเขียนโปรแกรมเซอร์โวมอเตอร์ด้วยไมโครคอนโทรลเลอร์ PICF877A PIC:
- แผนภูมิวงจรรวม:
- การจำลองและการตั้งค่าฮาร์ดแวร์:
นี่คือวิธีการสอนของเราที่ 11 ของการเรียนรู้ไมโครคอนโทรลเลอร์ PIC ใช้ MPLAB XC8 ในการกวดวิชานี้เราจะได้เรียนรู้วิธีการควบคุม Servo Motor กับไมโครคอนโทรลเลอร์ หากคุณเคยทำงานกับเซอร์โวมอเตอร์แล้วคุณสามารถข้ามครึ่งแรกของบทช่วยสอนนี้ได้ แต่ถ้าคุณยังใหม่กับเซอร์โวมอเตอร์ให้อ่านต่อ
จนถึงตอนนี้เราได้ครอบคลุมบทเรียนพื้นฐานมากมายเช่น LED กระพริบด้วย PIC, ตัวจับเวลาใน PIC, การเชื่อมต่อ LCD, การเชื่อมต่อ 7 ส่วน, ADC โดยใช้ PIC เป็นต้นหากคุณเป็นผู้เริ่มต้นอย่างแท้จริงโปรดไปที่รายการบทช่วยสอน PIC ทั้งหมดที่นี่และ เริ่มเรียนรู้
ในบทช่วยสอนก่อนหน้านี้เราได้เรียนรู้วิธีสร้างสัญญาณ PWM โดยใช้ไมโครคอนโทรลเลอร์ PIC สัญญาณถูกสร้างขึ้นตามค่าที่อ่านได้จากโพเทนชิออมิเตอร์ หากคุณเข้าใจโปรแกรมทั้งหมดแล้วขอแสดงความยินดีที่คุณได้เข้ารหัสสำหรับเซอร์โวมอเตอร์แล้วเช่นกัน ใช่เซอร์โวมอเตอร์ตอบสนองต่อสัญญาณ PWM (ซึ่งเราสร้างโดยใช้ตัวจับเวลาที่นี่) เราจะเรียนรู้ว่าทำไมและอย่างไรในบทช่วยสอนนี้ เราจะจำลองและสร้างการตั้งค่าฮาร์ดแวร์สำหรับโปรเจ็กต์นี้และคุณสามารถดูวิดีโอโดยละเอียดได้ที่ท้ายบทช่วยสอนนี้
เซอร์โวมอเตอร์คืออะไร?
เซอร์โวมอเตอร์เป็นแอคชูเอเตอร์ประเภทหนึ่ง (ส่วนใหญ่เป็นวงกลม) ที่ช่วยให้สามารถควบคุมเชิงมุมได้ มีเซอร์โวมอเตอร์หลายประเภท แต่ในบทช่วยสอนนี้ให้เรามุ่งเน้นไปที่เซอร์โวมอเตอร์งานอดิเรกที่แสดงด้านล่าง
เซอร์โวงานอดิเรกเป็นที่นิยมเนื่องจากเป็นวิธีการควบคุมการเคลื่อนไหวที่ไม่แพง พวกเขาเป็นโซลูชันนอกชั้นวางสำหรับ R / C ส่วนใหญ่และความต้องการของนักทำงานอดิเรกของหุ่นยนต์ นอกจากนี้ยังไม่จำเป็นต้องออกแบบระบบควบคุมสำหรับแต่ละแอปพลิเคชัน
เซอร์โวมอเตอร์งานอดิเรกส่วนใหญ่มีแองเจิลหมุน 0-180 °แต่คุณยังสามารถรับเซอร์โวมอเตอร์ 360 °ได้หากคุณสนใจ บทช่วยสอนนี้ใช้เซอร์โวมอเตอร์ 0-180 ° เซอร์โวมอเตอร์มีสองประเภทตามเกียร์หนึ่งคือเซอร์โวมอเตอร์เกียร์พลาสติกและอีกแบบคือเซอร์โวมอเตอร์เกียร์โลหะ เกียร์โลหะถูกใช้ในสถานที่ที่มอเตอร์มีการสึกหรอมากขึ้น แต่ก็มีราคาสูงเท่านั้น
เซอร์โวมอเตอร์ได้รับการจัดอันดับเป็นกก. / ซม. (กิโลกรัมต่อเซนติเมตร) เซอร์โวมอเตอร์สำหรับงานอดิเรกส่วนใหญ่ได้รับการจัดอันดับที่ 3 กก. / ซม. หรือ 6 กก. / ซม. หรือ 12 กก. / ซม. กก. / ซม. นี้บอกให้ทราบว่าเซอร์โวมอเตอร์ของคุณสามารถยกน้ำหนักได้เท่าใดในระยะทางหนึ่ง ตัวอย่างเช่น: เซอร์โวมอเตอร์ขนาด 6 กก. / ซม. ควรสามารถยกได้ 6 กก. หากโหลดถูกระงับห่างจากเพลามอเตอร์ 1 ซม. ยิ่งระยะทางมากขึ้นความสามารถในการรับน้ำหนักก็จะยิ่งน้อยลง เรียนรู้พื้นฐานของเซอร์โวมอเตอร์ที่นี่
การเชื่อมต่อเซอร์โวมอเตอร์กับไมโครคอนโทรลเลอร์:
การเชื่อมต่องานอดิเรกเซอร์โวมอเตอร์กับ MCU นั้นง่ายมาก เซอร์โวได้สามสายที่ออกมาของพวกเขาซึ่งจะใช้สองรายการสำหรับอุปทาน (บวกและลบ) และอีกหนึ่งจะใช้สำหรับสัญญาณที่จะส่งจาก MCU ในบทช่วยสอนนี้เราจะใช้MG995 Metal Gear Servo Motorซึ่งมักใช้กับบอทมนุษย์ในรถยนต์ RC เป็นต้นรูปภาพของ MG995 แสดงอยู่ด้านล่าง:
รหัสสีของเซอร์โวมอเตอร์ของคุณอาจแตกต่างกันดังนั้นให้ตรวจสอบแผ่นข้อมูลของคุณ
เซอร์โวมอเตอร์ทั้งหมดทำงานโดยตรงกับรางจ่าย + 5V ของคุณ แต่เราต้องระวังปริมาณกระแสไฟฟ้าที่มอเตอร์จะใช้หากคุณวางแผนที่จะใช้เซอร์โวมอเตอร์มากกว่าสองตัวควรออกแบบแผงป้องกันเซอร์โวที่เหมาะสม ในบทช่วยสอนนี้เราจะใช้เซอร์โวมอเตอร์ตัวเดียวเพื่อแสดงวิธีการตั้งโปรแกรม PIC MCU ของเราเพื่อควบคุมมอเตอร์ ตรวจสอบลิงค์ด้านล่างสำหรับการเชื่อมต่อ Servo Motor กับไมโครคอนโทรลเลอร์อื่น ๆ:
- เซอร์โวมอเตอร์เชื่อมต่อกับไมโครคอนโทรลเลอร์ 8051
- การควบคุมเซอร์โวมอเตอร์โดยใช้ Arduino
- การสอนเซอร์โวมอเตอร์ Raspberry Pi
- เซอร์โวมอเตอร์พร้อมไมโครคอนโทรลเลอร์ AVR
การเขียนโปรแกรมเซอร์โวมอเตอร์ด้วยไมโครคอนโทรลเลอร์ PICF877A PIC:
ก่อนที่เราจะเริ่มการเขียนโปรแกรมสำหรับเซอร์โวมอเตอร์เราควรทราบว่าจะส่งสัญญาณประเภทใดเพื่อควบคุมเซอร์โวมอเตอร์ เราควรตั้งโปรแกรมให้ MCU ส่งสัญญาณ PWM ไปยังสายสัญญาณของเซอร์โวมอเตอร์ มีวงจรควบคุมภายในเซอร์โวมอเตอร์ซึ่งอ่านรอบการทำงานของสัญญาณ PWM และวางตำแหน่งเพลาของเซอร์โวมอเตอร์ในตำแหน่งที่เกี่ยวข้องดังแสดงในภาพด้านล่าง
เซอร์โวมอเตอร์แต่ละตัวทำงานด้วยความถี่ PWM ที่แตกต่างกัน (ความถี่ที่พบมากที่สุดคือ 50HZ ซึ่งใช้ในบทช่วยสอนนี้) ดังนั้นรับแผ่นข้อมูลของมอเตอร์ของคุณเพื่อตรวจสอบว่าเซอร์โวมอเตอร์ของคุณทำงานในช่วงเวลาใด
รายละเอียดสัญญาณ PWM สำหรับ Tower pro MG995 ของเราแสดงอยู่ด้านล่าง
จากสิ่งนี้เราสามารถสรุปได้ว่ามอเตอร์ของเราทำงานร่วมกับ PWM Period 20ms (50Hz) ดังนั้นความถี่ของสัญญาณ PWM ของเราควรตั้งไว้ที่ 50Hz ความถี่ของ PWM ที่เราตั้งไว้ในบทช่วยสอนก่อนหน้านี้คือ 5 KHz การใช้แบบเดียวกันจะไม่ช่วยเราได้
แต่เรามีปัญหาที่นี่ PIC16F877A ไม่สามารถสร้างสัญญาณความถี่ PWM ต่ำโดยใช้โมดูล CCP ตามแผ่นข้อมูลค่าต่ำสุดที่สามารถตั้งได้สำหรับความถี่ PWM คือ 1.2 KHz ดังนั้นเราจึงต้องทิ้งแนวคิดในการใช้โมดูล CCP และหาวิธีสร้างสัญญาณ PWM ของเราเอง
ดังนั้นในบทช่วยสอนนี้เราจะใช้โมดูลตัวจับเวลาเพื่อสร้างสัญญาณ PWM ด้วย ความถี่50Hzและเปลี่ยนรอบการทำงานเพื่อควบคุมนางฟ้าของเซอร์โวมอเตอร์ หากคุณยังใหม่กับตัวจับเวลาหรือ ADC กับ PIC โปรดกลับไปที่บทช่วยสอนนี้เพราะฉันจะข้ามเนื้อหาส่วนใหญ่ไปเนื่องจากเราได้กล่าวถึงสิ่งเหล่านี้แล้ว
เราเริ่มต้นโมดูล Timer ของเราด้วย Prescaler ที่ 32 และทำให้ล้นสำหรับทุกๆ 1us ตามเอกสารข้อมูลของเรา PWM ควรมีระยะเวลา 20ms เท่านั้น ดังนั้นเวลาตรงและเวลานอกของเราควรจะเท่ากับ 20 มิลลิวินาที
OPTION_REG = 0b00000100; // Timer0 พร้อมความถี่ภายนอกและ 32 เป็นตัวตั้งค่าล่วงหน้า TMR0 = 251; // โหลดค่าเวลาสำหรับ 1us delayValue ได้ระหว่าง 0-256 เท่านั้น TMR0IE = 1; // เปิดใช้งานบิตขัดจังหวะตัวจับเวลาในการลงทะเบียน PIE1 GIE = 1; // เปิดใช้งาน Global Interrupt PEIE = 1; // เปิดใช้งานการขัดจังหวะอุปกรณ์ต่อพ่วง
ดังนั้นในฟังก์ชันอินเตอร์รัปต์รูทีนของเราเราจะเปิดพิน RB0 ตามเวลาที่กำหนดและปิดมันสำหรับเวลาในการคว้าน (20ms - on_time) ค่าของเวลาตรงสามารถระบุได้โดยใช้โมดูลโพเทนชิออมิเตอร์และ ADC การขัดจังหวะดังแสดงด้านล่าง
oid interrupt timer_isr () {if (TMR0IF == 1) // Timer overflown {TMR0 = 252; / * โหลดค่าตัวจับเวลา (หมายเหตุ: Timervalue คือ 101 instaed จาก 100 เนื่องจาก TImer0 ต้องการสองคำสั่ง Cycles เพื่อเริ่มการเพิ่ม TMR0 * / TMR0IF = 0; // ล้างค่าสถานะการขัดจังหวะตัวจับเวลา ++;} if (count> = on_time) { RB0 = 1; // เติมเต็มค่าสำหรับการกะพริบ LEDs} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
ภายใน while loop ของเราเราเพียงแค่อ่านค่าของโพเทนชิออมิเตอร์โดยใช้โมดูล ADC และอัปเดตเวลาตรงของ PWM โดยใช้ค่าที่อ่านได้
ในขณะที่ (1) {pot_value = (ADC_Read (4)) * 0.039; on_time = (170-pot_value); }
ด้วยวิธีนี้เราได้สร้างสัญญาณ PWM ว่าใครเป็น Period คือ 20ms และมีรอบการทำงานที่แปรผันซึ่งสามารถตั้งค่าได้โดยใช้โพเทนชิออมิเตอร์ รหัสที่สมบูรณ์ได้รับด้านล่างในส่วนรหัส
ตอนนี้ให้ตรวจสอบผลลัพธ์โดยใช้การจำลองโปรตีอุสและดำเนินการต่อกับฮาร์ดแวร์ของเรา
แผนภูมิวงจรรวม:
หากคุณได้พบกับบทช่วยสอน PWM แล้วแผนผังของบทช่วยสอนนี้จะเหมือนกันยกเว้นว่าเราจะเพิ่มเซอร์โวมอเตอร์แทนไฟ LED
การจำลองและการตั้งค่าฮาร์ดแวร์:
ด้วยความช่วยเหลือของการจำลอง Proteus เราสามารถตรวจสอบสัญญาณ PWM โดยใช้ออสซิลโลสโคปและตรวจสอบแองเจิลที่หมุนของเซอร์โวมอเตอร์ ภาพรวมบางส่วนของการจำลองแสดงอยู่ด้านล่างซึ่งสามารถสังเกตเห็นนางฟ้าหมุนของเซอร์โวมอเตอร์และรอบการทำงาน PWM เพื่อเปลี่ยนแปลงไปตามโพเทนชิออมิเตอร์ ตรวจสอบวิดีโอแบบเต็มเพิ่มเติมเกี่ยวกับการหมุนที่ PWM ที่แตกต่างกันในตอนท้าย
ดังที่เราเห็นนางฟ้าการหมุนของเซอร์โวเปลี่ยนไปตามค่าโพเทนชิออมิเตอร์ ตอนนี้ให้เราดำเนินการตั้งค่าฮาร์ดแวร์ของเรา
ในการตั้งค่าฮาร์ดแวร์เราเพิ่งถอดบอร์ด LED และเพิ่มเซอร์โวมอเตอร์ดังที่แสดงในแผนผังด้านบน
ฮาร์ดแวร์ดังแสดงในภาพด้านล่าง:
วิดีโอด้านล่างแสดงให้เห็นว่าเซอร์โวมอเตอร์ที่ทำปฏิกิริยากับตำแหน่งต่างๆของมิเตอร์
นั่นแหละ!! เราได้เชื่อมต่อเซอร์โวมอเตอร์เข้ากับไมโครคอนโทรลเลอร์ PICแล้วตอนนี้คุณสามารถใช้ความคิดสร้างสรรค์ของคุณเองและค้นหาแอปพลิเคชันสำหรับสิ่งนี้ได้ มีโครงการมากมายที่ใช้เซอร์โวมอเตอร์