คำแนะนำ-โลโก้

คำแนะนำการควบคุมความเร็วมอเตอร์ VHDL ตัดสินใจทิศทางและความเร็วตัวควบคุมความเร็วซ้ายและขวา

คำแนะนำ - VHDL- มอเตอร์ - ควบคุมความเร็ว - ตัดสินใจ - ทิศทางและความเร็ว - ซ้ายและขวา - ตัวควบคุมความเร็ว - ผลิตภัณฑ์

บันทึก: หน้านี้เป็นส่วนหนึ่งของโครงสร้างที่ใหญ่ขึ้น โปรดตรวจสอบให้แน่ใจว่าคุณเริ่มต้นที่นี่ เพื่อให้คุณเข้าใจว่าสิ่งต่อไปนี้เหมาะสมกับโครงการขนาดใหญ่ตรงไหน

เกินview

การควบคุมความเร็วและทิศทางของมอเตอร์เป็นหนึ่งในสองแผนกหลักในหุ่นยนต์ตรวจจับแสง อีกส่วนหนึ่งคือแผนกตรวจจับแสงหรือเครื่องตรวจจับแสง ในขณะที่แผนกตรวจจับแสงมุ่งเน้นไปที่การมองเห็นของหุ่นยนต์ ส่วนแผนกควบคุมความเร็วและทิศทางของมอเตอร์จะมุ่งเน้นไปที่การเคลื่อนไหวของหุ่นยนต์ ข้อมูลกระบวนการควบคุมความเร็วและทิศทางของมอเตอร์ที่ได้รับจากแผนกโฟโตตรวจจับ และให้เอาท์พุตทางกายภาพในรูปแบบของการเคลื่อนที่ของมอเตอร์

วัตถุประสงค์ของแผนกนี้คือเพื่อควบคุมความเร็วและทิศทางของมอเตอร์ทั้งซ้ายและขวาของหุ่นยนต์ค้นหาแสง ในการตัดสินใจค่าเหล่านี้ คุณจะต้องมีขนาดและตำแหน่งของแสงที่กล้องจับได้และประมวลผลโดย Thresholding คุณจะต้องใช้ความเร็วที่วัดได้ของมอเตอร์แต่ละตัวด้วย จากอินพุตเหล่านี้ คุณจะสามารถส่งออกค่า PWM (การปรับความกว้างพัลส์) สำหรับมอเตอร์แต่ละตัวได้

เพื่อให้บรรลุเป้าหมายนี้ คุณจะต้องสร้างโมดูล VHDL เหล่านี้ (มีลิงก์ด้านล่างด้วย):

  1. การควบคุม
  2. การคำนวณข้อผิดพลาด
  3. การแปลงไบนารี
  4.  การไม่มีแหล่งกำเนิดแสง

คุณสามารถดูรหัส VHDL สำหรับแผนกนี้ได้ที่นี่

เสบียง
เราขอแนะนำให้เขียนโค้ดด้วย ISE Design Suite 14.7 เนื่องจากสามารถใช้เพื่อทดสอบโค้ดใน VHDL ได้เช่นกัน อย่างไรก็ตาม หากต้องการอัปโหลดโค้ดลงใน BASYS 3 คุณจะต้องติดตั้ง Vivado (เวอร์ชัน 2015.4 หรือ 2016.4) และเขียนข้อจำกัดด้วยนามสกุล .xdcคำแนะนำ - VHDL - มอเตอร์ - ควบคุมความเร็ว - ตัดสินใจ - ทิศทางและความเร็ว - ซ้ายและขวา - ตัวควบคุมความเร็ว - fig-1

การควบคุมความเร็วมอเตอร์ VHDL: ตัดสินใจทิศทางและความเร็ว, ตัวควบคุมความเร็วด้านซ้ายและขวา: หน้า 1

ขั้นตอนการสอน

ขั้นตอนที่ 1: การควบคุม
เพื่อให้เข้าใจถึงวิธีการควบคุมพฤติกรรมของหุ่นยนต์มองหาแสง เราจะอธิบายพฤติกรรมที่ต้องการของหุ่นยนต์เมื่อเห็นแหล่งกำเนิดแสง พฤติกรรมนี้จะถูกควบคุมตามตำแหน่งและขนาดของแหล่งกำเนิดแสงคำแนะนำ - VHDL- มอเตอร์ - ความเร็ว - การควบคุม - ตัดสินใจ - ทิศทางและความเร็ว - ซ้ายและขวา - ตัวควบคุมความเร็ว -

