로봇 팔을위한 프로세서 간 통신


13

나는 취미 6-DOF 로봇 팔을 만들고 있는데 프로세서 사이에서 통신하는 가장 좋은 방법이 무엇인지 궁금합니다 (3-4 AVR, 최대 18 인치 분리). Atmega32u4 USB-to-???를 통해 명령을 마이크로 프로세서로 보내는 컴퓨터에서 제어 루프를 실행하고 싶습니다. 다리.

내가 고려하고있는 몇 가지 아이디어 :

  1. RS485
    • 장점 : 동일한 와이어의 모든 프로세서, 더 강력한 차동 신호
    • 단점 : 추가 칩이 필요하고 프로세서가 동시에 전송하지 못하도록 프로토콜을 작성 (또는 찾아야합니까)해야합니다.
  2. UART 루프 (즉, 한 프로세서의 TX가 다음 RX에 연결됨)
    • 장점 : 간단한 펌웨어, 프로세서에 UART 내장
    • 단점 : 마지막 연결은 로봇의 길이를 이동해야하며 각 프로세서는 메시지를 다시 전송하는주기를 소비해야합니다.
  3. CANbus (나는 이것에 대해 거의 알지 못한다)

주요 고려 사항은 하드웨어 및 펌웨어 복잡성, 성능 및 가격입니다 (고가의 기본 시스템은 구입할 수 없습니다).

답변:


13

컴퓨터와의 통신에 USB를 사용하려고합니다. 여러 개의 마이크로 컨트롤러가있는 경우 마이크로 컨트롤러 중 하나만 컴퓨터에 직접 연결합니다. 다른 마이크로 컨트롤러는 기본 마이크로 컨트롤러에서 명령을 가져와야합니다.

선택한 커뮤니케이션은 여러 가지 요소에 따라 다릅니다.

  • 필요한 대역폭 (16MHz로 실행한다고 가정)
  • 복잡성 (배선 및 코딩)
  • 양방향 또는 마스터-슬레이브

거의 모든 옵션에는 AVR 마이크로 컨트롤러가 내장되어 있습니다. 추가 하드웨어가 필요한 내장 옵션보다 합리적으로 선호하는 옵션이 없습니다. 지원 기능이 내장되어 있기 때문에 소프트웨어 복잡성은 모두 비슷합니다. 즉, 레지스터를 사용하여 포트를 구성하고 다른 레지스터에 전송할 데이터를 넣은 다음 다른 레지스터에 비트를 설정하여 전송을 트리거한다는 점입니다. 수신 된 모든 데이터가 다른 레지스터에 있으며 인터럽트가 트리거되어 처리 할 수 ​​있습니다. 어떤 옵션을 선택하든, 유일한 차이점은 레지스터 위치의 변경과 구성 레지스터의 일부 변경입니다.


USART 루프에는 다음 기능이 있습니다.

  • CLK / 16의 최대 전송 속도 = 약 90KB / s의 전송 속도 인 1MHz (16MHz 클럭에서)
  • 완전 양방향 통신 (마스터 또는 슬레이브 지정 없음)
  • 각 마이크로 컨트롤러 쌍 사이에 별도의 전선이 필요합니다. Atmega32u4는 기본적으로 2 개의 USART 포트를 지원하여 실제로 네트워크에 연결할 수있는 마이크로 컨트롤러의 수를 제한합니다 (또는 그렇지 않으면 긴 마이크로 컨트롤러 문자열로 연결됩니다. 방법)

참고 : RS232는 10V가 필요하므로 전압 레벨을 얻기 위해 드라이버가 필요하다는 점을 제외하면 RS232 통신에 사용됩니다. 마이크로 컨트롤러 간의 통신에는 유용하지 않습니다 (전압 수준 만 변경됨).

RS485 :

  • 기본적으로 USART 포트를 다른 모드에서 사용합니다. 대역폭의 이점이 없으며 배선을 약간 단순화 할뿐만 아니라 복잡하게 만듭니다. 권장하지 않습니다.

