Truyền thông liên bộ xử lý cho cánh tay robot


13

Tôi đang xây dựng một cánh tay robot 6-DOF sở thích và đang tự hỏi cách tốt nhất để liên lạc giữa các bộ xử lý (3-4 AVR, tách tối đa 18 inch). Tôi muốn có vòng điều khiển chạy trên máy tính, nó sẽ gửi lệnh đến bộ vi xử lý thông qua USB-to Atmega32u4 - ??? cầu.

Một số ý tưởng tôi đang xem xét:

  1. RS485
    • Ưu điểm: tất cả các bộ xử lý trên cùng một dây, tín hiệu vi sai mạnh hơn
    • Nhược điểm: yêu cầu thêm chip, cần ghi (hoặc tìm?) Giao thức để ngăn bộ xử lý truyền cùng lúc
  2. Vòng lặp UART (nghĩa là TX của một bộ xử lý được kết nối với RX tiếp theo)
    • Ưu điểm: phần sụn đơn giản, bộ xử lý có UART tích hợp sẵn
    • Nhược điểm: kết nối cuối cùng phải di chuyển chiều dài của robot, mỗi bộ xử lý phải dành chu kỳ truyền lại tin nhắn
  3. CANbus (Tôi biết rất ít về điều này)

Những cân nhắc chính của tôi là độ phức tạp của phần cứng và phần sụn, hiệu năng và giá cả (tôi không thể mua một hệ thống vượt trội đắt tiền).

Câu trả lời:


13

Bạn muốn sử dụng USB để liên lạc với máy tính. Nếu bạn có một số bộ vi điều khiển, có lẽ bạn sẽ chỉ kết nối một trong những bộ vi điều khiển trực tiếp với máy tính. Các bộ vi điều khiển khác sẽ cần nhận lệnh từ vi điều khiển chính.

Giao tiếp bạn chọn sẽ phụ thuộc vào một số yếu tố:

  • băng thông bắt buộc (chúng tôi sẽ cho rằng bạn đang chạy chúng ở 16 MHz)
  • độ phức tạp (hệ thống dây và mã hóa)
  • hai chiều, hoặc chủ nô

Hầu như tất cả các tùy chọn đều có hỗ trợ tích hợp trên vi điều khiển AVR. Không có tùy chọn nào bạn có thể thích hợp hơn các tùy chọn tích hợp sẽ yêu cầu phần cứng bổ sung. Vì chúng có hỗ trợ tích hợp, độ phức tạp của phần mềm hoàn toàn giống nhau, ở chỗ bạn chỉ cần cấu hình cổng (sử dụng các thanh ghi), đặt dữ liệu để truyền vào một thanh ghi khác, sau đó kích hoạt truyền bằng cách đặt một bit trong thanh ghi khác. Bất kỳ dữ liệu nhận được được tìm thấy trong một thanh ghi khác và một ngắt được kích hoạt để bạn có thể xử lý nó. Cho dù bạn chọn tùy chọn nào, sự khác biệt duy nhất là thay đổi vị trí đăng ký và một số thay đổi đối với các thanh ghi cấu hình.


Một vòng lặp USART có các tính năng sau:

  • Tốc độ truyền tối đa CLK / 16 = 1 MHz (ở xung nhịp 16 MHz) là tốc độ truyền khoảng 90KB / s
  • thông tin liên lạc hai chiều đầy đủ (không có chỉ định chủ hoặc nô lệ)
  • yêu cầu các dây riêng biệt giữa mỗi cặp vi điều khiển - Atmega32u4 hỗ trợ hai cổng USART nguyên bản, hạn chế số lượng vi điều khiển bạn có thể kết nối trong mạng trong thực tế (hoặc nếu không bạn kết thúc bằng một chuỗi vi điều khiển dài - nghĩa là được kết nối trong một danh sách được liên kết cách thức)

Lưu ý: đây cũng là những gì bạn sẽ sử dụng để có được giao tiếp RS232, ngoại trừ bởi vì RS232 yêu cầu 10V, nó yêu cầu trình điều khiển để có được các mức điện áp đó. Đối với giao tiếp giữa các vi điều khiển, điều này không hữu ích (chỉ thay đổi mức điện áp).

RS485:

  • Về cơ bản, bạn sử dụng cổng USART ở chế độ khác - không có lợi thế về băng thông và nó chỉ có thể đơn giản hóa việc nối dây một chút, nhưng nó cũng làm phức tạp nó. Điều này không được khuyến khích.

