การสื่อสารระหว่างโปรเซสเซอร์สำหรับแขนหุ่นยนต์


13

ฉันกำลังสร้างแขนหุ่นยนต์งานอดิเรก 6-DOF และฉันสงสัยว่าวิธีที่ดีที่สุดคือการสื่อสารระหว่างโปรเซสเซอร์ (3-4 AVRs, การแยกสูงสุด 18 นิ้ว) ฉันต้องการให้ลูปควบคุมทำงานบนคอมพิวเตอร์ซึ่งส่งคำสั่งไปยังไมโครโปรเซสเซอร์ผ่าน Atmega32u4 USB to - ??? สะพาน.

ความคิดบางอย่างที่ฉันกำลังพิจารณา:

  1. RS485
    • ข้อดี: โปรเซสเซอร์ทั้งหมดในสายเดียวกันสัญญาณที่แตกต่างมีประสิทธิภาพมากขึ้น
    • ข้อด้อย: ต้องใช้ชิปเพิ่มเติมต้องเขียนโปรโตคอล (หรือค้นหา?) เพื่อป้องกันโปรเซสเซอร์จากการส่งสัญญาณในเวลาเดียวกัน
  2. UART ลูป (เช่น TX ของโปรเซสเซอร์หนึ่งตัวเชื่อมต่อกับ RX ของถัดไป)
    • ข้อดี: เฟิร์มแวร์เรียบง่ายโปรเซสเซอร์มี UART ในตัว
    • ข้อด้อย: การเชื่อมต่อครั้งสุดท้ายต้องใช้ระยะเวลาในการเดินทางของหุ่นยนต์แต่ละโปรเซสเซอร์จะต้องใช้รอบการส่งข้อความใหม่
  3. CANbus (ฉันรู้เรื่องนี้น้อยมาก)

ข้อพิจารณาหลักของฉันคือความซับซ้อนของฮาร์ดแวร์และเฟิร์มแวร์ประสิทธิภาพและราคา (ฉันไม่สามารถซื้อระบบนอกกล่องแพง)

คำตอบ:


13

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

การสื่อสารที่คุณเลือกจะขึ้นอยู่กับปัจจัยหลายประการ:

  • แบนด์วิธที่ต้องการ (เราจะถือว่าคุณใช้งานด้วยความเร็ว 16MHz)
  • ความซับซ้อน (การเดินสายและการเข้ารหัส)
  • bi-directional หรือ master-slave

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


USART loop มีคุณสมบัติดังต่อไปนี้:

  • อัตรารับส่งข้อมูลสูงสุด CLK / 16 = 1MHz (ที่นาฬิกา 16MHz) ซึ่งเป็นอัตราการถ่ายโอนประมาณ 90KB / s
  • การสื่อสารแบบสองทิศทางอย่างสมบูรณ์ (ไม่มีการกำหนดตำแหน่งของเจ้านายหรือทาส)
  • ต้องใช้สายไฟแยกระหว่างไมโครคอนโทรลเลอร์แต่ละคู่ - Atmega32u4 รองรับพอร์ต USART สองพอร์ตโดย จำกัด จำนวนไมโครคอนโทรลเลอร์ที่คุณสามารถเชื่อมต่อในเครือข่ายในทางปฏิบัติ ลักษณะ)

หมายเหตุ: นี่คือสิ่งที่คุณจะใช้เพื่อรับการสื่อสารแบบ RS232 ยกเว้นว่าเนื่องจาก RS232 ต้องการ 10V จึงต้องใช้ไดรเวอร์เพื่อรับระดับแรงดันไฟฟ้าเหล่านั้น สำหรับการสื่อสารระหว่างไมโครคอนโทรลเลอร์สิ่งนี้ไม่มีประโยชน์ (มีเพียงระดับแรงดันไฟฟ้าที่เปลี่ยนไป)

RS485:

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

อินเตอร์เฟซสองสาย:

  • สิ่งนี้เรียกว่า I2C ซึ่งหมายความว่าอุปกรณ์ทั้งหมดใช้สายเดียวกันสองเส้นร่วมกัน

  • คุณต้องมีตัวต้านทานแบบดึงขึ้นบนสายทั้งสอง

  • มันช้า (เนื่องจากตัวต้านทานแบบดึงขึ้นมีจำนวน จำกัด และมีความจุเพิ่มขึ้นเมื่อจำนวนอุปกรณ์เพิ่มขึ้นและความยาวสายไฟเพิ่มขึ้น) สำหรับไมโครคอนโทรลเลอร์ AVR นี้ความเร็วสูงถึง 400 kHz - ช้ากว่า USART (แต่ความเร็วนี้ขึ้นอยู่กับการจำกัดความจุของคุณ) เหตุผลก็คือแม้ว่าอุปกรณ์จะขับเคลื่อนสายข้อมูลต่ำ แต่การเปลี่ยนตรงข้ามก็ทำได้โดยให้ลวดลอยสูงอีกครั้ง (ตัวต้านทานแบบดึงขึ้น)

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

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

  • อุปกรณ์ใด ๆ สามารถทำหน้าที่เป็นทั้งมาสเตอร์และ / หรือทาสทำให้มันค่อนข้างยืดหยุ่น

