Saya ingin mulai menerapkan sistem yang terdiri dari N mikrokontroler (N> = 2 MCU), tetapi saya ingin tahu kemungkinan untuk membiarkan mereka berkomunikasi satu sama lain.
Idealnya, mikrokontroler (N-1) ditempatkan di dalam rumah bertindak sebagai klien, sedangkan yang terakhir ("server") terhubung ke PC melalui USB. Masalah yang saya miliki saat ini adalah bagaimana menghubungkan mikrokontroler (N-1) ini ke "server". Klien MCU melakukan tugas yang sangat sederhana, sehingga mungkin bukan solusi yang baik untuk menggunakan ARM untuk melakukan pekerjaan sederhana seperti itu hanya karena mereka menyediakan CAN / PHY-MAC .
Komunikasi tidak akan terjadi lebih dari sekali setiap beberapa menit untuk sebagian besar perangkat dan atas permintaan orang lain. Kecepatannya tidak terlalu kritis (pesan pendek): 1 Mbit / s Saya pikir WAY berlebihan untuk tujuan saya.
MCU yang saya rencanakan untuk digunakan adalah sebagai berikut.
- Atmel AVR Tiny / Mega
- TI MSP430
- ARM Cortex M3 / M4
- (Kemungkinan Atmel AVR UC3 - 32-bit)
Saya ingin menghindari PIC jika memungkinkan (pilihan pribadi), hanya karena ada lebih sedikit kemungkinan untuk memprogram mereka (semua di atas memiliki lebih atau kurang alat open source serta beberapa alat resmi).
Saya tahu beberapa ARM menyediakan fungsionalitas CAN dan tidak begitu yakin tentang yang lain.
Saat ini saya menemukan kemungkinan-kemungkinan ini:
- GPIO sederhana untuk mengirim data (misalnya> 16 bit pada TINGGI untuk menunjukkan awal pesan,> 16 bit pada RENDAH untuk menunjukkan akhir pesan). Namun harus pada frekuensi standar << (frequency_client, frequency_server) untuk dapat mendeteksi semua bit. Hanya perlu satu kabel per MCU klien.
- RS-232 : Saya pikir ini adalah protokol komunikasi yang paling umum digunakan, tetapi saya tidak tahu seberapa baik skala itu. Saya sedang mempertimbangkan hingga 64 klien MCU sekarang (mungkin lebih nanti)
- USB: AFAIK ini sebagian besar seperti RS-232, tapi saya tidak berpikir itu berskala sangat baik dalam hal ini (meskipun USB mendukung banyak perangkat - 255 jika saya ingat dengan benar - mungkin terlalu rumit untuk aplikasi ini)
- RJ45 / Ethernet: ini adalah apa yang saya benar-benar ingin gunakan, karena memungkinkan transmisi jarak jauh tanpa masalah (setidaknya dengan terlindung> kabel Cat 6 ). Masalahnya adalah biaya (PHY, MAC, transformator, ...). Saya tidak tahu apakah Anda benar-benar dapat menyoldernya dengan baik di rumah. Dengan cara ini saya tidak perlu MCU klien
- Nirkabel / ZigBee : modul sangat mahal, meskipun mungkin cara untuk menghindari "spageti" di belakang meja
- Modul / transceiver RF: Saya berbicara tentang mereka yang menggunakan pita 300 MHz - 1 GHz, jadi mereka harus menyolder di rumah. Modul-modulnya semuanya built-in, tetapi harganya cukup mahal seperti ZigBee (setidaknya modul RF di Mouser, di Sparkfun sepertinya ada yang lebih murah).
- BISA? Tampaknya sangat kuat. Meskipun saya tidak berencana untuk menggunakannya dalam aplikasi otomotif, itu mungkin masih merupakan alternatif yang baik.
- I²C / SPI / UART ? Sekali lagi - lebih baik hindari "spageti" dengan kabel jika memungkinkan
- PLC sebenarnya bukan pilihan. Performa menurun cukup cepat seiring bertambahnya panjang dan tergantung pada beban kapasitansi jaringan listrik. Saya pikir harga-bijaksana hampir sama dengan Ethernet.
Lebih jauh lagi, protokol mana yang akan "lebih baik" dalam hal transmisi simultan (mari kita asumsikan kasus langka bahwa pada saat yang sama dua perangkat mulai mentransmisikan: protokol mana yang memberikan "sistem manajemen konflik" / "sistem manajemen tabrakan" yang terbaik?
Singkatnya : Saya ingin mendengar apa yang mungkin menjadi solusi terbaik untuk sistem klien terdistribusi yang melakukan komunikasi data sangat ringan, mempertimbangkan fleksibilitas (jumlah perangkat maksimum, sistem manajemen konflik / benturan, ...), harga , mudah dibuat di rumah (solder), ... Saya ingin menghindari menghabiskan $ 20 hanya pada modul komunikasi, tetapi pada saat yang sama memiliki 30 kabel di belakang meja akan payah.
Solusi yang saya gambarkan sekarang adalah melakukan komunikasi dasar antara MCU dekat dengan GPIO atau RS-232 ( murah !) Dan menggunakan Ethernet / ZigBee / Wi-Fi pada satu MCU per "zona" untuk berkomunikasi dengan server ( mahal , tetapi masih jauh lebih murah dari satu modul Ethernet per MCU setiap klien).
Alih-alih kabel itu mungkin dimungkinkan untuk menggunakan serat optik / serat optik. Meskipun konversi tambahan diperlukan, dan saya tidak yakin apakah itu akan menjadi solusi terbaik dalam kasus ini. Saya ingin mendengar detail tambahan tentang mereka.