여러 마이크로 컨트롤러 간 통신


20

N 마이크로 컨트롤러 (N> = 2 MCU)로 구성된 시스템 구현을 시작하고 싶지만 서로 통신 할 수있는 가능성을 알고 싶습니다.

이상적으로, (N-1) 마이크로 컨트롤러는 집안의 클라이언트 역할을하는 반면, 마지막 ( "서버") 마이크로 컨트롤러는 USB를 통해 PC에 연결됩니다. 지금 당장 문제는이 (N-1) 마이크로 컨트롤러를 "서버"에 연결하는 방법입니다. 클라이언트 MCU는 매우 간단한 작업을 수행하므로 CAN / PHY-MAC를 제공하기 때문에 ARM을 사용하여 이러한 간단한 작업을 수행하는 것은 좋은 솔루션이 아닙니다 .

통신은 대부분의 장치에 대해 몇 분마다 한 번 이상 일어나지 않으며 다른 장치에 대해서는 요청시 발생하지 않습니다. 속도는 그다지 중요하지 않습니다 (메시지가 짧음) : 1 Mbit / s 나는 내 목적에 너무 과도하다고 생각합니다.

내가 사용하려는 MCU는 다음과 같습니다.

  • Atmel AVR Tiny / Mega
  • TI MSP430
  • 팔 외피 M3 / M4
  • (아마 Atmel AVR UC3-32 비트)

PIC 를 프로그래밍 할 가능성이 적기 때문에 가능한 한 (개인 선택) PIC 를 피하고 싶습니다 (위의 모든 것은 공식 도구뿐만 아니라 오픈 소스 도구가 많거나 적습니다).

일부 ARM은 CAN 기능을 제공하지만 다른 ARM은 확실하지 않습니다.

지금 나는 이러한 가능성을 생각해 냈습니다.

  1. 데이터를 전송하는 간단한 GPIO (메시지 시작을 나타내려면 16 비트 이상> 메시지의 끝을 나타내려면 16 비트 이상) 그러나 모든 비트를 감지하려면 표준 주파수 << (frequency_client, frequency_server)에 있어야합니다. 클라이언트 MCU 당 하나의 케이블 만 필요합니다.
  2. RS-232 : 나는 이것이 가장 널리 사용되는 통신 프로토콜이라고 생각하지만 그것이 얼마나 잘 확장되는지 모르겠습니다. 현재 최대 64 개의 클라이언트 MCU를 고려하고 있습니다 (아마도 나중에)
  3. USB : AFAIK 이것은 주로 RS-232와 비슷하지만이 경우에는 잘 확장되지 않는다고 생각합니다 (USB는 많은 장치를 지원하지만-255를 올바르게 기억하면이 응용 프로그램에는 너무 복잡 할 수 있습니다)
  4. RJ45 / 이더넷 : 문제없이 장거리 전송이 가능하기 때문에 (실제로는 차폐> Cat 6 케이블 사용시) 실제로 사용하고 싶습니다 . 문제는 비용 (PHY, MAC, 변압기 등)입니다. 그래도 실제로 집에서 잘 납땜 할 수 있는지 모르겠습니다. 이렇게하면 클라이언트 MCU가 필요하지 않습니다.
  5. Wireless / ZigBee : 책상 뒤에 "스파게티"를 피하기 위해 갈 수있는 방법 일지 모르지만 모듈은 매우 비쌉니다.
  6. RF 모듈 / 트랜시버 : 300 MHz-1 GHz 대역의 제품을 말하고 있으므로 집에서 납땜하기가 어려워 야합니다. 이 모듈은 모두 내장되어 있지만 ZigBee만큼 비싸다 (Sparkfun, Sparkfun의 RF 모듈은 더 싼 것 같다).
  7. 할 수있다? 매우 강력 해 보입니다. 자동차 애플리케이션에 사용하지 않더라도 여전히 좋은 대안이 될 수 있습니다.
  8. I²C / SPI / UART ? 다시 말하지만 가능하면 케이블로 "스파게티"를 피하는 것이 좋습니다.
  9. PLC 는 실제로 옵션이 아닙니다. 길이가 길어지면 전력 네트워크의 커패시턴스 부하에 따라 성능이 매우 빠르게 저하됩니다. 가격은 이더넷과 거의 같다고 생각합니다.

