Dalam proyek saya saat ini, saya perlu berkomunikasi antara mikrokontroler dan beberapa sensor melalui I2C. Salah satunya adalah sensor suhu, harus ditempatkan pada jarak 2 meter dari mikrokontroler. Saya tidak bisa memilih protokol lain (sensornya ada pada modul dengan konektor / pin / protokol yang diberikan).
Apakah menurut Anda dimungkinkan untuk berkomunikasi dalam konfigurasi ini? Informasi apa yang harus saya cari untuk memastikan itu bisa atau tidak mungkin? Apakah Anda punya saran?
Ini adalah pertama kalinya saya berkomunikasi dengan IC di luar PCB.
i2c
communication
cables
JackOfHearts
sumber
sumber
Jawaban:
I2C tidak dirancang untuk digunakan jarak jauh tapi saya tahu beberapa aplikasi di mana sebenarnya digunakan jarak sekitar 2 meter. Saya juga tahu satu kasus di mana mereka memiliki masalah dengan itu dan itu akhirnya diperbaiki dengan memperbaiki loop tanah saya percaya.
Untuk memastikan bahwa itu akan berfungsi, Anda harus menggunakan extender bus I2C seperti P82B715.
Namun, lembar data PB2B715 mengatakan yang berikut di bagian 8.2:
Jadi para ahli (NXP adalah mantan Philips, penemu I2C) mengatakan bahwa 30 meter telah terbukti jarak yang bisa dilakukan. Pengalaman saya mengatakan 2 meter adalah jarak yang bisa dilakukan, dan pengalaman yang dilaporkan kembali kepada saya menunjukkan bahwa bus I2C yang lebih berat tanpa ekstender juga dimungkinkan.
Poin-poin penting untuk mengoperasikan bus I2C pada jarak jauh adalah:
Perhitungan pullup
Texas Instruments memiliki catatan aplikasi yang baik (SLVA689) tentang perhitungan pull-up .
sumber
Anda umumnya dibatasi oleh kapasitansi bus maksimum 400 pF.
Ini seharusnya bekerja dengan baik jika Anda menurunkan frekuensi Anda menjadi sekitar 1 kHz dan memberikan decoupling catu daya di sebelah sensor.
Jika Anda membutuhkan sesuatu yang lebih kuat maka Anda dapat menggunakan pengonversi I2C diferensial pada kedua ujungnya seperti PCA9615 .
sumber
Anda bisa, tetapi tidak disarankan.
Bus berbeda untuk tujuan berbeda
I2C, seperti SPI, dirancang untuk komunikasi di dalam dewan atau kelompok dewan (pikirkan Raspberry Pi dan topinya atau arduino dan perisainya). Ini dapat bekerja pada jarak yang lebih jauh (lihat jawaban lain) tetapi tidak boleh digunakan dalam kasus-kasus itu, hanya karena bukan itu yang dirancang, dioptimalkan dan memenuhi syarat untuk.
Risiko yang Anda ambil adalah bahwa Anda mungkin tidak dapat menambahkan lebih banyak sensor di masa depan, atau bahwa sistem Anda tidak akan berfungsi di mana-mana, atau akan gagal dalam keadaan tertentu.
Apa yang seharusnya Anda cari adalah bus lapangan, sesuatu seperti 1-kawat, CAN, RS-485, ethernet, dll.
Sistem nirkabel seperti bluetooth atau zigbee juga bisa menjadi pilihan.
sumber
Seperti dicatat oleh @filo, I2C umumnya dibatasi oleh kapasitansi bus. Namun, ada cara untuk mengatasi ini:
Lihatlah AN10658 dan AN11084 dari NXP untuk informasi lebih lanjut.
sumber
Saya suka jawaban filo dan Caleb.
Opsi lain menggunakan satu atau beberapa DS28E17 1-Wire-to-I2C Master Bridges di masing-masing sensor dan memasang bus sebagai Onewire. Ini bagus untuk bus> 100m dan cocok untuk aplikasi larik sensor throughput rendah karena suhu terdistribusi dan manajemen baterai.
sumber