อัลกอริธึมที่ใช้จะคล้ายคลึงกับตัวควบคุมหุ่นยนต์ RC โดยมีคันโยกหนึ่งอันที่สามารถหมุนไปทางซ้ายหรือขวาได้ และอีกคันหนึ่งที่สามารถหมุนไปข้างหน้าหรือข้างหลังได้

ในการค้นหาแสง คุณต้องการให้หุ่นยนต์ตัวนี้เคลื่อนที่เป็นเส้นตรงหากตำแหน่งของแหล่งกำเนิดแสงอยู่ตรงหน้าหุ่นยนต์ ในการทำเช่นนั้น คุณต้องการให้มอเตอร์ทั้งซ้ายและขวามีความเร็วเท่ากัน หากไฟอยู่ที่ด้านซ้ายของหุ่นยนต์ คุณต้องการให้มอเตอร์ด้านขวาเคลื่อนที่เร็วกว่ามอเตอร์ด้านซ้าย เพื่อให้หุ่นยนต์สามารถหมุนไปทางซ้ายเข้าหาแสงได้ ในทางกลับกัน หากแสงอยู่ทางด้านขวาของหุ่นยนต์ คุณต้องการให้มอเตอร์ด้านซ้ายเคลื่อนที่เร็วกว่ามอเตอร์ด้านขวา เพื่อให้หุ่นยนต์สามารถหมุนไปทางขวาไปทางแสงได้ สิ่งนี้คล้ายคลึงกับคันโยกด้านซ้ายของตัวควบคุม RC ซึ่งคุณสามารถควบคุมได้ว่าคุณต้องการเคลื่อนหุ่นยนต์ไปทางซ้าย ขวา หรือตรง

จากนั้น คุณต้องการให้หุ่นยนต์เคลื่อนที่ไปข้างหน้าหากแหล่งกำเนิดแสงอยู่ไกล (แหล่งกำเนิดแสงขนาดเล็ก) หรือเคลื่อนที่ถอยหลังหากแหล่งกำเนิดแสงที่ตรวจพบอยู่ใกล้เกินไป (แหล่งกำเนิดแสงขนาดใหญ่) คุณยังต้องการให้หุ่นยนต์อยู่ห่างจากแหล่งกำเนิดแสงมากเท่าใด หุ่นยนต์ก็จะเคลื่อนที่เร็วขึ้นเท่านั้น ซึ่งคล้ายคลึงกับคันโยกด้านขวาของตัวควบคุม RC ซึ่งคุณสามารถควบคุมได้ว่าต้องการเดินหน้าหรือถอยหลัง และคุณต้องการให้มันเคลื่อนที่เร็วแค่ไหน

จากนั้น คุณจะสามารถหาสูตรทางคณิตศาสตร์สำหรับความเร็วของมอเตอร์แต่ละตัวได้ และเราเลือกช่วงความเร็วระหว่าง -255 ถึง 255 ค่าลบหมายถึงมอเตอร์จะหมุนถอยหลัง ในขณะที่ค่าบวกหมายความว่ามอเตอร์จะหมุนไปข้างหน้า

นั่นคืออัลกอริธึมพื้นฐานสำหรับการเคลื่อนที่ของหุ่นยนต์ตัวนี้ หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับโมดูลนี้ คลิกที่นี่

ขั้นตอนที่ 2: การคำนวณข้อผิดพลาด
เนื่องจากคุณมีความเร็วและทิศทางเป้าหมายสำหรับมอเตอร์อยู่แล้ว คุณจึงต้องคำนึงถึงความเร็วและทิศทางที่วัดได้ของมอเตอร์ด้วย หากบรรลุเป้าหมายความเร็วแล้ว เราต้องการให้มอเตอร์เคลื่อนที่ตามโมเมนตัมของมันเพียงอย่างเดียว ถ้ายังไม่มีเราอยากจะเพิ่มความเร็วให้มอเตอร์มากขึ้น ในทฤษฎีการควบคุม สิ่งนี้เรียกว่าระบบควบคุมป้อนกลับแบบวงปิด

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับโมดูลนี้ คลิกที่นี่คำแนะนำ - VHDL - มอเตอร์ - ควบคุมความเร็ว - ตัดสินใจ - ทิศทางและความเร็ว - ซ้ายและขวา - ตัวควบคุมความเร็ว - fig-2