또한, 동시 전송의 경우 어떤 프로토콜이 "더 나은"상태가됩니까 (두 개의 장치가 동일한 순간에 전송을 시작하는 경우는 거의 없습니다 : 어떤 프로토콜이 가장 "충돌 관리 시스템"/ "충돌 관리 시스템"을 제공합니까?

요약 : 유연성 (최대 장치 수, 충돌 / 충돌 관리 시스템 등), 가격을 모두 고려하여 매우 가벼운 데이터 통신을 수행하는 분산 클라이언트 시스템에 가장 적합한 솔루션이 무엇인지 듣고 싶습니다. , 집에서 쉽게 만들 수 있습니다 (납품) ... 통신 모듈에 20 달러를 쓰지 않으려 고하지만 동시에 책상 뒤에 30 개의 전선이 있으면 빠질 것입니다.

지금 당장 이미징하고있는 솔루션은 GPIO 또는 RS-232를 통해 가까운 MCU 사이에서 기본적인 통신을 수행하고 ( 존속 !) "영역"당 하나의 MCU에서 이더넷 / 지그비 / Wi-Fi를 사용하여 서버와 통신하는 것입니다 ( 비용이 많이 듭니다) 하지만 각 클라이언트 MCU 당 하나의 이더넷 모듈보다 훨씬 저렴합니다.)

케이블 대신 광섬유 / 광섬유를 사용하는 것이 가능할 수도 있습니다. 추가 변환이 필요하지만이 경우 가장 적합한 솔루션인지 확실하지 않습니다. 더 자세한 내용을 듣고 싶습니다.


2
CAN 기능이있는 PIC가 있으며이를 문서화하여 프로그래밍 할 수있는 무료 공식 도구가 있습니다.
AndrejaKo

@AndrejaKo PIC에는 실제로 AVR 또는 MSP430과 같은 오픈 소스 컴파일러가 없습니다. 동일한 가격으로 위에 나열된 MCU보다 더 많은 기능을 제공하는 경우가 많습니다. 12/16/18/24/32 제품군 간의 이러한 큰 차이점이 마음에 들지 않으며 그 중 일부는 무료 컴파일러가 전혀 없습니다 (PIC18이라고 생각합니다).
user51166

2
실제로 PIC18에는 무료 컴파일러가 있으며 다른 컴파일러도 무료입니다. 다른 가족의 주요 보너스는 GCC와 함께 일한다는 것입니다. 오픈 소스 캠프에는 PIC 16 및 PIC 18 장치를 지원하는 Small device C 컴파일러가 있습니다.
AndrejaKo

2
아직 언급 한 uC에 익숙하지 않은 경우 , 특히 오픈 소스로 가고 싶다면 ARM이 PIC 또는 AVR보다 시작하기가 훨씬 어렵다는 점에주의하십시오 . 공급 업체는 ARM을 사용하여 코어를 설계하지 않으며 일반적으로 IDE를 제공하지 않으므로 전체를 조금 더 복잡하게 만들 수 있습니다. Microchip이 PIC의 경우 모든 것을 제공하고 지원하는 것이 좋습니다.
Oli Glaser

@OliGlaser 음 ... ARM의 오픈 소스 도구는 사용하기가 약간 어려울 수 있지만 (STM32 디스커버리 보드를 사용해 보았지만 제대로 작동하지 않았습니다) 많은 공급 업체가 다음과 같은 IDE를 제공합니다. 그것의 장단점-일식 기반 및 무료 제한 : 예를 들어 LPCXpresso (NXP) 및 Code Composer Studio (TI) (오픈 소스는 아니지만 최소한 지원됩니다). 반면에 AVR은 ATMEL STUDIO 6뿐만 아니라 오픈 소스 측에서도 상당히 잘 지원됩니다. PIC에 대한 경험이 없습니다. AVR (어셈블러) 및 ARM (C, NDS) 만 코딩했습니다.
user51166

답변:


22

