Saya sedang mempertimbangkan untuk menerapkan sistem otomasi rumah di sekitar Raspberry Pi saya, tetapi saya menemukan harga dan kebutuhan ruang untuk memasukkan Pi di setiap tempat, terlalu banyak kontrol yang diperlukan tetapi kabel Cat5e yang diperlukan untuk desain ini sudah dipasang selama renovasi. Saya memiliki beberapa PCF8574, PCF8591 dan SSR yang tergeletak di sekitar, jadi apakah mungkin untuk mengendarainya menggunakan kabel Cat5e?
Semua kabel Cat5e saya sudah terhubung dengan pin TIA / EIA 568B. Mereka adalah bagian dari pemasangan kabel struktural saya dan tidak dilindungi, sehingga diperlukan tegangan saluran yang lebih tinggi. Saya berpikir mengirim daya dan jalur I2C melalui kabel, dengan pinout ini:
Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +12V
Pin 5 (Pair 3): +12V
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): GND
Pengaturan pin daya sama dengan kabel 100BASE-TX PoE sehingga peringkat daya akan sama juga, dan penggunaan pensinyalan diferensial dua arah ditemukan dalam 1000BASE-T yang membutuhkan Cat5e.
Garis I2C SCL dan SDA asli diturunkan menjadi dua pasangan diferensial dua arah pada level TTL (saluran terbuka tidak disimpan pada kabel, tetapi dipulihkan pada perangkat pemutusan garis / pemindah level yang saya rancang)
Ada saran tentang itu? Juga, chip mana yang harus saya gunakan untuk mengubah jalur I2C ke pensinyalan diferensial? Tolong sarankan chip dengan opsi lubang melalui DIP kepada saya. Saya tidak tahu bagaimana menangani hal-hal SMT.
EDIT
Saya menemukan chip ini, SN65LBC180, apakah itu pilihan yang baik? Bagaimana cara menghubungkannya ke unit dua arah? Bagaimana menggeser level (ini adalah bagian BiCMOS yang membutuhkan level TTL tetapi Pi drive pada level CMOS 3.3v) dan membuatnya open-drain-compatible?
EDIT 2
Komentator menyarankan RS-485 yang tampaknya dapat diterima oleh saya, tetapi masih dua pasangan diferensial harus dua arah dan hanya dua pasangan diferensial dua arah saja. Saya menggunakan kembali kabel Ethernet yang ada.
EDIT 3
Karena seseorang membawanya, saya tidak bisa menggunakan CAN. Tidak ada cara saya bisa memasukkan CAN ke RPi tanpa mengorbankan apa pun (SPI ditempati oleh layar sentuh, jadi tidak ada konverter SPI ke CAN)
Saya menyadari keterbatasan I2C PHY jadi saya pada dasarnya mencoba menyesuaikan 1000BASE-T PHY untuk itu - pensinyalan diferensial dua arah untuk sinyal SCL dan SDA, tetapi di atas itu menjalankan protokol I2C.
EDIT 4
Sebuah chip baru datang kepada saya: NXP P82B96 yang membagi I2C menjadi 4 jalur searah, yang pada gilirannya dapat digunakan untuk memberi makan ke SN65LBC180 melalui isolasi-opto (hanya sisi-Pi) untuk membentuk pensinyalan jarak jauh siap 8-pin. Sekarang saya hanya perlu mencari cara untuk mendapatkan daya melalui kabel, atau bagaimana menentukan apakah bus mengirim dan membuat pasangan bidirectional.
EDIT 5
Dari saran jawaban, saya pikir saya perlu mengubah sedikit kekuatan pinout:
Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +5V
Pin 5 (Pair 3): GND
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): +12V
Tegangan sinyal diferensial I2C adalah TTL. + 5V lebih dari pasangan 3 berasal dari Pi, tidak dibuat-buat tetapi menyatu. Pasangan + 12V over 4 mungkin tidak ada hanya digunakan untuk menggerakkan beberapa perangkat berdaya tinggi. Jika perlu, perangkat dapat menggunakan catu dayanya sendiri dan membiarkan kedua relnya tidak tersambung atau menyuplai tegangan yang lebih tinggi tetapi menggunakan rel 5V.
GAGAL BAHWA
Pinout masih merupakan desain asli saya, yang kompatibel dengan 802.1af.
sumber
Jawaban:
Mencoba melakukan dengan IIC adalah ide yang buruk. IIC benar-benar dimaksudkan untuk komunikasi antar chip pada satu papan. Karena arus maksimum yang diperlukan untuk menarik garis rendah terbatas, saluran tersebut memiliki impedansi yang relatif tinggi (beberapa kΩ). Ini berarti mereka dapat mengambil suara dengan mudah, yang merupakan masalah serius ketika berjalan di kabel unshielded di dinding mungkin tepat di sebelah kabel listrik AC.
Saya akan menggunakan CAN untuk ini. BISA menggunakan pasangan bengkok tunggal yang ditarik bersama-sama dengan hanya 60 Ω pada satu titik, dan sinyal diferensial. Itu berarti sebagian besar noise mode umum yang tak terhindarkan yang akan diambil karena kopling kapasitif dapat dibatalkan oleh penerima. BISA berjalan pada 500 kbits / s dapat mencakup sesuatu ukuran rumah biasa.
Banyak mikrokontroler tersedia saat ini dengan CAN built in. Anda biasanya memerlukan chip tranceiver fisik yang terpisah (seperti MCP2551 yang umum), tetapi beberapa lapisan protokol yang paling rendah diimplementasikan dalam silikon di perangkat CAN. Firmware berinteraksi dengan bus CAN di tingkat pengiriman dan penerimaan paket lengkap. Deteksi tabrakan dan coba lagi, pembuatan checksum, detail pensinyalan paket bus, validasi checksum yang diterima, dan penyesuaian clock drift semuanya ditangani untuk Anda.
Jangan tertipu RS-485. Itu peninggalan dari zaman dulu. Ini juga menggunakan sinyal diferensial tunggal seperti CAN, sehingga juga memiliki kekebalan noise yang baik. Namun, orang biasanya jatuh cinta pada RS-485 karena terlihat "lebih sederhana". Ini hanya karena mereka tidak melihat keseluruhan sistem. Pertama, ini tidak terlalu rumit secara elektrik. Anda masih memerlukan beberapa jenis transciever untuk mengemudi dan menerima sinyal diferensial. Apakah Anda memiliki transceiver RS-485 yang terhubung ke UART mikrokontroler, atau MCP2551 yang terhubung ke perangkat CAN cukup tidak relevan dalam hal kompleksitas biaya dan perangkat keras. Perbedaan besar adalah bahwa RS-485 membuat Anda berada pada level byte mentah (melalui UART). Ini berarti untuk mengimplementasikan sistem yang bermakna dan kuat, Anda harus menemukan protokol Anda sendiri untuk menangani deteksi tabrakan, putuskan bagaimana menangani retries, paketisasi, pembuatan dan pemeriksaan checksum, kontrol aliran, dll. Anda dapat menggunakan arsitektur master tunggal, tetapi mendapatkan detail dengan benar jauh lebih rumit daripada yang orang pikir belum menganalisis semuanya dengan cermat. Dengan CAN Anda hanya mengirim dan menerima paket, dan perangkat kerasnya mengurus detailnya.
sumber
I2C bukan cara untuk pergi. DAPAT biaya transranie masing-masing satu dolar, dan Anda dapat menggunakannya sebagai transkart uart dan menulis protokol Anda sendiri sehingga Anda tidak memerlukan mikro kaleng kompatibel Anda tidak ingin menggunakan tumpukan kaleng penuh.
Saya selalu merasa sedikit tidak nyaman ketika saya melihat konduktor Cat5 berjalan secara paralel untuk arus lebih. Itu mengganggu saya karena jika satu konduktor rusak yang lain akan membawa arus sistem penuh. Peringkat cat5 saat ini sangat konservatif sehingga kemungkinan kebakaran cukup rendah tapi saya tidak suka kemungkinan itu.
Cara aman untuk melakukannya adalah memiliki polyfuse di kedua rel daya dan bergabung dengan pangkalan di suplai, dan hubungkan setiap perangkat ke satu dan hanya satu set daya / arde. Dengan cara itu jika satu kabel gagal, perangkat yang menggunakan saluran itu kehilangan daya, bukannya satu saluran dipaksa untuk membawa kekuatan dua.
Banyak orang suka menempatkan daya dan ground pada kedua pasangan bengkok untuk alasan EMI daripada memiliki satu pasangan daya dan satu pasangan ground. Jika Anda memiliki dua pasangan daya / pembumian, saluran listrik akan lebih dekat ke pentanahan, dan bidang akan dibatalkan, mengurangi gelombang radio yang dikirim atau diterima dari saluran listrik. Tidak perlu, tapi bagus jika ada banyak suara listrik yang bersenandung.
12V menurut saya terlalu rendah untuk distribusi daya ketika 24v masih cukup aman dan jauh lebih efisien.
sumber
Jika otomasi hanyalah menghidupkan dan mematikan rumah, saya akan menyederhanakan ini dengan:
sumber
mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab
EUREKA! Menemukannya! (belum diuji, akan mengujinya akhir pekan ini)
Chip antarmuka adalah NXP P82B96 I2C buffer / splitter dan 2 TI SN65HVD251P CAN bus antarmuka chip. Pada dasarnya, saya menjalankan I2C di CAN PHY.
P82B96 memahami protokol I2C dan menangani arbitrasi bus untuk saya, dan memberi saya pin Tx dan Rx terpisah yang dapat diikat bersama. Saya memberi makan mereka ke SN65HVD251P CAN transceiver dan itu memberi saya pasangan diferensial dua arah untuk mengirim lebih dari kabel.
Power pin datang langsung, tanpa gangguan dari rail 5V Pi saya. (Saya tidak akan menggunakan tegangan dan daya sinyal 12V untuk sementara waktu)
sumber
Terlepas dari manfaat IIC di tingkat chip, implementasi yang Anda usulkan akan sangat sulit. Masalahnya adalah arbitrase bus. Meskipun beberapa unit dapat diparalelkan menggunakan, misalnya, RS485, pertanyaan besarnya adalah:
Bagaimana setiap unit tahu apakah ia dapat mengendalikan bus untuk mengirim data?
Di IIC, dengan saluran sinyal saluran terbuka, transfer dua arah mudah - tetapi dengan bus tristate Anda memerlukan beberapa cara untuk memastikan bahwa hanya satu unit yang mencoba mengemudikan bus pada satu waktu. Ini akan sulit. Anda dapat melakukannya, terutama jika Anda membuat master tunggal dan mengharuskan semua budak memiliki batasan waktu yang kaku untuk mengirim data, dan mereka hanya mengirim data jika diminta oleh master, tetapi ini akan membutuhkan upaya yang cukup besar dari pihak Anda dalam mendesain papan antarmuka untuk master dan slave.
Untuk driver / penerima fisik, RS485 akan membantu Anda, dan ada banyak chip antarmuka yang tersedia. Hanya Google.
sumber
Saya tidak tahu apakah Anda tertarik dengan solusi premade sebagai lawan membangun sirkuit Anda sendiri, tapi saya pikir saya akan menunjukkan bahwa Pololu menjual papan Extender Diferensial Jarak Jauh I²C yang dibuat oleh SJTbits, yang tampaknya melakukan persis persis apa yang kamu cari. (Pengungkapan penuh: Saya bekerja untuk Pololu.)
Bahkan jika Anda tidak ingin menggunakannya secara langsung, mungkin melihat rangkaian yang digunakannya mungkin memberi Anda beberapa ide. Anda bisa melihat skema di lembar data; menggunakan NXP PCA9600D buffer, driver garis diferensial TI AM26LS31CDR, dan penerima saluran diferensial TI AM26LS32ACDR.
sumber
Saya tahu ini agak lama dan solusi tampaknya telah diselesaikan di suatu tempat di antara balasan, tapi saya punya saran untuk ditawarkan. Ada perangkat seperti PCA9614 / 5/6 dari NXP yang saya lihat sekarang sebagai solusi untuk bus I2C jarak jauh yang lebih kuat (PCA9614 2-kanal multipoint Fast-mode Plus diferensial I2C-bus buffer) . Pada dasarnya memang benar bahwa itu menjadi sesuatu selain I2C sejati, tetapi di ujung bus itu tidak terlihat oleh perangkat. Keluarga khusus ini menerjemahkan sinyal menjadi 2 pasangan diferensial dua arah, dan ada juga perangkat serupa yang telah disebutkan dalam komentar, yang menerjemahkan ke 4 pasangan diferensial searah. Menerjemahkan menjadi hanya 2 pasang memungkinkan Anda menggunakan kabel CAT dan masih memiliki 2 pasang untuk daya / pentanahan.
sumber
Jempolan! Saat ini saya sedang berusaha untuk memecahkan masalah yang hampir sama. Saya juga mencoba menggunakan I2C over cat5 untuk otomatisasi rumah dengan pinout khusus saya. Alasannya adalah biaya, saya ingin ini sangat hemat biaya dan komponen I2C masih setidaknya 5 kali lebih murah daripada attiny13 uC (AFAIU uC diperlukan untuk CAN dan RS485).
1) Saat ini saya hanya dalam proses uji coba untuk bagian pertama dari suatu sistem dan sekarang saya berhasil dengan kabel panjang 15m dengan 5V dan koneksi SCL & SDA langsung! Saya menggunakan PCF8574 dan 2 relay untuk memicu lampu kamar saya. Pinout adalah
2) Saya mengerti bahwa itu tidak akan memberikan beberapa relay lagi atau tambahan 10 meter ... Penurunan tegangan sangat signifikan (dari 5,5 ke 4,7). Jadi untuk masalah drop tegangan saya akan menempatkan 12V pada saluran dan menambahkan regulator tegangan 5V di papan untuk menjaga tegangan baik di mana-mana terlepas dari seluruh penurunan garis. Saya akan menempatkan catu daya tambahan selama saluran masa depan.
3) Sinyal itu sendiri dapat ditingkatkan menggunakan P82B96 atau P82B715 murah tanpa membelah garis diferensial. NXP sendiri menggunakan Cat5 dalam beberapa presentasi tetapi saya tidak dapat menemukan pinout mereka. Bagian penting di sini adalah bahwa mereka jelas menggunakan jalur sinyal dalam pasangan yang berbeda ... misalnya satu pasangan adalah GND + SDA yang lain adalah VCC + SCL.
4) Poin menarik lainnya - buffer ini dapat dengan mudah menaikkan amplitudo hingga 12V untuk meningkatkan resistansi noise. Jadi, saya mungkin akan mencoba untuk menempatkan 12V pada garis sinyal juga dan itu akan memungkinkan untuk menempatkan pullup secara benar dari kawat 12V ... Tapi itu akan memaksa saya meletakkan sesuatu seperti P82B96 pada setiap perangkat.
Seperti yang Anda perhatikan, saya juga menggunakan jalur interupsi terpisah ... Master saat ini berada di papan Arduino yang terhubung ke PC. Perangkat lunak master utama akan menggunakan PC 24x7, jadi Arduino hanya menerjemahkan sinyal dan menangani interupsi. Saya dapat mengirim konfigurasi khusus untuk penanganan interupsi onboard, misalnya untuk menangani sakelar sakelar yang nyaman melalui interupsi ... Itu memungkinkan saya lupa tentang keterlambatan saat mengaktifkan lampu secara manual. Penanganan interupsi adalah keuntungan tambahan dari i2c.
Jadi ide saya adalah bahwa I2C cukup sederhana untuk diterapkan di <= 100m pemasangan kabel apartemen kota. Alih-alih pergi ke sinyal diferensial saya berharap saya akan dapat mengurangi frekuensi tambahan sebagai gantinya.
Saya suka ide Anda untuk meletakkan 5V dan 12V karena ini mengurangi kebutuhan regulator dan mengurangi biaya ... seluruh ide multi-wire bus untuk mengurangi biaya titik akhir, saya juga akan mempertimbangkan ini untuk pinout baru :)
sumber