ขั้นตอนที่ 3: การแปลงไบนารี
จากการคำนวณครั้งก่อน คุณได้ทราบถึงการดำเนินการที่จำเป็นสำหรับมอเตอร์แต่ละตัวแล้ว อย่างไรก็ตาม การคำนวณเสร็จสิ้นโดยใช้ไบนารี่แบบลงนาม วัตถุประสงค์ของโมดูลนี้คือการแปลงค่าที่เซ็นชื่อเหล่านี้เป็นค่าที่เครื่องกำเนิด PWM สามารถอ่านได้ ซึ่งเป็นทิศทาง (ตามเข็มนาฬิกาหรือทวนเข็มนาฬิกา) และความเร็ว (อยู่ระหว่าง 0 ถึง 255) นอกจากนี้ เนื่องจากผลป้อนกลับจากมอเตอร์ถูกวัดในรูปแบบไบนารีที่ไม่ได้ลงนาม จึงจำเป็นต้องมีโมดูลอื่นเพื่อแปลงค่าที่ไม่ได้ลงนาม (ทิศทางและความเร็ว) ให้เป็นค่าที่ลงนามซึ่งสามารถคำนวณได้โดยโมดูลการคำนวณข้อผิดพลาด หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับโมดูลนี้ คลิกที่นี่

ขั้นตอนที่ 4: การไม่มีแหล่งกำเนิดแสง
คุณได้สร้างหุ่นยนต์ที่เคลื่อนที่เพื่อค้นหาแสงเมื่อหุ่นยนต์ตรวจพบแสง แต่จะเกิดอะไรขึ้นเมื่อหุ่นยนต์ตรวจไม่พบแสง? วัตถุประสงค์ของโมดูลนี้คือเพื่อกำหนดว่าต้องทำอย่างไรเมื่อเกิดสภาวะดังกล่าว

วิธีที่ง่ายที่สุดในการค้นหาและแหล่งกำเนิดแสงคือให้หุ่นยนต์หมุนอยู่กับที่ หลังจากหมุนตามจำนวนวินาทีที่กำหนด หากหุ่นยนต์ยังไม่พบแหล่งกำเนิดแสง คุณต้องการให้หุ่นยนต์หยุดเคลื่อนที่เพื่อประหยัดพลังงาน หลังจากผ่านไปหลายวินาทีที่กำหนด หุ่นยนต์ควรหมุนเข้าที่อีกครั้งเพื่อค้นหาแสง หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับโมดูลนี้ คลิกที่นี่

ขั้นตอนที่ 5: มันทำงานอย่างไร
คุณสามารถดูภาพด้านบนสำหรับคำอธิบายนี้ ตามที่กล่าวไว้ในตอนเริ่มต้นของคำแนะนำนี้ คุณจะต้องป้อนข้อมูล "ขนาด" และ "ตำแหน่ง" จากส่วนการกำหนดขีดจำกัด เพื่อให้แน่ใจว่าอินพุตเหล่านี้ถูกต้อง (เช่นampเมื่อคุณได้รับขนาด = 0 ขนาดจะเป็นศูนย์อย่างแท้จริงเนื่องจากกล้องตรวจไม่พบแสง และไม่ใช่เนื่องจากกล้องยังคงเริ่มต้นการทำงาน) คุณจะต้องมีตัวบ่งชี้บางประเภทซึ่งเราเรียกว่า "พร้อม" ข้อมูลเหล่านี้จะถูกประมวลผลโดยส่วนควบคุม (Ctrl. vhd) เพื่อกำหนดความเร็วเป้าหมายของมอเตอร์แต่ละตัว (9 บิต, เซ็นชื่อ)

