Tín hiệu I2C và cấp nguồn trên phạm vi dài (cáp 10 mét)


9

Sau một số lần đọc / kiểm tra, tôi đã quản lý để thực hiện liên lạc ổn định giữa 2 thiết bị sử dụng I2C với cáp xoắn đôi FTP CAT5.

  • Dây xanh - SCL
  • Dây trắng / xanh - GND
  • Dây màu xanh - SDA
  • Dây trắng / xanh - GND

GND chỉ được kết nối ở một đầu cáp, đồng hồ bus I2C ở mức 10Khz và tôi đã sử dụng điện trở pullup 10Kom cho VCC

Nó hoạt động tốt và ổn định. Khi tôi quyết định sử dụng 2 cặp cáp khác để cấp nguồn (+ 12V), nó đã ngừng hoạt động. Tôi đã thử nghiệm + 12V trên một cặp GND trên cặp kia, cũng + 12 V / GND trên cùng một cặp: kết quả tương tự, nó đã ngừng hoạt động. Toàn bộ bus I2C ngừng hoạt động, các thiết bị khác cũng được gắn vào nó.

Tự hỏi nếu tôi có thể sử dụng cùng một loại cáp hoặc đi đến sự lựa chọn an toàn nhất - một loại cáp khác để cấp nguồn.


3
Bạn đã kiểm tra rằng nguồn điện ở phía bên nhận có đủ tốt không? Không trục trặc, không rủ xuống ... Cáp CAT5 khá mỏng, đó là lý do PoE sử dụng> 40 V cho nguồn điện.
Vladimir Cravero

4
Đây là nơi bạn cần một máy hiện sóng. Mọi thứ khác sẽ được (giáo dục) phỏng đoán.
ống

1
Tôi sẽ không xoắn SDA hoặc SCL với GND vì bạn không muốn bất kỳ điện dung nào giữa chúng. Tôi sẽ xoắn + 12V với GND khi bạn muốn điện dung giữa chúng. + 12V hiện tại có gì? (bạn có thể bị trả lại mặt đất)
Huisman

5
GND chỉ được kết nối ở một đầu cáp? Trừ khi tôi hiểu lầm, điều đó không đúng.
mkeith

1
Ý bạn là cáp UTP ? Tôi chắc chắn rằng nó có thể được sử dụng cho nhiều giao thức hơn là FTP;)
Andrew Morton

Câu trả lời:


15

Có thể quá mức nếu nó hoạt động trước đó, nhưng một tùy chọn là sử dụng bộ chuyển đổi I2C sang vi sai như PCA9615 , LTC4331 , v.v. Nếu làm cho các điện trở nhỏ hơn không hoạt động hoặc bạn cần mở rộng cáp, hãy cân nhắc không sử dụng I2C trực tiếp.

Không chỉ phạm vi sẽ được mở rộng mà bạn cũng sẽ có khả năng chống ồn tốt hơn.

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


1
Câu trả lời tuyệt vời, đây chính xác là những gì nên làm, nhưng tất nhiên nó có thể là một thay đổi căn bản cho OP.
Jack Creasey

Ý tôi là, chúng rất dễ thực hiện (nếu so với việc chuyển sang RS-485, CAN, v.v.), nhưng có so với việc thay đổi một số điện trở thì đó là một sự thay đổi căn bản.
Wesley Lee

1
Vấn đề của @JackCreasey OP không chỉ là điện dung của cáp, họ dường như bị nhiễu trên đường dây 12V mà họ đã thêm. Việc hạ thấp điện trở kéo lên cung cấp thêm một số khả năng chống ồn, nhưng chúng không thể tiếp tục hạ thấp điện trở đó vô thời hạn.
Dmitry Grigoryev

@DmitryGrigoryev Vì OP không có thông tin chi tiết nên tôi không chắc làm thế nào bạn có thể đề xuất rằng tiếng ồn đã được đưa vào. Tôi đồng ý rằng bạn không thể tiếp tục hạ thấp chấm dứt / pullup. Nhưng OP quá lớn 10: 1.
Jack Creasey