이 경우 CAN 사운드가 가장 적합합니다. 집안의 거리는 CAN으로 500 kbits / s로 처리 할 수 ​​있으며, 이는 사용자의 요구에 따라 충분한 대역폭처럼 들립니다. 마지막 노드는 선반 USB to CAN 인터페이스에서 벗어날 수 있습니다. 이를 통해 컴퓨터의 소프트웨어가 CAN 메시지를 전송하고 버스의 모든 메시지를 볼 수 있습니다. 나머지는 TCP 서버 또는 다른 것으로 외부 세계에 제공하려는 경우 소프트웨어입니다.

CAN은 I / O 회선으로 자신의 롤링을 제외하고 실제로 버스라고 언급 한 유일한 통신 수단입니다. 이더넷을 포함한 다른 모든 점은 포인트입니다. 이더넷은 스위치가있는 버스처럼 논리적으로 보이도록 만들 수 있지만 개별 연결은 여전히 ​​지점 간이며 논리적 버스 토폴로지를 얻는 데 많은 비용이 듭니다. 각 프로세서의 펌웨어 오버 헤드도 CAN보다 훨씬 큽니다.

CAN의 좋은 점은 하드웨어에서 가장 적은 프로토콜 계층이 처리된다는 것입니다. 예를 들어, 여러 노드가 동시에 전송을 시도 할 수 있지만 하드웨어는 충돌을 감지하고 처리합니다. 하드웨어는 CRC 체크섬 생성 및 유효성 검사를 포함하여 전체 패킷의 송수신을 처리합니다.

PIC를 피하는 이유는 의미가 없습니다. 프로그래머를위한 많은 디자인이 있습니다. 하나는 내 LProg 이며, 페이지 하단에서 회로도를 사용할 수 있습니다. 그러나 시간을 페니 / 시간으로 평가하지 않으면 자신 만의 것을 만드는 것이 비용 효과적이지 않습니다. 또한 프로그래머 이상의 의미가 있습니다. 디버깅에 도움이되는 것이 필요합니다. Microchip PicKit 2 또는 3은 매우 저렴한 프로그래머 및 디버거입니다. 나는 그들과 개인적인 경험이 없지만 다른 사람들이 일상적으로 사용하는 것을 들었습니다.

추가 :

RS-485에 대한 몇 가지 권장 사항이 있지만 CAN과 비교하여 좋은 생각은 아닙니다. RS-485는 전기 전용 표준입니다. 차동 버스이므로 여러 노드를 허용하며 노이즈 내성이 우수합니다. 그러나 CAN은이 모든 것을 갖추고 있으며 더 많은 것을 제공합니다. CAN은 또한 일반적으로 차동 버스로 구현됩니다. 일부는 RS-485가 전기적으로 인터페이스하기가 간단하다고 주장합니다. 이것은 사실이지만 CAN도 마찬가지입니다. 어느 쪽이든 단일 칩이 수행합니다. CAN의 경우 MCP2551이 좋은 예입니다.

따라서 CAN과 RS-485는 전기적으로 거의 동일한 장점을 가지고 있습니다. CAN의 가장 큰 장점은 해당 계층 이상입니다. RS-485를 사용하면 해당 레이어 위에는 아무것도 없습니다. 당신은 당신의 자신에 있습니다. 버스 중재, 패킷 검증, 타임 아웃, 재시도 등을 다루는 프로토콜을 설계하는 것이 가능하지만 실제로이 권리를 얻는 것은 대부분의 사람들이 알고있는 것보다 훨씬 까다 롭습니다.

CAN 프로토콜은 패킷, 체크섬, 충돌 처리, 재시도 등을 정의합니다. 이미 존재하고 생각하고 테스트했을뿐만 아니라 많은 마이크로 컨트롤러에서 실리콘으로 직접 구현된다는 것이 가장 큰 장점입니다. 펌웨어는 패킷 송수신 레벨에서 CAN 주변 장치와 인터페이스합니다. 전송을 위해 하드웨어는 충돌 감지, 백 오프, 재시도 및 CRC 체크섬 생성을 수행합니다. 수신을 위해 패킷 감지, 클럭 스큐 조정 및 CRC 체크섬 유효성 검사를 수행합니다. 그렇습니다. CAN 주변 장치는 RS-485와 같이 자주 사용되는 UART보다 구동에 더 많은 펌웨어를 필요로하지만, 실리콘이 많은 저수준 프로토콜 세부 사항을 처리하기 때문에 전체적으로 훨씬 적은 코드를 사용합니다.

