2m 이상의 케이블로 I2C를 사용할 수 있습니까?


24

현재 프로젝트에서 마이크로 컨트롤러와 I2C를 통한 일부 센서 간 통신이 필요합니다. 그중 하나는 온도 센서이며 마이크로 컨트롤러에서 약 2 미터 떨어져 있어야합니다. 다른 프로토콜을 선택할 수 없습니다 (센서가 지정된 커넥터 / 핀 / 프로토콜이있는 모듈에 있음).

이 구성에서 통신이 가능하다고 생각하십니까? 그것이 가능하거나 불가능할 수 있도록 어떤 정보를 찾아야합니까? 조언이 있습니까?

PCB 외부의 IC와 통신하는 것은 처음입니다.


5
더 많은 정보를 추가하십시오. i2c 속도는 얼마입니까? 풀업 저항? 사용한 케이블과 커패시턴스? 호스트 MCU 란 무엇이며 센서는 무엇입니까? 그러나 일반적으로 I2C는 HDMI와 같은 케이블을 통해 수 미터를 작동하므로 작업이 올바르게 완료되면 작동합니다.
Justme


6
"다른 프로토콜을 선택할 수 없습니다"두 번째 마이크로 컨트롤러를 센서에 가까이두고 데이터를 읽고 원하는 프로토콜로 전송할 수 있습니다.
FooBar

1
kbit / s의 최소 속도가 있습니까?
마스트

2
시계를 늦추면 상당히 먼 거리를 갈 수 있습니다.
copper.hat

답변:


36

I2C는 장거리에서 사용하도록 설계되지 않았지만 실제로 약 2 미터 거리에서 사용되는 여러 응용 분야를 알고 있습니다. 또한 문제가 발생한 사례를 알고 있으며 결국 접지 루프를 수정하여 문제를 해결했습니다.

제대로 작동하려면 P82B715와 같은 I2C 버스 익스텐더를 사용해야합니다.

그러나 PB2B715데이터 시트에는 8.2 절에 다음 내용이 나와 있습니다.

전화 또는 이더넷 (Cat5e) 배선에 사용되는 일반적인 연선 또는 플랫 케이블의 경우, 정전 용량은 약 50 pF ~ 70 pF / 미터이므로 이론적으로 케이블 길이는 최대 50 m입니다 . 실제 경험을 통해 30m은 표시된 값을 사용하여 최대 100kHz까지이 간단한 방식으로 안전한 케이블 길이를 구동 할 수 있음을 입증했습니다 . 더 먼 거리와 더 빠른 속도가 가능하지만 더 신중한 디자인이 필요합니다.

따라서 전문가들 (NXP는 전 필립스, I2C의 발명가)은 30 미터가 가능한 거리로 입증되었다고 말합니다. 내 경험에 따르면 2 미터는 가능한 거리이며 나에게보고 된 경험에 따르면 익스텐더없이 더 많이로드 된 I2C 버스도 가능합니다.

장거리 I2C 버스 작동의 핵심 포인트는 다음과 같습니다.

  • 저용량 케이블 사용 (트위스트 페어 / 이더넷);
  • 버스 속도 제한;
  • 올바른 크기의 풀업이 있습니다.

풀업 계산

Texas Instruments에는 풀업 계산에 대한 유용한 애플리케이션 노트 (SLVA689)가 있습니다.

  • 풀업의 하한 (최소값)은 버스에서 가장 약한 주변 장치가 끌어낼 수있는 전류와 모든 주변 장치의 0을 나타내는 최대 전압에 의해 결정됩니다. 1V 여전히 0 인 경우에 따라서, 사용자의 VCC는 최대 3V6이며 단지 20mA를 당길 수있는 가장 취약한 장치는 사용자의 저항은 저항을 통해 전압 손실 및 그 장치에 의해 인출 전류에 의해 결정된다 : (3.6 V1 V) / 20 에이=130 Ω .
  • 상한은 최대 상승 시간에 의해 결정됩니다. 최대 I2C 주파수는 해당 주파수와 직접 관련이 있지만 프로토콜에 의해 정의 된 상한도 있습니다. 상한은아르 자형에이엑스=아르 자형/(0.8473기음)아르 자형기음기음아르 자형아르 자형에이엑스=2950 Ω. TI의 애플리케이션 노트에는 적절한 값을 신속하게 찾을 수있는 그래프가 있습니다.
  • 물론 풀업 값은 모든 풀업의 병렬 결합 값과 같습니다. 버스의 마스터 엔드, 슬레이브 엔드 및 기타 슬레이브 / 마스터에 풀업이있을 수 있습니다.
  • "한계"에 가까울수록 케이블의 전압 강하와 같은 "기생"도 고려해야합니다.