SPI

  • นี่คือสิ่งที่ฉันอยากจะแนะนำ / ใช้สำหรับการสื่อสารทั่วไประหว่างไมโครคอนโทรลเลอร์

  • มันเป็นความเร็วสูง - สูงสุด CLK / 2 = 8MHz (สำหรับ CLK ที่ 16MHz) ทำให้เป็นวิธีที่เร็วที่สุด สามารถทำได้เนื่องจากมีสายแยกต่างหากสำหรับนาฬิกา

  • สายข้อมูล MOSI, MISO และ SCK นั้นถูกแชร์ผ่านเครือข่ายทั้งหมดซึ่งหมายความว่ามีการเดินสายที่ง่ายกว่า

  • มันเป็นรูปแบบ master-slave แต่อุปกรณ์ใด ๆ สามารถเป็น master และ / หรือ slave อย่างไรก็ตามเนื่องจากภาวะแทรกซ้อนของการเลือกทาสสำหรับการเดินสายที่ใช้ร่วมกัน (ภายในเครือข่าย) คุณควรใช้ในลักษณะแบบลำดับชั้นเท่านั้น (ต่างจากอินเตอร์เฟสแบบสองสาย) IE หากคุณจัดระเบียบอุปกรณ์ทั้งหมดไว้ในทรีอุปกรณ์ควรเป็นอุปกรณ์หลักกับลูกของมันเท่านั้นและจะเป็นทาสของอุปกรณ์แม่เท่านั้น นั่นหมายความว่าในโหมดทาสอุปกรณ์จะมีต้นแบบเดียวกันเสมอ นอกจากนี้ในการทำอย่างถูกต้องคุณต้องเพิ่มตัวต้านทานไปยัง MISO / MOSI / SCK ไปยังต้นแบบต้นน้ำเพื่อที่ว่าหากอุปกรณ์กำลังสื่อสารดาวน์สตรีม (เมื่อไม่ได้เลือกเป็นทาส) การสื่อสารจะไม่ส่งผลต่อการสื่อสารในส่วนอื่น ๆ ของ เครือข่าย (หมายเหตุจำนวนระดับที่คุณสามารถทำได้โดยใช้ตัวต้านทานมี จำกัด ดูด้านล่างสำหรับวิธีแก้ปัญหาที่ดีกว่าโดยใช้พอร์ต SPI ทั้งสอง)

    ไมโครคอนโทรลเลอร์ AVR สามารถปรับสัญญาณ MOSI สามสถานะโดยอัตโนมัติเมื่อมีการเลือกสลาฟและเปลี่ยนเป็นโหมดสลาฟ (หากอยู่ในโหมด Master)

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

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

    ถ้าคุณต้องการหลาย ๆ ระดับในต้นไม้ / ลำดับชั้น (มากกว่า 2) วิธีการแก้ปัญหาข้างต้นที่ใช้ตัวต้านทานจะทำให้การทำงานมีประสิทธิภาพเกินไป ในกรณีนี้คุณควรเปลี่ยนเครือข่าย SPI ระหว่างแต่ละชั้นของต้นไม้ ซึ่งหมายความว่าอุปกรณ์แต่ละเครื่องจะเชื่อมต่อกับลูก ๆ ของมันบนเครือข่าย SPI หนึ่งเครือข่ายและผู้ปกครองในเครือข่าย SPI อื่น แม้ว่ามันจะหมายความว่าคุณมีเพียงต้นไม้เดียวของการเชื่อมต่อข้อดีคืออุปกรณ์สามารถสื่อสารกับทั้งลูกและผู้ปกครองในเวลาเดียวกันและคุณไม่ได้มีตัวต้านทานเที่ยวยุ่งยิ่ง (ยากที่จะเลือกค่าที่เหมาะสมเสมอ) .

  • เนื่องจากมันมีสาย MOSI และ MISO ที่แยกจากกันทั้งมาสเตอร์และทาสสามารถสื่อสารได้ในเวลาเดียวกันทำให้มันมีความเป็นไปได้ที่จะมีความเร็วเพิ่มขึ้นสองเท่า จำเป็นต้องใช้พินพิเศษสำหรับตัวเลือกทาสสำหรับสลาฟเพิ่มเติมแต่ละตัว แต่นี่ไม่ใช่ภาระใหญ่แม้แต่ทาสที่แตกต่างกัน 10 ตัวก็ต้องใช้พินพิเศษ 10 ตัวเท่านั้นซึ่งสามารถรองรับได้ง่ายบนไมโครคอนโทรลเลอร์ AVR ทั่วไป