간단히 말해, RS-485는 과거의 시대이며 오늘날의 새로운 시스템에는 적합하지 않습니다. 주요 문제는 과거에 RS-485를 사용했던 사람들이 CAN에 집착하여 CAN이 어떻게 든 복잡하다고 생각하는 것 같습니다. CAN의 낮은 수준은 복잡하지만 모든 RS-485 구현도 복잡합니다. RS-485 기반의 잘 알려진 여러 프로토콜이 CAN 기반의 최신 버전으로 대체되었습니다. NMEA2000은 새로운 CAN 기반 표준의 한 예입니다. CAN 기반 OBD-II 및 J-1939에서는 현재 거의 사용되지 않는 또 다른 자동차 표준 J-J1708 (RS-485 기반)이 있습니다.


나만의 커스텀 보드를 만드는 것은 MCU와 주변 하드웨어를 통합 할 때 유용합니다. 개발 목적으로 개발 키트가 더 나은 방법이라는 데 동의합니다. PIC를 피하는 이유는 공개 회로도 부족보다는 오픈 소스 컴파일러가 부족하기 때문입니다 (예를 들어 PIC18은 무료이지만 일부는 무료이지만 다른 MCU에서는 찾을 수없는 추가 기능을 제공하지만) 할 수있다, ...). 그리고 I2C는 버스 AFAIK입니다.
user51166

@ user51166-마이크로 칩이 제공하는 무료 PIC18 컴파일러가 있습니다. 참고 항목 MPLAB XC 컴파일러의 제품 페이지를. 16 비트 및 32 비트 uC 용 컴파일러도 나열되어 있습니다.
PetPaulsen

@ user51166 무료 C18 컴파일러도 있습니다.
AndrejaKo

@PetPaulsen 이상한. 한 달 전에 라이센스 문제로 인한 것이 아닌 PIC18을 제외하고 모든 컴파일러를 무료로 다운로드 할 수있는 페이지 (PIC16 / 24 / 32)가 나열된 페이지를 보았습니다. 아마 그것은 확실하지 않지만 전환 MPLAB C 컴파일러-> MPLAB XC 컴파일러로 해결되었습니다. 또한 "오직"은 완전한 오픈 소스 컴파일러가 아니라 코드를 최적화하지 않는 프리웨어 버전을 제공합니다. 여전히 그것은 아무것도 아닌 것보다 낫다;)
user51166

@user : 모든 Microchip 컴파일러에는 일부 최적화가 비활성화되어 있다는 점에서 전체 버전과 다른 무료 버전이 있다고 생각합니다. 어셈블러, 사서, 링커 및 시뮬레이터는 모두 무료 MPLAB 패키지에 포함되어 있습니다. 여기에는 실제로 문제가 없습니다.
Olin Lathrop

6

이 기능은 컨트롤러 네트워킹을위한 것이므로 CAN이있는 컨트롤러를 권장합니다.

RS232는 쉽게 구현할 수 있지만 2 개 이상의 노드를 통신하려고하면 문제가 발생합니다 (이 목적으로 구축되지 않았기 때문에).

이더넷 구현에 자연스러운 일부 호스트 및 클라이언트 상호 연결을 언급했기 때문에 이더넷도 훌륭한 옵션이 될 수 있습니다.


예를 들어 CAN over Ethernet의 장점은 무엇입니까? 아마도 더 싸지 만, 그 외에는 무엇입니까?
user51166

@ user51166-CAN은 저렴할뿐만 아니라 훨씬 저렴합니다. 더 쉬울뿐만 아니라 훨씬 쉽습니다.
Rocketmagnet

@Rocketmagnet : 좀 더 설명해주세요. 대부분의 경우 어쨌든 통합 IC가 필요합니다 (PIC 및 ARM 및 기타 다른 제품은 종종 CAN 기능을 통합하지만 약간 비쌉니다). 하드웨어 관점에서 IC가 한 조각 당 0.5-1.0 $로 발견 될 수 있기 때문에 이것이 얼마나 저렴한 지 알 수 없습니다. 소프트웨어 관점에서 더 쉽다는 것을 의미한다고 생각합니까? CAN은 최대 500 미터의 거리를 가지고 있지만 필자의 경우에는 충분하지만 장거리 (광섬유 일 수도 있음)에 대한 비슷한 대안이 있습니까?
user51166

