Tôi có thể sử dụng cáp I2C trên 2m không?


24

Trong dự án hiện tại của tôi, tôi cần giao tiếp giữa một vi điều khiển và một số cảm biến qua I2C. Một trong số đó là cảm biến nhiệt độ, nó cần được đặt ở khoảng cách gần 2 mét so với vi điều khiển. Tôi không thể chọn giao thức khác (cảm biến nằm trên một mô-đun có đầu nối / chân / giao thức đã cho).

Bạn có nghĩ rằng có thể giao tiếp trong cấu hình này? Tôi nên tìm thông tin gì để đảm bảo có thể hoặc không thể thực hiện được? Bạn có lời khuyên nào không?

Đây là lần đầu tiên tôi giao tiếp với IC ngoài PCB.


5
Vui lòng thêm thông tin. Tốc độ i2c sẽ là gì? Điện trở kéo lên? Sử dụng cáp và điện dung của nó? MCU chủ là gì và cảm biến là gì? Nhưng nói chung, I2C hoạt động cách các cáp như HDMI vài mét, do đó, nó sẽ hoạt động khi mọi thứ được thực hiện đúng.
Justme


6
"Tôi không thể chọn giao thức khác" Bạn có thể đặt một vi điều khiển thứ hai gần với cảm biến, đọc dữ liệu và gửi chúng với bất kỳ giao thức nào bạn muốn.
FooBar

1
Bạn có tốc độ tối thiểu tính bằng kbit / s không?
Cột

2
Nếu bạn làm chậm đồng hồ xuống, bạn có thể đi một quãng đường khá dài.
đồng.

Câu trả lời:


36

I2C không được thiết kế để sử dụng trong khoảng cách xa nhưng tôi biết một số ứng dụng thực sự được sử dụng trong khoảng cách khoảng 2 mét. Tôi cũng biết một trường hợp họ gặp vấn đề với điều đó và nó đã được khắc phục một cách ngẫu nhiên bằng cách sửa các vòng lặp trên mặt đất mà tôi tin.

Để chắc chắn rằng nó sẽ hoạt động, bạn nên sử dụng bộ mở rộng bus I2C như P82B715.

Tuy nhiên, biểu dữ liệu của PB2B715 cho biết như sau trong phần 8.2:

Đối với cáp xoắn đôi hoặc cáp phẳng thông thường, như được sử dụng cho hệ thống dây điện thoại hoặc Ethernet (Cat5e), điện dung đó vào khoảng 50 pF đến 70 pF / mét , theo lý thuyết, cáp có thể dài đến 50 m . Từ kinh nghiệm thực tế, 30 m đã chứng minh chiều dài cáp an toàn được điều khiển theo cách đơn giản này, lên tới 100 kHz, với các giá trị được hiển thị. Khoảng cách dài hơn và tốc độ cao hơn là có thể nhưng đòi hỏi thiết kế cẩn thận hơn.

Vì vậy, các chuyên gia (NXP là cựu Philips, nhà phát minh của I2C) nói rằng 30 mét đã được chứng minh là một khoảng cách có thể làm được. Kinh nghiệm của tôi nói rằng 2 mét là một khoảng cách có thể thực hiện được và những kinh nghiệm được báo cáo lại cho tôi chỉ ra rằng xe buýt I2C tải nặng hơn mà không có bất kỳ bộ mở rộng nào cũng có thể.

Các điểm chính để làm việc xe buýt I2C trên quãng đường dài là:

  • Sử dụng cáp điện dung thấp (cáp xoắn / Ethernet);
  • Hạn chế tốc độ xe buýt;
  • Có pull-up có kích thước chính xác.

Tính toán pullup

Texas Cụ có một lưu ý ứng dụng tốt (SLVA689) về tính toán kéo lên .

  • Giới hạn dưới của pullup (giá trị tối thiểu) được xác định bởi dòng ngoại vi yếu nhất trên bus có thể kéo và điện áp tối đa đại diện cho 0 cho bất kỳ thiết bị ngoại vi nào. Vì vậy, nếu 1V vẫn là 0, thì VCC của bạn tối đa là 3V6 và thiết bị yếu nhất của bạn chỉ có thể kéo 20mA, điện trở của bạn được xác định bởi tổn thất điện áp trên điện trở và dòng điện được kéo bởi thiết bị đó: (3.6 V1 V) / 20 mA=130 Ω .
  • Rmax=tr/(0.8473Cb)trCbCbtrRmax=2950 Ω. Ghi chú ứng dụng của TI có biểu đồ để bạn có thể tìm thấy các giá trị phù hợp một cách nhanh chóng.
  • Tất nhiên giá trị cho pullup là giá trị tương đương của tất cả các pullups song song. Bạn có thể có một pullup ở đầu chủ, đầu nô lệ và bất kỳ nô lệ / chủ nào khác trên xe buýt.
  • Bạn càng "ở giới hạn", bạn cũng cần phải tính đến "ký sinh trùng", chẳng hạn như sụt áp trong cáp.

