ฉันจะควบคุม RC servo ได้อย่างไร


26

ฉันต้องการที่จะควบคุม RC เซอร์โวขนาดเล็ก (5 V 500 mA) จากหมุด GPIO ผ่านหลาม

ฮาร์ดแวร์

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

ซอฟต์แวร์

  • ฉันต้องการซอฟต์แวร์ / รหัส Python ใด ฉันรู้ว่าฉันต้องการพัลส์ 20 มิลลิวินาทีฉันจะทำสิ่งนี้ได้อย่างไร
  • โหลดซีพียูชนิดใดที่ฉันสามารถคาดหวังได้จากการใช้ Raspberry Pi ด้วยวิธีนี้

นี่เป็นคำถามที่คล้ายกันที่จะช่วยให้คุณเริ่มต้นใช้งาน: raspberrypi.stackexchange.com/questions/27/…
Andrew Larsson

คำตอบ:


9

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

มีGPIO 8 พินที่ส่วนหัวของการขยายแม้ว่าจะสามารถกำหนดค่าพินอื่น ๆ เพื่อให้ได้สูงสุดถึง 17 GPIO ถ้าคุณต้องการมากกว่านี้คุณจะต้องเพิ่มมัลติเพล็กเซอร์

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

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


2
ในทางตรงกันข้าม - 20 ms เป็นเวลาที่ยาวนานแม้สำหรับเงื่อนไข CPU ของ Raspberry Pi ฉันไม่ต้องกังวลเกี่ยวกับความแม่นยำของเวลามากเกินไปสำหรับเซอร์โว RC

2
@Tibor: 20ms เป็นช่วงเวลาของพัลส์เซอร์โวที่ไม่กว้างen.wikipedia.org/wiki/Servo_control#Pulse_duration และความต้องการความละเอียดนั้นแย่กว่านั้นมาก - เพื่อให้ได้ความละเอียด 8 บิตคุณต้อง 256 ขั้นตอนใน2มิลลิวินาทีดังนั้น ~ 8us
Martin Thompson

8

หากคุณใช้ระบบปฏิบัติการเรียลไทม์บน Raspberry Pi ของคุณนี่เป็นไปได้แน่นอน อย่างที่คนอื่น ๆ บอกไปแล้วคุณจะต้องใช้แหล่งพลังงานภายนอกกับเซอร์โว แต่ยกเว้นว่าคุณไม่ต้องการฮาร์ดแวร์เพิ่มเติมอื่น ๆ

หากคุณใช้ Xenomai (โปรแกรมปรับปรุงเรียลไทม์สำหรับ Linux) คุณสามารถเรียกใช้ระบบ Linux ที่คุ้นเคยอย่างสมบูรณ์ แต่ด้วยความสามารถแบบเรียลไทม์ที่เพิ่มเข้ามา

ฉันเขียนไลบรารี่ C เล็ก ๆ เพื่อจุดประสงค์ในการควบคุมเซอร์โวจาก Raspberry Pi ฉันได้ลองควบคุมเซอร์โว 3 ตัวพร้อมกัน แต่ก็ไม่มีเหตุผลว่าทำไมมันไม่ควรทำงานมากกว่านี้

คุณสามารถค้นหาไลบรารี่เล็ก ๆ ของฉันได้ที่นี่: https://github.com/simonfi/pi-servo การเพิ่ม wrapper Python สำหรับมันควรจะเป็นเรื่องเล็กน้อย Xenomai สำหรับ Raspberry Pi สามารถพบได้ที่นี่: http://powet.eu/2012/07/25/raspberry-pi-xenomai/

การสร้างสัญญาณที่จำเป็นสำหรับเซอร์โวสามตัวนั้นโดยทั่วไปจะใช้ซีพียูในปริมาณที่น้อยมาก ฉันยังไม่ได้ทดสอบกับมากกว่าสามคน


5

หากคุณไม่รังเกียจการใช้ไดรเวอร์เคอร์เนลของ Linux มี servoblaster ซึ่งทำให้เซอร์โวเป็นอุปกรณ์ตัวหนึ่ง

https://github.com/richardghirst/PiBits

ฉันได้แยกเวอร์ชั่นใหม่ที่ไม่ใช้หมุด gpio ทั้งหมดสำหรับการใช้เซอร์โว ตอนนี้ฉันกำลังใช้หุ่นยนต์ขับเคลื่อนเซอร์โวขนาดเล็กที่ฉันสร้างและสาธิตให้กับสโมสรหุ่นยนต์ของเราโดยใช้ IPGamePad เพื่อควบคุมมัน