4

여러 회선을 사용하는 RS-485는 모든 기기에 동일한 회선을 연결할 수있는 경우 잘 작동 할 수 있습니다.

예를 들어 기존 카테고리 5e 네트워크 케이블과 함께 사용하는 경우 양방향으로 데이터 전송을 위해 두 쌍을 사용할 수 있고 (전이중 모듈 사용) 공통 접지로 한 쌍 또는 단일 와이어를 사용하고 나머지는 협상 할 수 있습니다. 어떤 기기가 어떤 순간에 전송할지 RS-232보다 조금 더 복잡하지만 모듈은 CAN 및 이더넷보다 저렴하고 케이블 제한은 1200m입니다. 단점은 자체 충돌 해결 프로토콜을 만들어야한다는 것입니다. 전송하려는 장치가 하나의 전용 와이어를 확인하고 높은지 확인하십시오. 그렇지 않으면 높게 가져 와서 의사 소통을 시작하십시오. 그렇다면 임의의 시간 동안 기다리십시오. 아직도 이것이 장거리에서 얼마나 잘 작동하는지 잘 모르겠습니다.


너무 먼 거리를 걱정하지 않아도 현재 100m 이상을 계획하지는 않습니다.
user51166

BTW가 오늘 stackexchange에서 @ <username>을 허용하지 않는 이유는 무엇입니까? 하나를 넣을 때마다 (@ 기호뿐만 아니라) 완전히 삭제됩니다.
user51166

@ user51166-답변 작성자에게 자동으로 통보되므로 "\ @-noise"가 자동으로 제거됩니다. (이 답변의 작성자가 아니기 때문에 \ @ user51166이 제거되지 않았습니다)
PetPaulsen

흥미로운 점은 여기에 의견에 대한 알림을받지 못했다는 것입니다.
AndrejaKo

4

맨체스터 인코딩 데이터로 작업하는 RS-485 버스를 선택합니다 .

RS-485 이유 :

  • 싸다
  • 구현하기 쉽다
  • 저전력 사용
  • 장거리 (최대 1200 미터) 허용
  • 높은 데이터 속도 (최대 10Mbps)
  • 간섭에 대한 높은 내성
  • 동일한 버스에서 최대 256 개의 장치를 허용하는 송수신기가 있습니다
  • 적은 부품 수

맨체스터 인코딩 :

  • 구현하기 쉽다
  • 자체 동기화 가능

데이터 무결성을 위해 메시지에는 길이와 CRC 필드가 포함될 수 있습니다.

CRC 함수의 예 :

unsigned char crc_calc(unsigned char buffer[], unsigned short size)
{
  unsigned long i;
  unsigned char crc;

  crc = CRC_INIT;

  for (i=0;i<size * 8;i++)
  {
    crc = (crc << 1) | (crc >> (7));

    if (buffer[i/8] & (0x80 >> (i%8)))
    {
      crc ^= CRC_POLY;
    }
  }

  return crc;
}

CRC_INITCRC_POLYCRC를 계산하는 데 사용되는 임의의 값이다.

길이 및 CRC 필드가있는 메시지의 예 :

메시지 예


저렴한 트랜시버에 대한 제안은 아마도 저렴할까요?
user51166

또한 @AndrejaKo가 제안한 것처럼 RS-485는 충돌 해결 프로토콜을 제공하지 않는 것 같습니다.
user51166

송수신기의 선택은 사용하려는 전압에 따라 다릅니다. 충돌 해결은 CRC 점검, 라인 모니터링 또는 둘 다가있는 소프트웨어에서 이루어져야합니다.
Bruno Ferreira

마스터가 하나 인 경우 일종의 주소 지정을 수행하거나 턴 기반 전송을 수행 할 수도 있습니다.
Bruno Ferreira

실제로 마스터가 아닙니다. USB를 통해 PC에 대한 인터페이스처럼 작동하는 "서버"만 있습니다. 클라이언트는 그러나 자동으로 그에게 메시지를 보내야합니다 ...
user51166

3

내가 선호하는 이더넷과 내가 선호하는 CAN을 비교해 보겠다.