Có pull-up có kích thước chính xác? Làm thế nào để xác định giá trị và đánh giá sức mạnh?
Quantum0xE7

Như Nick B đã nhận xét về một câu trả lời khác, hãy cảnh giác với khả năng của chip mở rộng xe buýt hoặc bất cứ điều gì khác làm nóng cảm biến nhiệt độ ở một vài độ.
Peter Cordes

14

Bạn thường bị giới hạn bởi điện dung bus tối đa 400 pF.

Nó sẽ hoạt động tốt nếu bạn giảm tần số của mình xuống mức 1 kHz và cung cấp khả năng tách nguồn cung cấp bên cạnh cảm biến.

Nếu bạn cần thứ gì đó mạnh mẽ hơn thì bạn có thể sử dụng bộ chuyển đổi I2C vi sai ở cả hai đầu như PCA9615 .


Tôi lờ mờ nhớ lại một số cảm biến có tần số I2C tối thiểu (không chắc tại sao).
Michael

14

Bạn có thể, nhưng nó không được khuyến khích.

Xe buýt khác nhau cho các mục đích khác nhau

I2C, giống như SPI, được thiết kế để liên lạc trong một bảng hoặc nhóm bảng (nghĩ Raspberry Pi và mũ hoặc arduino và khiên của nó). Nó có thể hoạt động trên khoảng cách xa hơn (xem các câu trả lời khác) nhưng không nên được sử dụng trong những trường hợp đó, đơn giản vì đó không phải là những gì nó được thiết kế, tối ưu hóa và đủ điều kiện.

Rủi ro bạn gặp phải là bạn không thể thêm nhiều cảm biến trong tương lai hoặc hệ thống của bạn sẽ không hoạt động ở mọi nơi hoặc sẽ thất bại trong một số trường hợp nhất định.

Những gì bạn nên tìm kiếm là một chiếc xe buýt hiện trường, một cái gì đó như 1 dây, CAN, RS-485, ethernet, v.v.

Các hệ thống không dây như bluetooth hoặc zigbee cũng có thể là một lựa chọn.


9

Theo ghi nhận của @filo, I2C thường bị giới hạn bởi điện dung của bus. Tuy nhiên, có nhiều cách để khắc phục điều này:

  1. Sử dụng một bộ mở rộng xe buýt. Các P82B96 hoặc PCA9600 cả sẽ là lựa chọn tốt trong trường hợp của bạn.
  2. Nếu bạn cần tốc độ cao hơn hoặc cáp cực dài, bạn có thể sử dụng bộ thu phát vi sai I2C như PCA9600 . Tuy nhiên, điều này sẽ làm cho mạch của bạn phức tạp hơn đáng kể và bạn cần một IC ở cả hai đầu cáp.

Hãy xem AN10658AN11084 từ NXP để biết thêm thông tin.


1
Điều này sẽ hoạt động tốt với một bộ mở rộng xe buýt, như một số người khác đã nói. Một điều không rõ ràng ngay lập tức cần chú ý là bộ mở rộng xe buýt ở đầu cảm biến có thể tản nhiệt đủ để tăng cảm biến nhiệt độ đọc lên một vài độ nếu cảm biến và bộ mở rộng xe buýt gần nhau.
Nick B

4

Tôi thích câu trả lời của filo và Caleb.

Một tùy chọn khác là sử dụng một hoặc nhiều Cầu nối chính DS28E17 1-dây-tới-I2C tại các cảm biến riêng lẻ và nối dây xe buýt như Onewire. Điều này tốt cho> 100m xe buýt và rất phù hợp với các ứng dụng mảng cảm biến thông lượng thấp như quản lý nhiệt độ và pin phân tán.


Suy nghĩ thú vị, mặc dù nó có thể giới thiệu phần mềm bổ sung nếu chủ không có giao diện 1-Dây.
Caleb Reister

Nó chủ yếu là một tùy chọn nếu bạn có máy chủ Linux, vì nó có ngăn xếp trình điều khiển đầy đủ cho diễn viên đóng thế này. Trên Raspberry Pi, bạn chỉ cần kết nối GPIO4 với đầu vào 1W của DS28E17 thông qua 100m dây đó (tất nhiên là cộng với GND), chỉnh sửa config.txt và bạn đã hoàn thành. Nó hoàn toàn trong suốt, trông giống như một I²C địa phương. Chỉ cần chậm hơn.
Janka

Cảm ơn. Tôi thực sự ngạc nhiên khi 1-Dây có thể thực hiện khoảng cách đó. Tôi đoán nó có ý nghĩa, vì điện trở nhỏ hơn.
Domen

Onewire không dựa vào thời gian cạnh tăng mà thay vào đó, tất cả thời gian bit được thực hiện liên quan đến cạnh giảm, được điều khiển tích cực. Đó là lý do tại sao nó ít bị ảnh hưởng bởi tải điện dung cao. Một vài nF là ok.
Janka
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.