https://github.com/jronald/PiBits

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


fyi - repart richartghrist ดูเหมือนว่าจะได้รับการบำรุงรักษาในขณะที่ส้อม jronald ดูเหมือนว่าล้าสมัยและหัก นอกจากนี้ผมขอแนะนำให้อ่านวิธีการละเว้นทั้งหมด แต่แรกที่สองควบคุมเซอร์โวและการติดตั้ง Servoblaster
CWD

3

โดยทั่วไปแล้วเซอร์โวควบคุมโดยใช้สัญญาณ PWM คุณควรดูGPIO เป็นผลผลิต

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


3

มีบอร์ดเสริมสำหรับ raspberry pi ที่เรียกว่าgertboardที่ใช้ควบคุมเซอร์โวและโหลดอื่น ๆ ที่ Pi ไม่สามารถขับได้ด้วยตัวเอง


ฉันควรเพิ่มสิ่งนี้เนื่องจากความนิยมของผลิตภัณฑ์นี้ฉันเชื่อว่ามันขายหมดในเว็บไซต์ส่วนใหญ่ที่มีราสเบอร์รี่ pi และอุปกรณ์เสริม
Brandon Bailey

3

ความรู้เกี่ยวกับวิธีการทำสิ่งต่าง ๆ ใน Pi ได้พัฒนาขึ้นอย่างมากในช่วงหลายปีที่ผ่านมานับตั้งแต่มีการถามคำถามนี้

มีอย่างน้อยสี่วิธีในการสร้างฮาร์ดแวร์ที่กำหนดเวลา PWM / Servo กะพริบบน gpios ของ Pi โดยไม่ต้องใช้ฮาร์ดแวร์ภายนอก

การใช้โมดูลเคอร์เนลในการทำสิ่งนี้ค่อนข้างจะเลิกใช้แล้วมีโซลูชั่น userland ต่อไปนี้ให้บริการ

  • pigpioของฉันเองจะสร้างพัลส์ Servo และ PWM ทั่วไปอย่างอิสระบน gpios 0-31 (C, Python, ซ็อกเก็ต, ไพพ์)
  • Servoblasterจะสร้าง Servo และพัลส์ PWM ทั่วไปอย่างอิสระบน 21 gpios (ไปป์)
  • RPIOจะสร้างพัลส์เซอร์โวและ PWM ทั่วไปอย่างอิสระบน gpios 0-31 (Python) ใด ๆ
  • pi-blasterมาจาก Servoblaster (ไปป์)

2

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

ชีพจรจะต้องมีการควบคุมในช่วง 2 มิลลิวินาที แม้ว่าติ๊กตัวกำหนดตารางเวลาจะมีความละเอียด 100us (ซึ่งดันไปแล้ว - โดยปกติคือ 10ms) นั่นเป็นเพียง 20 ขั้นตอนที่คุณสามารถแก้ไขได้ และนั่นคือโดยไม่คำนึงถึงความกระวนกระวายใจที่แนะนำโดยการสลับงาน

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


2

ฉันคิดว่าการพยายามเรียกใช้เซอร์โวโดยตรงจากพอร์ต GPIO นั้นอาจเป็นเรื่องยากและทำให้เกิดโอเวอร์เฮดของ CPU มากหากเป็นไปได้ ฉันใช้ตัวควบคุม USB servo และมันใช้งานได้ดีและใช้งานแทบไม่มี CPU ถึงแม้ว่ามันจะยุ่งยากเล็กน้อยในการตั้งค่า หนึ่งที่ฉันมีคือ 24 ช่อง แต่พวกเขาทำรุ่น 6 ช่อง ฉันเคยเห็นตัวควบคุมช่อง 2 และ 4 จากผู้ขายรายอื่นที่ใช้ซีเรียลซึ่งจะง่ายกว่าและราคาถูกกว่า USB ถ้าคุณไม่จำเป็นต้องควบคุมเซอร์โวมากมาย


0

มีบริการเว็บ GPIO ที่ทำงานได้อย่างสมบูรณ์ที่คุณสามารถเขียนปลั๊กอินของคุณเองได้ ดูเหมือนว่าจะมีการรองรับการควบคุมเซอร์โวจำนวนเท่าใด ดูไดเรกทอรี "เนื้อหา" ของพวกเขาสำหรับรูปภาพจำนวนมากเช่นกันสำหรับเค้าโครงบอร์ด

https://bitbucket.org/PaulTechGuy/raspberrypi.dotnet.gpioweb

ดูเหมือนว่าจะอยู่ใน C # ที่รัน Mono บน Pi

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.