필요한 구성 요소 :

  • 이더넷 : RJ45 커넥터, 자기 장치, Phy 칩 (MCU에 통합되지 않은 경우). 또한 스위치와 각 노드로 연결되는 스위치와 케이블이 필요합니다. 각 PCB에는 상당히 많은 커패시터와 종단 저항이 필요하며 페라이트도 가능합니다. 우수한 PCB 설계가 필요합니다.
  • CAN : 트랜시버 칩 (저렴한), 모든 커넥터, 저렴한 케이블은 한 사이트에서 다음 노드로 루프를 돌며 사이트 주변을 돌 수 있습니다. 트랜시버에는 하나의 커패시터와 버스의 각 끝에 하나의 종단 저항이 필요합니다.

마이크로 컨트롤러 1 달러에 대해 이야기하고 있습니다. 버스보다 비용이 MCU보다 훨씬 많습니다. 실제로 어느 것이 더 저렴한 지 알기 위해서는 각 솔루션의 총 비용을 더해야합니다. MCU, 커넥터, 트랜시버, 수동 부품, PCB, 케이블 등의 비용을 추가하십시오.


0

NXP의 LPC11C24는 CAN 트랜시버가 통합되어 있으며 CANOpen은 ROM에서 지원합니다 (32K 데이터 플래시를 먹지 않음). LPCXpresso 11c24 보드는 20 EUR (DB9 커넥터 공간 제공)이므로 실제로 전선을 추가하면됩니다. :-)


0

다른 비슷한 질문에서 다시 게시하십시오. 두 마이크로 컨트롤러 간의 저렴한 비용의 간단한 통신

TLDR : 특히 저렴하지는 않지만 일부 사용 사례에 적합합니다.

상자 바깥 쪽을 보면 최근에 부딪친 다음 칩과 같은 다른 솔루션이있을 수 있습니다. 물론, 그것은 모두 당신이하고 싶은 것에 달려 있습니다. UART와 같은 것이 두 보드를 모두 같은 보드에 두었거나 분리 할 경우 수동으로 ESD를 보호 할 계획이라면 염두에 두어야합니다.

IO-Link 애플리케이션을위한 마스터 및 장치 솔루션

L6360   Master
L6362A  Device

여기에 이미지 설명을 입력하십시오

다음과 같은 솔루션을 언제 고려 하시겠습니까?

  1. 프론티어 칩은 완전히 보호됩니다. 각 MCU를 별도의 보드에 놓고 노출 된 핀 (예 : 나사 단자)을 처리하는 경우 중요합니다.
    • 역 극성
    • 차단 기능이있는 과부하
    • 과열
    • 저전압 및 과전압
    • GND 및 VCC 오픈 와이어
  2. 상호 운용성 다른 사람이 다른 쪽을 디자인하려는 경우 IO-Link를 통해 데이터를 퍼널 링하는 것만으로도 알 수 있습니다.
  3. 통합 레귤레이터 Vcc(in) 7~30v, Vdd(out) 3.3/5v

그것은 나에게 흥미있는 것처럼 들렸다. 그래서 나는 그것을 거기에 넣을 것이라고 생각했다.


-3

응용 프로그램 및 마이크로 컨트롤러의 규모에 따라 다릅니다. 당신은 Atmel을 작고 메가로 언급했는데 아주 작습니다. 그들의 경우 I2C / SPI / UART는 하드웨어로 구현되어 사용하기 쉽다는 장점이 있습니다.


3
하지만 OP의 문제를 어떻게 해결합니까? IIC는 버스이지만 집을 가로 지르는 것과 같이 장거리에는 전혀 적합하지 않습니다. 단일 종단이며 상대적으로 높은 임피던스입니다. SPI는 버스이지만 각 장치에 대해 별도의 슬레이브 선택 라인이있는 단일 마스터로 제어됩니다. 각 라인을 라인 드라이버 및 수신기와 함께 차동 쌍으로 구현할 수 있지만, 포인트 투 포인트 마스터 대 슬레이브 선택 문제가 있습니다. UART는 엄격하게 가리 킵니다. OP의 상황에서 어떻게 사용할 것인지는 확실하지 않습니다.
Olin Lathrop
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.