9

Như tôi đã lưu ý trong một nhận xét, thật khó để gỡ lỗi nếu không có dấu vết dao động, nhưng điều đầu tiên nổi bật trong câu hỏi của bạn là điện trở kéo lên 10 kOhm. Điều này là cao bất thường đối với I2C, mặc dù nó có thể dễ dàng hoạt động trong nhiều trường hợp.

Tôi sẽ cố gắng hạ chúng xuống 1 kOhm trước, để xem nó có ảnh hưởng gì không. Nếu nó giúp, bạn có thể dần dần làm cho chúng cao hơn, mặc dù làm như vậy sẽ ảnh hưởng đến thời gian tăng của bạn.


10 k không phải là lớn cho một bus I2C trên 10 kHz, mặc dù vậy? (Hay nó phải là OP 100 kHz?)Ω
Huisman

@Huisman Hai điểm tốt. 10 kOhm sẽ không làm tôi lo lắng ở 10 kHz trên PCB thông thường nhưng có lẽ nó không đủ qua cáp. Và 10 kHz là bất thường nhưng tôi không điên bất thường.
ống

7
10k Ohm là rất lớn cho I2C trên mọi khoảng cách. Đó là vấn đề chính mà OP có.
Jack Creasey

1
Tôi đoán tốt hơn là chia các điện trở và sử dụng một trên mỗi đầu. 2 điện trở pullup @ 4.7kΩ, một ở mỗi đầu, nên là lựa chọn tốt hơn so với một điện trở pullup 2.2kΩ duy nhất.
12431234123412341234123

Tôi sẽ cố gắng hạ thấp các điện trở, đó là tất cả những gì có ý nghĩa đối với tôi sau tất cả những bình luận đó.
dùng3503519

5

Bạn hoàn toàn cần phải thả điện trở pullup của mình ở khoảng cách xa, và 10m là một chặng đường dài và 10k Ohm là rất cao.

Giá trị của điện trở pullup có liên quan đến ba điều:

  1. Cáp điện dung
  2. Nhằm mục đích điện áp và cảm giác cấp Rx.
  3. Tốc độ

Hãy thử sử dụng bất kỳ máy tính có sẵn nào và bắt đầu đọc ở đây với phần chú thích TI về các giá trị pullup hoặc ở đây với tiêu chuẩn NXP I2C (7.1).

Đối với vấn đề bạn đang gặp phải, rõ ràng là việc nối đất các cặp bổ sung (12V, Gnd) trong cáp sẽ thay đổi điện dung thành dây tín hiệu I2C.


2
Tôi đồng ý, cáp CAT5 có thể được giả định là có khoảng 50pF mỗi mét để 10 mét vượt quá giới hạn điện dung 400pF của thông số I2C. Và không thể đạt được đồng hồ I2C 400kHz với điện dung 400pF bằng cách sử dụng dòng kéo lên 3mA được chỉ định từ các điện trở. May mắn thay, làm chậm tốc độ sẽ giúp - trừ khi các thiết bị có giới hạn tốc độ xung nhịp tối thiểu. Chúng tôi không biết đây là những thiết bị gì và điện áp bus I2C là gì nhưng thực sự các bộ điều chỉnh nên được điều chỉnh để cung cấp ít nhất 3mA và nếu các thiết bị cho phép và đồng ý về điện áp mức thấp của xe buýt thì còn hơn thế nữa.
Justme

Có tôi sẽ kiểm tra với điều đó, nhưng câu hỏi của tôi là tại sao nó hoạt động nếu không có nguồn điện trên cáp đó?
dùng3503519

Một cặp cáp nổi không có cùng điện dung với cặp tín hiệu của bạn mà nó có khi cáp được nối đất. Đối với cấu hình của bạn, cả +12 và Gnd về cơ bản là giống nhau. Họ có điện dung cho cáp tín hiệu tác động đến thời gian tồn tại của bạn. .
Jack Creasey