เพื่อให้เอาท์พุตของมอเตอร์มีความเสถียรมากขึ้น คุณต้องการใช้การป้อนกลับในระบบวงรอบปิด ซึ่งต้องใช้อินพุต "ทิศทาง" และ "ความเร็ว" ของมอเตอร์แต่ละตัวจากส่วนการวัดความเร็วของมอเตอร์ เนื่องจากคุณต้องการรวมอินพุตเหล่านี้ในการคำนวณ คุณจะต้องแปลงค่าที่ไม่ได้ลงนามเหล่านี้เป็นไบนารีที่เซ็นชื่อ 9 บิต สิ่งนี้ทำได้โดยตัวแปลงไบนารีที่ไม่ได้ลงชื่อเป็นไบนารีที่ลงนาม (US2S.vhd)

สิ่งที่การคำนวณข้อผิดพลาด (error.vhd) ทำคือการลบความเร็วที่วัดได้จากความเร็วเป้าหมายเพื่อกำหนดการทำงานของมอเตอร์แต่ละตัว ซึ่งหมายความว่าเมื่อทั้งสองมีค่าเท่ากัน การลบจะกลายเป็นศูนย์ และมอเตอร์จะเคลื่อนที่ตามโมเมนตัมเพียงอย่างเดียว คุณยังสามารถเพิ่มปัจจัยการคูณเพื่อให้หุ่นยนต์ไปถึงความเร็วเป้าหมายได้เร็วขึ้น

เนื่องจากตัวควบคุมมอเตอร์ต้องการความเร็วและทิศทางของมอเตอร์แต่ละตัว คุณจึงต้องแปลค่าที่ลงนามของการดำเนินการเป็นค่าที่ไม่ได้ลงนามแยกกันสองค่า: ความเร็ว (1 บิต) และทิศทาง (8 บิต) ซึ่งกระทำโดยตัวแปลงไบนารี่แบบลงนามสู่ไม่ได้ลงนาม (S2US.vhd) และจะกลายเป็นอินพุตไปยังส่วนควบคุมมอเตอร์

นอกจากนี้เรายังเพิ่มโมดูลเพื่อกำหนดว่าต้องทำอย่างไรเมื่อตรวจไม่พบแสง (ไม่มีตัวนับแสง Bhd) เนื่องจากโมดูลนี้โดยพื้นฐานแล้วเป็นตัวนับ มันจะนับระยะเวลาที่หุ่นยนต์ต้องหมุนหรืออยู่กับที่ สิ่งนี้จะช่วยให้หุ่นยนต์ “มองเห็น” สภาพแวดล้อมมากกว่าแค่สิ่งที่อยู่ข้างหน้า และประหยัดพลังงานแบตเตอรี่เมื่อไม่มีแหล่งกำเนิดแสงจริงๆคำแนะนำ - VHDL - มอเตอร์ - ควบคุมความเร็ว - ตัดสินใจ - ทิศทางและความเร็ว - ซ้ายและขวา - ตัวควบคุมความเร็ว - fig-3

ขั้นตอนที่ 6: รวมไฟล์ Files
เพื่อรวม fileคุณต้องเชื่อมต่อสัญญาณจากแต่ละโมดูล เพื่อทำเช่นนั้น คุณต้องสร้างโมดูลระดับบนสุดใหม่ file- ใส่อินพุตและเอาต์พุตของโมดูลก่อนหน้าเป็นส่วนประกอบ เพิ่มสัญญาณสำหรับการเชื่อมต่อ และกำหนดแต่ละพอร์ตให้กับคู่ที่เกี่ยวข้อง คุณสามารถดูการเชื่อมต่อในภาพประกอบด้านบน และดูโค้ดได้ที่นี่คำแนะนำ - VHDL - มอเตอร์ - ควบคุมความเร็ว - ตัดสินใจ - ทิศทางและความเร็ว - ซ้ายและขวา - ตัวควบคุมความเร็ว - fig-4

ขั้นตอนที่ 7: ทดสอบมัน
หลังจากที่คุณเขียนโค้ดทั้งหมดเสร็จแล้ว คุณจำเป็นต้องทราบว่าโค้ดของคุณใช้งานได้หรือไม่ก่อนที่จะอัปโหลดไปยังบอร์ด โดยเฉพาะอย่างยิ่งเนื่องจากโค้ดบางส่วนอาจสร้างโดยบุคคลอื่น สิ่งนี้ต้องใช้ testbench ซึ่งคุณจะต้องป้อนค่าจำลองและดูว่าโค้ดทำงานตามที่เราต้องการหรือไม่ คุณสามารถเริ่มต้นด้วยการทดสอบแต่ละโมดูล และหากทั้งหมดทำงานได้อย่างถูกต้อง คุณก็สามารถทดสอบโมดูลระดับบนสุดได้