Giao diện hai dây:

  • Điều này cũng được gọi là I2C. Điều này có nghĩa là tất cả các thiết bị chia sẻ hai dây giống nhau.

  • Bạn cần một điện trở kéo lên trên cả hai dây

  • Nó chậm (vì các điện trở kéo lên bị giới hạn về giá trị, và có điện dung tăng khi số lượng thiết bị tăng và chiều dài dây tăng). Đối với vi điều khiển AVR này, tốc độ lên tới 400 kHz - chậm hơn USART (nhưng tốc độ này phụ thuộc vào việc giới hạn điện dung của bạn). Lý do là mặc dù một thiết bị điều khiển dây dữ liệu ở mức thấp, quá trình chuyển đổi ngược lại được thực hiện bằng cách để dây nổi cao trở lại (điện trở kéo lên).

  • Thậm chí còn chậm hơn khi bạn cho rằng TẤT CẢ thông tin liên lạc chia sẻ cùng một băng thông hạn chế. Bởi vì tất cả các giao tiếp chia sẻ cùng một băng thông hạn chế, có thể có sự chậm trễ trong giao tiếp, nơi dữ liệu phải đợi cho đến khi mạng không hoạt động trước khi có thể được gửi. Nếu dữ liệu khác liên tục được gửi, nó cũng có thể chặn dữ liệu không bao giờ được gửi.

  • Nó dựa vào giao thức chủ-nô, trong đó chủ xử lý một nô lệ, sau đó gửi lệnh / yêu cầu và nô lệ trả lời sau đó. Mỗi lần chỉ có một thiết bị có thể giao tiếp, vì vậy nô lệ phải đợi chủ hoàn thành.

  • Bất kỳ thiết bị nào cũng có thể hoạt động như một chủ và / hoặc nô lệ, làm cho nó khá linh hoạt.

SPI

  • Đây là những gì tôi muốn giới thiệu / sử dụng cho giao tiếp chung giữa các vi điều khiển.

  • Đó là tốc độ cao - lên tới CLK / 2 = 8 MHz (đối với CLK ở 16 MHz), làm cho nó trở thành phương pháp nhanh nhất. Điều này có thể đạt được vì dây riêng biệt của nó chỉ dành cho đồng hồ.

  • Dữ liệu MOSI, MISO và dây đồng hồ SCK được chia sẻ trên toàn bộ mạng, có nghĩa là nó có hệ thống dây đơn giản hơn.

  • Nó là định dạng chủ-nô, nhưng bất kỳ thiết bị nào cũng có thể là chủ và / hoặc nô lệ. Tuy nhiên, do các biến chứng chọn nô lệ, đối với hệ thống dây được chia sẻ (trong mạng), bạn chỉ nên sử dụng nó theo cách phân cấp (không giống như giao diện hai dây). I E. nếu bạn sắp xếp tất cả các thiết bị vào một cái cây, một thiết bị chỉ nên làm chủ cho con cái của nó và chỉ là một nô lệ cho cha mẹ của nó. Điều đó có nghĩa là trong chế độ nô lệ, một thiết bị sẽ luôn có cùng một chủ. Ngoài ra, để thực hiện điều này một cách chính xác, bạn cần thêm các điện trở vào MISO / MOSI / SCK cho chủ đầu nguồn, để nếu thiết bị giao tiếp xuôi dòng (khi không được chọn làm nô lệ), thông tin liên lạc sẽ không ảnh hưởng đến giao tiếp ở các phần khác của mạng (lưu ý số cấp độ bạn có thể thực hiện bằng cách sử dụng điện trở bị giới hạn, xem bên dưới để biết giải pháp tốt hơn bằng cả hai cổng SPI).

    Bộ vi điều khiển AVR có thể tự động xác định trạng thái tín hiệu MOSI khi nó được chọn phụ và chuyển sang chế độ phụ (nếu ở chế độ chính).

    Mặc dù nó có thể yêu cầu một mạng phân cấp, hầu hết các mạng có thể được tổ chức theo kiểu giống như cây, vì vậy nó thường không phải là một giới hạn quan trọng

  • Ở trên có thể được nới lỏng một chút, bởi vì mỗi vi điều khiển AVR hỗ trợ hai cổng SPI riêng biệt, vì vậy mỗi thiết bị có thể có các vị trí khác nhau trong hai mạng khác nhau.

    Đã nói điều này, nếu bạn cần nhiều cấp độ trong cây / phân cấp của bạn (hơn 2), giải pháp trên sử dụng điện trở sẽ quá khó để làm việc. Trong trường hợp này, bạn nên thay đổi mạng SPI giữa mỗi lớp của cây. Điều này có nghĩa là mỗi thiết bị sẽ kết nối với con của nó trên một mạng SPI và cha mẹ của nó trên mạng SPI khác. Mặc dù điều đó có nghĩa là bạn chỉ có một cây kết nối duy nhất, nhưng lợi thế là một thiết bị có thể giao tiếp với cả một trong hai đứa trẻ và cha mẹ của nó cùng một lúc và bạn không có điện trở khó khăn (luôn khó chọn đúng giá trị) .

  • Bởi vì nó có dây MOSI và MISO riêng biệt, cả chủ và nô lệ có thể giao tiếp cùng một lúc, tạo cho nó một yếu tố tiềm năng tăng hai tốc độ. Cần thêm một pin cho lựa chọn nô lệ cho mỗi nô lệ bổ sung, nhưng đây không phải là một gánh nặng lớn, thậm chí 10 nô lệ khác nhau chỉ cần 10 chân phụ, có thể dễ dàng điều chỉnh trên một vi điều khiển AVR điển hình.