2

Một vài lưu ý:

Lấy đúng giá trị kéo lên là rất quan trọng, đặc biệt đối với SDA. Các thiết bị khác nhau có thể chìm số lượng hiện tại khác nhau. Tôi đã thấy các thiết lập tạo thêm 1s trong dữ liệu do điện trở kéo lên quá nhỏ, sau khi chuyển sang chip cảm biến nhỏ hơn. Các hình học nhỏ hơn có nghĩa là nó không thể kéo xe buýt xuống một số không.

Tốc độ giết chết. Chạy cáp dài thực sự là một bộ lọc LRC thông thấp. Đối với nhiều ứng dụng I2C, bạn có thể làm chậm đồng hồ mà không mất bất cứ thứ gì. Đồng hồ chậm hơn có thể bù cho lực kéo yếu và điện dung lớn (nhưng không phải là lực kéo quá mạnh).

Chạy cáp dài là một lời mời đến EMI. Tôi đã thấy một triển khai I2C cần một kẹp ferrite để vượt qua thử nghiệm miễn dịch. Chấm dứt kết thúc, cáp được bảo vệ hoặc bộ lọc có thể giúp đỡ.

Coi chừng kháng song song. Nếu bạn có 1k pull-up tại master, và sau đó là 1k cho mỗi bốn thiết bị khách trên xe buýt, thì bạn có một mạng lưới kéo lên 200 Ohm. Không đi làm.


0

Bảng đột phá Sparkfun I2C là một giải pháp hay có tính năng:

PCA9615 buffer
I2C Supply voltage range 2.3-5.5V
Differential Supply voltage range 3-5.5V
draws 16µA of current
Extends I2C bus up to 100 feet
Data rate up to 400kHz
2x Qwiic Connectors

nhập mô tả hình ảnh ở đây


-1

Đầu tiên: Tôi muốn cảm ơn cộng đồng vì đã đăng câu trả lời.
Thứ hai: Tôi đã tìm thấy một giải pháp dựa trên những câu trả lời đó, đây là những gì tôi đã làm:

Đã thử nghiệm hạ điện trở pullup xuống 4,7K và 2K. Thỉnh thoảng vào 2K, tôi bắt đầu nhận được các repons, vì vậy tôi hạ xuống 1K, sau đó tôi bắt đầu nhận được phản hồi, nhưng một phần dữ liệu bị thiếu trong mỗi một trong số chúng. Sau đó, chuyển đổi điện trở pullup trên chân SDA với 10K và mọi thứ bắt đầu hoạt động ổn định.
Vì vậy, giải pháp trong trường hợp của tôi là pullup 1K trên SCL và 10K trên SDA.

Cảm ơn bạn đã dành thời gian.


1
Điều đó thật điên rồ. Bạn sử dụng loại phần cứng nào ở đây? Có lẽ một cái gì đó được cấu hình sai.
ống

1
Một mặt là ESP32 với micropython, mặt khác là atmega8 được lập trình với arduino IDE. Cuối cùng tôi không coi đó là giao tiếp an toàn, vì vậy sẽ chuyển sang nối tiếp (RS232), vì tôi đã thử nghiệm nó hoạt động tốt trên các phạm vi đó
user3503519

1
Nếu tôi là bạn, tôi cũng sẽ xem RS-485 sẽ mạnh mẽ hơn và thậm chí đơn giản hơn. Hạn chế là nó đòi hỏi nhiều dây tín hiệu hơn nhưng bạn đã có rất nhiều dây trong CAT5.
ống

1
Chà, tôi không thấy cách triển khai trực tiếp RS-485 trên bộ xử lý atmega hoặc ESP 32 mà không cần bộ chuyển đổi và phần cứng bổ sung để RS-232 là lựa chọn tốt nhất ở đây. Chỉ có một shifter cấp độ TTL sẽ được sử dụng.
dùng3503519
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.