CANไม่รองรับโดยไมโครคอนโทรลเลอร์ AVR ที่คุณระบุ เนื่องจากมีตัวเลือกที่ดีอื่น ๆ จึงอาจไม่สำคัญในกรณีนี้อย่างไรก็ตาม


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

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

ที่ 8MHz และความยาวสาย 0.5 ม. ฉันไม่คิดว่ามันจะเป็นปัญหา แต่ถ้าเป็นเช่นนั้นให้ลองระมัดระวังความจุมากขึ้น (เก็บสายดินและสายสัญญาณไว้ใกล้เกินไปและระวังการเชื่อมต่อระหว่างตัวนำที่แตกต่างกัน) และสัญญาณการสิ้นสุด ในกรณีที่ไม่น่าเป็นไปได้ที่จะยังคงมีปัญหาอยู่คุณสามารถลดอัตรานาฬิกา แต่ฉันไม่คิดว่าจำเป็น


ยกนิ้วให้ SPI จากฉัน
georgebrindeiro

2
ฉันเป็นแฟนตัวยงของ SPI ด้วยเช่นกันแม้ว่าบางที I2C ก็ควรพิจารณาด้วยเช่นกัน (หลีกเลี่ยงความจำเป็นในการแยกสาย CS ไปยังแต่ละอุปกรณ์) แต่ก็ไม่ควรที่จะถูกไล่ออกได้ง่ายนัก - เพราะมันเป็นรถบัสที่เป็นทางเลือกดังนั้นฉันจะไม่ออกกฎสำหรับงานอดิเรกหุ่นยนต์!
แอนดรูว์

SPI บัสต้องการจริงๆแยกสาย CS จากต้นแบบไปยังแต่ละทาสหรือไม่? ถ้าเป็นเช่นนั้นสิ่งที่คุณจะเรียกว่าอื่น ๆรถบัสที่ต้องตรง 4 การเชื่อมต่อกับต้นแบบว่าทาสจำนวนมากมีการเชื่อมต่อไม่ว่าจะกล่าวถึงในบทความวิกิพีเดียรถบัส SPI ?
เดวิดแครี

1
+1 สำหรับการตอบสนองครั้งใหญ่ฉันเป็นโรงเรียนเก่าและฉันรักรถ 485 และโดยทั่วไปแล้วมีที่อยู่ซอฟต์แวร์ แต่ในกรณีนี้ส่วนประกอบความเร็วและการใช้ทรัพยากรฉันจะเลือก SPI แม้ว่าคุณจะมีความสนใจมากกับระยะทางและสัญญาณรบกวนทางไฟฟ้าโดยเฉพาะอย่างยิ่งถ้ารถบัสของคุณ coesisten อื่น ๆ IC, ด้วยความเร็วที่แตกต่างกันส่ง: ความทรงจำ NIC เป็นต้นซึ่งอาจประสบ brownouts และความกว้างสูญเสียนาฬิกา
RTOSkit

3
ความคิดเห็นของคุณเกี่ยวกับ CAN ไม่ถูกต้อง CAN ไม่ใช่แค่บัส 2 สายใด ๆ ฉันคิดว่าคุณสับสนกับ I2C ซึ่งมีความเร็วสูงสุด 400kbps ความเร็วสูงสุดของ CAN คือ 1Mbps
Rocketmagnet

5

ฉันขอแนะนำ CAN สำหรับการสื่อสารระหว่างหน่วยประมวลผลกลาง เราใช้มันในหุ่นยนต์ของเรามีโปรเซสเซอร์มากถึง 22 ตัวบนรถบัสเดียวกัน ด้วยการออกแบบโพรโทคอลที่ดีคุณสามารถใช้แบนด์วิดท์ที่มีอยู่ได้ประมาณ 90% (ประมาณ 640kbps เมื่อคุณคำนึงถึงการตรวจสอบข้อผิดพลาดทั้งหมดและเว้นระยะเฟรมระหว่าง) เราสามารถ servo 10 มอเตอร์ที่ 1000Hz บน CAN บัสเดียว นี่กำลังเข้าใกล้ขีด จำกัด คุณอาจบีบมันถึง 20 มอเตอร์ถ้าคุณแพ็คข้อมูลอย่างระมัดระวัง

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

สามารถเชื่อมต่อบัส