올바른 크기의 풀업이 있습니까? 가치와 전력 등급을 결정하는 방법?
Quantum0xE7

Nick B 가 다른 답변에 대해 언급 했듯이 , 버스 익스텐더 칩의 가능성 또는 온도 센서를 2도 정도 가열하는 것에주의하십시오.
Peter Cordes

14

일반적으로 최대 버스 커패시턴스는 400 pF로 제한됩니다.

주파수를 1kHz로 낮추고 센서 옆에 전원 공급 장치 디커플링을 제공하면 제대로 작동합니다.

보다 강력한 기능이 필요한 경우 PCA9615 와 같이 양쪽 끝에 차동 I2C 컨버터를 사용할 수 있습니다 .


최소 I2C 주파수를 가진 일부 센서를 어둡게 기억합니다 (그 이유는 확실하지 않음).
Michael

14

가능하지만 권장하지 않습니다.

다른 목적을위한 다른 버스

SPI와 마찬가지로 I2C는 보드 또는 보드 그룹 (Raspberry Pi 및 해당 모자 또는 arduino 및 해당 차폐 장치) 내 통신을 위해 설계되었습니다. 더 먼 거리에서 작동 할 수 있지만 (다른 답변 참조) 그러한 경우에는 설계, 최적화 및 자격을 갖춘 것이 아니기 때문에 사용해서는 안됩니다.

향후에 더 많은 센서를 추가 할 수 없거나 시스템이 모든 곳에서 작동하지 않거나 특정 상황에서 실패 할 위험이 있습니다.

당신이 찾고있는 것은 1-wire, CAN, RS-485, 이더넷 등과 같은 필드 버스입니다.

블루투스 또는 지그비와 같은 무선 시스템도 옵션이 될 수 있습니다.


9

@filo에 의해 언급 된 바와 같이, I2C는 일반적으로 버스 커패시턴스에 의해 제한된다. 그러나이 문제를 해결할 수있는 방법이 있습니다.

  1. 버스 익스텐더를 사용하십시오. P82B96 또는 PCA9600은 모두 귀하의 경우 좋은 옵션이 될 것입니다.
  2. 더 빠른 속도 또는 매우 긴 케이블이 필요한 경우 PCA9600 과 같은 차동 I2C 송수신기를 사용할 수 있습니다 . 그러나 이것은 회로를 훨씬 더 복잡하게 만들고 케이블의 양쪽 끝에 IC가 필요합니다.

한 번 봐 가지고 AN10658AN11084 자세한 정보는 NXP에서합니다.


1
다른 사람들이 말했듯이 이것은 버스 익스텐더와 함께 작동합니다. 주의해야 할 점은 센서와 버스 익스텐더가 서로 가까이있는 경우 센서 엔드의 버스 익스텐더가 온도 센서 판독 값을 2도 올리는 데 충분한 열을 방출 할 수 있다는 것입니다.
Nick B

4

나는 filo와 Caleb의 답변을 좋아합니다.

다른 옵션은 하나 이상을 사용하는 것입니다 개별 센서에서 DS28E17 1-Wire-to-I2C 마스터 브리지 를 사용하고 버스를 Onewire로 연결하는 것입니다. 이는 100m가 넘는 버스에 적합하며 분산 온도 및 배터리 관리와 같은 처리량이 적은 센서 어레이 애플리케이션에 적합합니다.


마스터에 1-Wire 인터페이스가없는 경우 추가 소프트웨어 오버 헤드가 발생할 수 있지만 재미있는 생각입니다.
Caleb Reister

이 스턴트에 대한 전체 드라이버 스택을 가지고 있기 때문에 Linux 호스트가있는 경우 주로 옵션입니다. Raspberry Pi에서는 GPIO4를 100m 와이어 (물론 GND 포함)를 통해 DS28E17의 1W 입력에 연결하고 config.txt를 편집하면됩니다. 완전히 투명하며 로컬 I²C처럼 보입니다. 천천히.
Janka

감사. 1-Wire가 이런 종류의 거리를 할 수 있다는 사실에 정말 놀랐습니다. 저항기가 더 작기 때문에 의미가 있다고 생각합니다.
domen

Onewire는 상승 에지 타이밍에 의존하지 않고 대신 모든 비트 타이밍이 하강 에지와 관련하여 수행되며 능동적으로 구동됩니다. 이것이 높은 용량 성 부하에 덜 취약한 이유입니다. 몇 nF는 괜찮습니다.
Janka
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.