CAN không được hỗ trợ bởi vi điều khiển AVR mà bạn đã chỉ định. Vì có những lựa chọn tốt khác, có lẽ nó không quan trọng trong trường hợp này.


Khuyến nghị là SPI , vì nó nhanh, hệ thống dây điện không quá phức tạp và không yêu cầu điện trở kéo lên khó khăn. Trong trường hợp hiếm hoi khi SPI không đáp ứng đầy đủ nhu cầu của bạn (có thể trong các mạng phức tạp hơn), bạn có thể sử dụng nhiều tùy chọn (ví dụ: sử dụng cả hai cổng SPI, cùng với giao diện hai dây, cũng như ghép nối một số bộ vi điều khiển sử dụng vòng lặp USART!)

Trong trường hợp của bạn, sử dụng SPI có nghĩa là một cách tự nhiên, vi điều khiển có kết nối USB với máy tính có thể là chủ và nó có thể chuyển tiếp các lệnh có liên quan từ máy tính đến từng thiết bị phụ. Nó cũng có thể đọc các bản cập nhật / số đo từ mỗi nô lệ và gửi chúng đến máy tính.

Với 8 MHz và chiều dài dây 0,5m, tôi không nghĩ nó sẽ trở thành vấn đề. Nhưng nếu có, hãy cố gắng cẩn thận hơn về điện dung (giữ cho dây nối đất và tín hiệu quá gần, và cũng cẩn thận với các kết nối giữa các dây dẫn khác nhau), và cũng chấm dứt tín hiệu. Trong trường hợp không chắc là nó vẫn là một vấn đề, bạn có thể giảm tốc độ xung nhịp, nhưng tôi không nghĩ rằng điều đó là cần thiết.


Đồng ý với SPI từ tôi
georgebrindeiro

2
Tôi cũng là một fan hâm mộ của SPI, mặc dù có lẽ I2C cũng đáng để xem xét (tránh sự cần thiết phải tách dòng CS cho từng thiết bị). Nhưng CAN không nên dễ dàng bị loại bỏ như vậy - sau tất cả, đó là xe buýt ô tô được lựa chọn, vì vậy tôi không loại trừ nó vì sở thích robot!
Andrew

Xe buýt SPI có thực sự yêu cầu các đường CS riêng biệt từ chủ đến từng nô lệ không? Nếu vậy, những gì bạn sẽ gọi đó là khác xe buýt mà đòi hỏi chính xác 4 kết nối đến tổng thể, dù có bao nhiêu nô lệ được kết nối, được đề cập trong bài viết Wikipedia trên SPI xe buýt ?
David Cary

1
+1 Đối với câu trả lời lớn, tôi là trường học cũ và tôi yêu thích 485 và nói chung là xe buýt có địa chỉ phần mềm, nhưng trong trường hợp này, các thành phần tiêu thụ tài nguyên và tốc độ, tôi sẽ chọn SPI. Mặc dù bạn sẽ chú ý nhiều đến khoảng cách và tiếng ồn điện, đặc biệt là nếu xe buýt của bạn kết hợp với IC khác, với tốc độ truyền khác nhau: bộ nhớ, NIC, v.v., có thể bị mất điện và biên độ mất đồng hồ
RTOSkit 30/12/12

3
Nhận xét của bạn về CAN là không chính xác. CAN không chỉ là bất kỳ xe buýt 2 dây. Tôi nghĩ rằng bạn đang nhầm lẫn nó với I2C, có tốc độ tối đa 400kbps. Tốc độ tối đa của CAN là 1Mb / giây.
Rocketmagnet

5

Tôi rất có thể đề nghị CAN cho truyền thông bộ xử lý liên. Chúng tôi sử dụng nó trong robot của mình, với tối đa 22 bộ xử lý trên cùng một xe buýt. Với thiết kế giao thức tốt, bạn có thể sử dụng khoảng 90% băng thông có sẵn (khoảng 640kb / giây khi bạn tính đến tất cả các kiểm tra lỗi và khoảng cách giữa các khung). Chúng tôi có thể điều khiển 10 động cơ ở 1000Hz trên một bus CAN. Điều này đang đến gần giới hạn. Bạn có thể ép nó tới 20 động cơ nếu bạn đóng gói dữ liệu rất cẩn thận.