2 선식 인터페이스 :

  • 이를 I2C라고도합니다. 이것은 모든 장치가 동일한 두 와이어를 공유한다는 것을 의미합니다.

  • 두 전선 모두에 풀업 저항이 필요합니다

  • 풀업 저항의 값이 제한되어 있고 장치 수가 증가하고 와이어 길이가 증가함에 따라 커패시턴스가 증가하기 때문에 느립니다. 이 AVR 마이크로 컨트롤러의 경우 속도는 최대 400kHz이며 USART보다 느립니다 (그러나이 속도는 커패시턴스 제한에 따라 다릅니다). 그 이유는 디바이스가 데이터 와이어를 낮게 구동하지만 와이어가 다시 하이 플로팅되도록하여 (풀업 저항) 반대의 전환이 이루어지기 때문입니다.

  • 모든 통신이 동일한 제한된 대역폭을 공유한다고 생각하면 속도가 더 느려집니다. 모든 통신은 동일한 제한된 대역폭을 공유하기 때문에 데이터가 전송되기 전에 네트워크가 유휴 상태가 될 때까지 데이터를 기다려야하는 통신이 지연 될 수 있습니다. 다른 데이터가 지속적으로 전송되는 경우 데이터 전송이 차단 될 수도 있습니다.

  • 마스터가 슬레이브를 처리 한 다음 명령 / 요청을 보내면 슬레이브는 나중에 응답하는 마스터 슬레이브 프로토콜에 의존합니다. 한 번에 하나의 장치 만 통신 할 수 있으므로 슬레이브는 마스터가 완료 될 때까지 기다려야합니다.

  • 모든 장치는 마스터 및 / 또는 슬레이브로 작동 할 수 있으므로 상당히 유연합니다.

SPI

  • 이것이 마이크로 컨트롤러 간의 일반적인 통신에 권장 / 사용할 내용입니다.

  • 최대 CLK / 2 = 8MHz (16MHz CLK의 경우)까지 고속이므로 가장 빠른 방법입니다. 이것은 시계 전용 와이어로 인해 달성 할 수 있습니다.

  • MOSI, MISO 데이터 및 SCK 클럭 와이어는 전체 네트워크에서 공유되므로 배선이 더 간단합니다.

  • 마스터-슬레이브 형식이지만 모든 장치는 마스터 및 / 또는 슬레이브 일 수 있습니다. 그러나 네트워크 내에서 공유 배선의 경우 슬레이브 선택 합병증으로 인해 2 선 인터페이스와 달리 계층 적 방식으로 만 사용해야합니다. IE. 모든 장치를 트리로 구성하는 경우 장치는 하위 장치에만 마스터하고 상위 장치에는 슬레이브 만 있어야합니다. 즉, 슬레이브 모드에서 장치는 항상 동일한 마스터를 갖습니다. 또한이 작업을 올바르게 수행하려면 업스트림 마스터에 MISO / MOSI / SCK에 저항을 추가해야 장치가 다운 스트림으로 통신하는 경우 (슬레이브로 선택하지 않은 경우) 통신이 다른 부분의 통신에 영향을 미치지 않습니다. 네트워크 (저항을 사용하여 수행 할 수있는 레벨 수는 제한되어 있습니다. 두 SPI 포트를 모두 사용하는 더 나은 솔루션은 아래를 참조하십시오).

    AVR 마이크로 컨트롤러는 MOSI 신호가 슬레이브 선택 될 때 자동으로 3 상태로 설정하고 슬레이브 모드 (마스터에있는 경우)로 전환 할 수 있습니다.

    계층 적 네트워크가 필요할 수 있지만 대부분의 네트워크는 트리와 같은 방식으로 구성 될 수 있으므로 일반적으로 중요한 제한은 아닙니다.

  • 각 AVR 마이크로 컨트롤러가 두 개의 개별 SPI 포트를 지원하므로 각 장치가 두 개의 서로 다른 네트워크에서 서로 다른 위치를 가질 수 있기 때문에 위의 사항을 약간 완화 할 수 있습니다.

    이것을 말했지만, 트리 / 계층 (2 이상)에서 많은 수준이 필요한 경우 저항을 사용하는 위의 솔루션이 너무 어려워 작동하지 않습니다. 이 경우 트리의 각 계층간에 SPI 네트워크를 변경해야합니다. 이는 각 장치가 한 SPI 네트워크의 자식 장치와 다른 SPI 네트워크의 부모 장치에 연결됨을 의미합니다. 그것은 하나의 연결 트리 만 가지고 있음을 의미하지만, 장치는 자식과 부모 중 하나와 동시에 통신 할 수 있고 저항이 없기 때문에 항상 올바른 값을 선택하기가 어렵다는 장점이 있습니다 .

  • 별도의 MOSI 및 MISO 와이어가 있기 때문에 마스터와 슬레이브가 동시에 통신 할 수있어 속도가 2 배 증가 할 수 있습니다. 각 추가 슬레이브에 대해 슬레이브 선택에 추가 핀이 필요하지만 큰 부담은 아닙니다. 10 개의 서로 다른 슬레이브라도 10 개의 추가 핀만 있으면 일반 AVR 마이크로 컨트롤러에 쉽게 수용 할 수 있습니다.