ขั้นตอนที่ 8: ลองใช้กับฮาร์ดแวร์
หลังจากที่โค้ดของคุณได้รับการทดสอบบนคอมพิวเตอร์ของคุณแล้ว คุณสามารถทดสอบโค้ดบนฮาร์ดแวร์จริงได้ คุณต้องสร้างข้อจำกัด file บน Vivado (.xdc file สำหรับ BASYS 3) เพื่อควบคุมว่าอินพุตและเอาต์พุตใดจะไปที่พอร์ตใด

เคล็ดลับสำคัญ: เราเรียนรู้วิธีที่ยากลำบากที่อุปกรณ์ไฟฟ้าอาจมีค่ากระแสหรือปริมาตรสูงสุดtagเช่น อย่าลืมอ้างอิงถึงแผ่นข้อมูลสำหรับค่าต่างๆ สำหรับ PMOD HB5 ต้องแน่ใจว่าได้ตั้งค่าปริมาตรtage จากแหล่งพลังงานที่ 12 โวลต์ (เนื่องจากเป็นปริมาตรที่ต้องการtage สำหรับมอเตอร์) และกระแสไฟฟ้าน้อยที่สุดเท่าที่จำเป็นเพื่อให้มอเตอร์เคลื่อนที่

ขั้นตอนที่ 9: รวมเข้ากับส่วนอื่น ๆ
หากขั้นตอนก่อนหน้านี้ประสบความสำเร็จ ให้รวมโค้ดกับกลุ่มอื่น ๆ เพื่อโค้ดสุดท้ายที่จะอัปโหลดเข้าสู่หุ่นยนต์ แล้วไงล่ะ! คุณสร้างหุ่นยนต์แสวงหาแสงสำเร็จแล้ว

ขั้นตอนที่ 10: ผู้ร่วมให้ข้อมูล
จากซ้ายไปขวา:

  • อันโตเนียส เกรกอเรียส เดเวน ริวัลดี
  • เฟลิกซ์ วีกูน่า
  • นิโคลัส ซานจายา
  • ริชาร์ด เมดยันโตคำแนะนำ - VHDL - มอเตอร์ - ควบคุมความเร็ว - ตัดสินใจ - ทิศทางและความเร็ว - ซ้ายและขวา - ตัวควบคุมความเร็ว - fig-6

ดีมาก: การควบคุมความเร็วมอเตอร์ VHDL: ตัดสินใจทิศทางและความเร็ว, ตัวควบคุมความเร็วด้านซ้ายและขวา: หน้า 6
ขอบคุณที่กลับมาviewไอเอ็นจี! จริงๆ แล้ว โปรเจ็กต์นี้เป็นเพียงส่วนหนึ่งของโปรเจ็กต์ในชั้นเรียน (Light Seeking Robot พร้อมบอร์ด BASYS 3 และกล้อง OV7670) ดังนั้นฉันจะเพิ่มลิงก์ไปยังชั้นเรียนที่สามารถสอนได้เร็วๆ นี้

สุดยอด: ฉันรอคอยที่จะเห็นทุกอย่างรวมกัน

เอกสาร / แหล่งข้อมูล

คำแนะนำการควบคุมความเร็วมอเตอร์ VHDL ตัดสินใจทิศทางและความเร็วตัวควบคุมความเร็วซ้ายและขวา [พีดีเอฟ] คำแนะนำ
การควบคุมความเร็วมอเตอร์ VHDL ตัดสินใจทิศทางและความเร็วตัวควบคุมความเร็วซ้ายและขวา, ความเร็วมอเตอร์ VHDL, การควบคุมการตัดสินใจทิศทางและความเร็วตัวควบคุมความเร็วซ้ายและขวา

อ้างอิง

ฝากความคิดเห็น

ที่อยู่อีเมลของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องกรอกข้อมูลมีเครื่องหมาย *