Nói chung CÓ THỂ cần phải có một chip thu phát cho mỗi bộ xử lý (đó chỉ là một thiết bị 8 chân nhỏ). Bộ thu phát cung cấp cho bạn tín hiệu vi sai tốt phát ra rất ít nhiễu và cũng làm cho nó miễn nhiễm với nhiễu nếu bạn làm việc trong môi trường ồn điện (động cơ, solenoids và máy phát vô tuyến).

CAN kết nối xe buýt

Tuy nhiên, trong một số trường hợp hạn chế, thực sự có thể sử dụng CAN mà không cần bộ thu phát .


EtherCAT

Nếu bạn từng cảm thấy muốn triển khai một chiếc xe buýt có băng thông nghiêm trọng, tôi khuyên bạn nên thử EtherCAT . Đó là bus 100Mb, có thể được kết nối với cổng Ethernet của PC. Có hai phần quan trọng đối với xe buýt:

  • Cây cầu. Điều này chuyển đổi lớp vật lý Ethernet thành lớp vật lý LVDS đơn giản hơn, chi phí thấp hơn, không yêu cầu các đầu nối lớn, chip Phy và nhiều thành phần mà Ethernet tự làm.
  • Các nút. Mỗi nút chỉ cần một chip ET1200 và vi điều khiển.

PC có thể truyền và nhận các khối dữ liệu lớn đến và từ các nút ở tần số 1kHz hoặc nhanh hơn. Bạn có thể kiểm soát khá nhiều thứ trên một chiếc xe buýt EtherCAT duy nhất.

Thêm:

Công ty Shadow Robot hiện bán một hệ thống EtherCAT Bus hữu ích có tên là Ronex . Nó cho phép bạn thêm khá nhiều I / O và họ sẽ sớm giới thiệu nhiều loại bảng khác, như bộ điều khiển động cơ và ADC chất lượng cao.


Nguồn nào cho hình ảnh đó? Nó có CAN Highcho cả dây màu đỏ và màu xanh.
Ian

1

Tôi biết tôi đang đào một chủ đề cũ và đây là một chủ đề không phù hợp, nhưng tôi không nghĩ bạn có thể nắm giữ chip ET1200 từ Beckhoff. Tôi đã gửi email cho họ một lúc trước và được thông báo rằng tôi cần tham gia nhóm Ethercat. Để làm điều này, tôi đã phải chứng minh rằng tôi sẽ đóng góp lại cho nhóm - tức là bằng cách xây dựng và bán các thiết bị sử dụng công cụ Ethercat. Vào thời điểm đó (và lúc này), tôi vẫn đang tạo mẫu cho thiết bị của mình (bộ điều khiển động cơ không chổi than cho các ứng dụng robot - hiện đang sử dụng CAN) vì vậy tôi không thể cung cấp bất cứ điều gì (tôi không thể đưa ra thời gian hoàn thành - Tôi vẫn đang làm việc sinh viên đại học). Tôi bày tỏ với họ sự thất vọng của tôi. Họ nói đừng thất vọng !! Công cụ khá buồn cười! Tôi thực sự sẽmuốn vào Ethercat, nhưng ASIC dường như không thể chạm tới những người có sở thích hoặc những người không có công ty. Ngoài ra, đây là bài viết đầu tiên của tôi, vì vậy xin lỗi nếu tôi đã chọc giận các vị thần bằng cách đào lên một bài viết cũ!


Chào mừng bạn Phục hồi một bài viết cũ là tốt, nếu câu trả lời có liên quan. Và bình luận của bạn có vẻ phù hợp với tôi ...
Andrew

Cảm ơn bạn đời. Đây là một diễn đàn tuyệt vời! Không có hứng thú, bạn có kinh nghiệm nào với Ethercat không? Bạn có tình cờ biết bất kỳ phương pháp nào khác để có được một thiết bị nô lệ phù hợp để tạo mẫu trên PCB không? Tôi sẵn sàng trả tiền, nhưng hiện tại tôi chỉ đơn giản là không đáp ứng các yêu cầu để tham gia nhóm để mua ASIC Bechoff. Bực bội!
luật

Không phải EtherCat, không. Tôi sử dụng CAN (một tùy chọn tốt), LIN (IMHO không tốt lắm) và chắc chắn có thể đề xuất SPI hoặc I2C
Andrew

Bạn có quản lý để giữ chip ET1100 hoặc ET1200 không? Nếu bạn không có sẵn một tùy chọn khác: microchip LAN9252, thì nó tương thích với ET1100 và hoạt động khá tốt. Sử dụng thư viện SOES liên quan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.