지정한 AVR 마이크로 컨트롤러가 CAN을 지원하지 않습니다. 다른 좋은 옵션이 있기 때문에 어쨌든 중요하지 않을 것입니다.


권장 사항은 SPI 입니다. 빠르기 때문에 배선이 너무 복잡하지 않으며 풀업 저항이 불필요합니다. 드문 경우이지만 SPI가 귀하의 요구를 완전히 충족시키지 못하는 경우 (아마도 더 복잡한 네트워크에서) 여러 옵션을 사용할 수 있습니다 (예 : 두 개의 와이어 인터페이스와 함께 두 개의 SPI 포트 사용 및 일부 마이크로 컨트롤러 쌍 사용). USART 루프 사용!)

귀하의 경우 SPI를 사용한다는 것은 당연히 컴퓨터에 USB로 연결된 마이크로 컨트롤러가 마스터가 될 수 있으며 컴퓨터에서 각 슬레이브 장치로 관련 명령을 전달할 수 있음을 의미합니다. 또한 각 슬레이브에서 업데이트 / 측정을 읽고이를 컴퓨터로 보낼 수 있습니다.

8MHz 및 0.5m 와이어 길이에서 문제가되지 않을 것이라고 생각합니다. 그러나 만약 그렇다면, 커패시턴스 (접지선과 신호선이 너무 가까워지고 다른 도체 사이의 연결에주의)와 신호 종단에 ​​더주의하십시오. 문제가 지속되는 경우에는 클럭 속도를 줄일 수 있지만 필요하다고 생각하지는 않습니다.


나에게서 SPI를위한 엄지 손가락
georgebrindeiro

2
아마도 I2C도 고려해야 할 가치가 있지만 SPI의 팬이기도합니다 (각 장치에 별도의 CS 라인이 필요하지 않음). 그러나 CAN은 그렇게 쉽게 해고되어서는 안됩니다. 결국 자동차 버스가 선택되므로 취미 로봇을 배제하지는 않을 것입니다!
앤드류

SPI 버스에는 실제로 마스터에서 각 슬레이브까지 별도의 CS 회선이 필요합니까? 그렇다면 얼마나 많은 슬레이브가 연결되어 있더라도 SPI 버스 의 Wikipedia 기사에서 언급 한 것처럼 정확히 4 개의 마스터 연결이 필요한 다른 버스를 무엇이라고 부릅 니까?
David Cary

1
+1 큰 반응을 보인 나는 구식이며 485를 선호하고 일반적으로 소프트웨어 주소가있는 버스를 좋아하지만이 경우 속도 및 자원 소비 구성 요소는 SPI를 선택합니다. 절전 및 시계 손실 진폭을 입을 수 메모리, NIC 등 : 당신은 당신의 버스가 서로 다른 전송 속도로, 다른 IC를 coesisten 특히 거리와 전기 노이즈에 많은 관심 것이다 있지만
RTOSkit

3
CAN에 대한 귀하의 의견이 정확하지 않습니다. CAN은 단순한 2 선 버스가 아닙니다. 최고 속도 400kbps의 I2C와 혼동하고 있다고 생각합니다. CAN의 최고 속도는 1Mbps입니다.
Rocketmagnet

5

프로세서 간 통신에 CAN을 적극 권장 할 수 있습니다. 우리는 동일한 버스에서 최대 22 개의 프로세서를 사용하여 로봇에서 사용합니다. 우수한 프로토콜 설계를 통해 사용 가능한 대역폭의 약 90 %를 사용할 수 있습니다 (모든 오류 확인 및 프레임 간 간격을 고려할 때 약 640kbps). 하나의 CAN 버스에서 1000Hz로 10 개의 모터를 서보 할 수 있습니다. 이것은 한계에 다가오고 있습니다. 데이터를 매우 신중하게 포장하면 20 개의 모터로 짜낼 수 있습니다.