อย่างไรก็ตามในสถานการณ์ที่ จำกัด ก็จริงที่เป็นไปได้ที่จะใช้CAN ไม่มี transceivers


EtherCAT

ถ้าคุณเคยรู้สึกเหมือนการใช้รถบัสที่มีแบนด์วิดธ์ที่ร้ายแรงผมแนะนำให้คุณลองEtherCAT มันเป็นบัส 100Mb ซึ่งสามารถเชื่อมต่อกับพอร์ต Ethernet ในพีซีของคุณ รถบัสมีสองส่วนที่สำคัญ:

  • สะพาน. สิ่งนี้จะแปลงเลเยอร์ทางกายภาพของอีเธอร์เน็ตเป็นเลเยอร์ทางกายภาพระดับ LVDS ที่ง่ายและราคาถูกลงซึ่งไม่จำเป็นต้องใช้ตัวเชื่อมต่อขนาดใหญ่, ชิป Phy และส่วนประกอบมากมายที่อีเธอร์เน็ตทำ
  • โหนด แต่ละโหนดต้องการชิป ET1200 หนึ่งตัวและไมโครคอนโทรลเลอร์

พีซีสามารถส่งและรับข้อมูลขนาดใหญ่ไปยังและจากโหนดที่ 1kHz หรือเร็วกว่า คุณสามารถควบคุมสิ่งของได้มากมายบน EtherCAT บัสเดี่ยว

ที่เพิ่ม:

บริษัท เงาหุ่นยนต์ตอนนี้ขายที่มีประโยชน์ระบบ EtherCAT รถประจำทางที่เรียกว่าRonex มันช่วยให้คุณเพิ่ม I / O ได้ค่อนข้างมากและพวกเขากำลังจะแนะนำบอร์ดประเภทอื่น ๆ จำนวนมากในไม่ช้าเช่นตัวควบคุมมอเตอร์และ ADC คุณภาพสูง


แหล่งที่มาของภาพนั้นคืออะไร? มีCAN Highทั้งสายสีแดงและสีน้ำเงิน
เอียน

1

ฉันรู้ว่าฉันกำลังขุดเธรดเก่าและนี่เป็นหัวข้อที่ไม่เกี่ยวข้อง แต่ฉันไม่คิดว่าคุณจะได้รับ ET1200 ชิปจาก Beckhoff ฉันส่งอีเมลถึงพวกเขาสักครู่และได้รับคำแนะนำว่าฉันต้องเข้าร่วมกลุ่ม Ethercat เมื่อต้องการทำสิ่งนี้ฉันต้องแสดงให้เห็นว่าฉันจะมีส่วนร่วมกลับไปยังกลุ่ม - นั่นคือโดยการสร้างและขายอุปกรณ์ที่ใช้สิ่ง Ethercat ที่จุด (และนี้) ในเวลาที่ฉันยังคงต้นแบบอุปกรณ์ของฉัน (ตัวควบคุมมอเตอร์ brushless สำหรับการใช้งานหุ่นยนต์ - ปัจจุบันใช้ CAN) ดังนั้นฉันไม่สามารถให้อะไร (ฉันไม่สามารถให้เวลาที่สมบูรณ์สำหรับการเสร็จสมบูรณ์ - ฉันยัง ปริญญาตรี) ฉันแสดงความผิดหวังให้กับพวกเขา พวกเขาบอกว่าไม่ต้องผิดหวัง !! เรื่องตลกน่ารัก! ฉันต้องการจริงๆชอบเข้าไปใน Ethercat แต่ ASIC ดูเหมือนว่าจะไม่ถูกแตะต้องกับผู้ที่ชื่นชอบงานอดิเรกหรือคนที่ไม่มี บริษัท นอกจากนี้นี่เป็นโพสต์แรกของฉันดังนั้นขออภัยถ้าฉันโกรธพระเจ้าโดยขุดโพสต์เก่า!


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

ขอบคุณเพื่อน นี่เป็นฟอรัมที่ยอดเยี่ยม! คุณมีประสบการณ์กับอีเธอร์แคทไหม? คุณรู้จักวิธีอื่นในการรับอุปกรณ์ทาสที่เหมาะสมสำหรับการสร้างต้นแบบบน PCB หรือไม่? ฉันยินดีที่จะจ่ายเงิน แต่ในขณะนี้ฉันไม่ผ่านข้อกำหนดในการเข้าร่วมกลุ่มเพื่อซื้อ Bechoff ASICs ผิดหวัง!
กฎหมาย

ไม่ใช่ EtherCat ไม่ใช่ ฉันใช้ CAN (ตัวเลือกที่ดี), LIN (ไม่ค่อยดีเท่า IMHO) และสามารถแนะนำ SPI หรือ I2C ได้อย่างแน่นอน
Andrew

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