일반적으로 CAN은 각 프로세서 당 하나의 트랜시버 칩이 필요합니다 (8 핀 장치 일뿐). 트랜시버는 전기적 간섭이 많은 환경 (모터, 솔레노이드 및 무선 송신기)에서 작업 할 때 간섭을 거의 방출하지 않는 우수한 차동 신호를 제공하며 간섭에 영향을받지 않습니다.

CAN 버스 연결

그러나 제한된 환경에서는 실제로 트랜시버없이 CAN 을 사용할 있습니다.


EtherCAT

대역폭이 심각한 버스를 구현하고 싶다면 EtherCAT 을 사용해 보는 것이 좋습니다 . 100Mb 버스이며 PC의 이더넷 포트에 연결할 수 있습니다. 버스에는 두 가지 중요한 부분이 있습니다.

  • 다리. 이것은 이더넷 물리 계층을 더 단순하고 저렴한 LVDS 물리 계층으로 변환하는데, 이는 큰 커넥터, Phy 칩 및 이더넷 자체가 필요로하는 많은 구성 요소를 필요로하지 않습니다.
  • 노드. 각 노드에는 하나의 ET1200 칩과 마이크로 컨트롤러 만 있으면됩니다.

PC는 1kHz 이상의 속도로 노드와 큰 데이터 청크를 송수신 할 수 있습니다. 단일 EtherCAT 버스에서 많은 것을 제어 할 수 있습니다 .

추가 :

Shadow Robot Company는 이제 Ronex 라는 유용한 EtherCAT 버스 시스템을 판매합니다 . 많은 양의 I / O를 추가 할 수 있으며 모터 컨트롤러 및 고품질 ADC와 같은 다른 유형의 보드를 곧 출시 할 예정입니다.


그 이미지의 출처는 무엇입니까? 그것은 CAN High빨간색과 파란색 전선 모두를 가지고 있습니다.
Ian

1

나는 오래된 스레드를 파고 있다는 것을 알고 있으며 이것은 일종의 주제가 아니지만 Beckhoff에서 ET1200 칩을 얻을 수 있다고 생각하지 않습니다. 나는 잠시 동안 그들에게 이메일을 보냈고 Ethercat 그룹에 가입해야한다는 조언을 받았다. 이를 위해 나는 그룹에 다시 기여할 것임을 증명해야했다. 그 시점에서 (그리고 현재) 시점에서 나는 여전히 내 장치 (현재 로봇 응용 프로그램을위한 브러시리스 모터 컨트롤러-현재 CAN을 사용하고 있음)를 프로토 타이핑하고 있습니다. 저학년). 나는 그들에게 실망을 표명했다. 그들은 실망하지 말라고 말했다!! 꽤 재미있는 것들! 나는 정말로Ethercat에 들어가기를 좋아하지만 ASIC은 애호가 나 회사가없는 사람들에게는 손이 닿지 않는 것 같습니다. 또한 이것은 첫 번째 게시물이므로 오래된 게시물을 파서 신을 화나게 한 경우 사과드립니다!


어서 오십시오. 답변이 관련이 있다면 오래된 게시물을 부활시키는 것이 좋습니다. 그리고 당신의 의견은 나와 관련이있는 것 같습니다 ...
Andrew

고마워 친구 이것은 좋은 포럼입니다! 관심이 없다면 Ethercat에 대한 경험이 있습니까? PCB의 프로토 타이핑에 적합한 슬레이브 장치를 얻는 다른 방법을 알고 있습니까? 나는 기꺼이 지불하지만 현재는 Bechoff ASIC을 구입하기 위해 그룹에 가입 해야하는 요구 사항을 충족시키지 못합니다. 답답해!
법률

EtherCat이 아닙니다. 저는 CAN (좋은 옵션), LIN (그렇지 않은 IMHO)을 사용하고 SPI 또는 I2C를 추천 할 수 있습니다.
Andrew

ET1100 또는 ET1200 칩을 잡으셨습니까? 현재 사용 가능한 다른 옵션 인 microchip LAN9252가 없다면 ET1100과 호환되며 꽤 잘 작동합니다. SOES 라이브러리 사용
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.