Anda ingin menggunakan USB untuk komunikasi dengan komputer. Jika Anda memiliki sejumlah mikrokontroler, Anda mungkin hanya akan menghubungkan salah satu mikrokontroler secara langsung ke komputer. Mikrokontroler lain perlu mendapatkan perintah dari mikrokontroler utama.
Komunikasi yang Anda pilih akan tergantung pada sejumlah faktor:
- bandwidth yang diperlukan (kami akan menganggap Anda menjalankannya pada 16MHz)
- kompleksitas (pengkabelan dan pengkodean)
- dua arah, atau master-slave
Hampir semua opsi memiliki dukungan bawaan pada mikrokontroler AVR. Tidak ada opsi yang lebih Anda sukai daripada opsi bawaan yang membutuhkan perangkat keras tambahan. Karena mereka memiliki dukungan bawaan, kompleksitas perangkat lunaknya hampir sama, yaitu Anda hanya mengkonfigurasi port (menggunakan register), memasukkan data untuk dikirim dalam register lain, kemudian memicu transmisi dengan mengatur sedikit pada register lain. Setiap data yang diterima ditemukan di register lain, dan interupsi dipicu sehingga Anda dapat menanganinya. Opsi mana pun yang Anda pilih, satu-satunya perbedaan adalah perubahan lokasi register, dan beberapa perubahan pada register konfigurasi.
Loop USART memiliki fitur berikut:
- Laju baud maksimum CLK / 16 = 1MHz (pada clock 16MHz) yang merupakan laju transfer sekitar 90KB / s
- komunikasi dua arah sepenuhnya (tidak ada penunjukan master atau slave)
- membutuhkan kabel terpisah antara masing-masing pasangan mikrokontroler - Atmega32u4 mendukung dua port USART secara asli, membatasi jumlah mikrokontroler yang dapat Anda sambungkan dalam jaringan dalam praktiknya (atau Anda berakhir dengan rangkaian panjang mikrokontroler - mis. terhubung dalam daftar tertaut cara)
Catatan: ini juga yang akan Anda gunakan untuk mendapatkan komunikasi RS232, kecuali bahwa karena RS232 membutuhkan 10V, itu memerlukan driver untuk mendapatkan level tegangan tersebut. Untuk komunikasi antara mikrokontroler, ini tidak berguna (hanya level tegangan yang diubah).
RS485:
- Pada dasarnya, Anda menggunakan port USART dalam mode yang berbeda - tidak ada keuntungan dalam bandwidth, dan mungkin hanya menyederhanakan kabel sedikit, tetapi juga mempersulitnya. Ini tidak disarankan.
Antarmuka dua kawat:
Ini juga disebut sebagai I2C. Ini berarti bahwa semua perangkat berbagi dua kabel yang sama.
Anda membutuhkan resistor pull-up di kedua kabel
Ini lambat (karena resistor pull-up terbatas nilainya, dan ada peningkatan kapasitansi ketika jumlah perangkat meningkat, dan panjang kawat meningkat). Untuk mikrokontroler AVR ini, kecepatannya hingga 400 kHz - lebih lambat dari USART (tetapi kecepatan ini tergantung pada membatasi kapasitansi Anda). Alasannya adalah bahwa meskipun perangkat mendorong kabel data rendah, transisi sebaliknya dilakukan dengan membiarkan kabel melayang tinggi lagi (resistor pull-up).
Bahkan lebih lambat ketika Anda menganggap bahwa SEMUA komunikasi berbagi bandwidth terbatas yang sama. Karena semua komunikasi berbagi bandwidth terbatas yang sama, mungkin ada keterlambatan dalam komunikasi di mana data harus menunggu sampai jaringan menganggur sebelum dapat dikirim. Jika data lain terus-menerus dikirim, itu juga dapat memblokir data agar tidak pernah dikirim.
Itu bergantung pada protokol master-slave, di mana master alamat seorang budak, kemudian mengirimkan perintah / permintaan, dan budak itu membalas setelah itu. Hanya satu perangkat yang dapat berkomunikasi pada satu waktu, sehingga budak harus menunggu sampai master selesai.
Perangkat apa pun dapat bertindak sebagai master dan / atau budak, membuatnya cukup fleksibel.
SPI
Inilah yang akan saya rekomendasikan / gunakan untuk komunikasi umum antara mikrokontroler.
Ini adalah kecepatan tinggi - hingga CLK / 2 = 8MHz (untuk CLK pada 16MHz), menjadikannya metode tercepat. Ini dapat dicapai karena kabelnya terpisah hanya untuk jam.
MOSI, data MISO, dan kabel clock SCK dibagikan di seluruh jaringan, yang berarti kabelnya lebih sederhana.
Ini adalah format master-slave, tetapi perangkat apa pun bisa menjadi master dan / atau slave. Namun, karena komplikasi pilihan slave, untuk kabel bersama (dalam jaringan), Anda hanya boleh menggunakannya secara hierarkis (tidak seperti antarmuka dua-kawat). YAITU. jika Anda mengatur semua perangkat menjadi pohon, perangkat seharusnya hanya menjadi induk bagi anak-anaknya, dan hanya budak bagi orang tuanya. Itu berarti bahwa dalam mode slave, perangkat akan selalu memiliki master yang sama. Juga, untuk melakukan ini dengan benar, Anda perlu menambahkan resistor ke MISO / MOSI / SCK ke master hulu, sehingga jika perangkat berkomunikasi hilir (ketika tidak dipilih sebagai budak), komunikasi tidak akan mempengaruhi komunikasi di bagian lain dari jaringan (perhatikan jumlah level yang dapat Anda lakukan menggunakan resistor terbatas, lihat di bawah untuk solusi yang lebih baik menggunakan kedua port SPI).
Mikrokontroler AVR dapat secara otomatis tri-state sinyal MOSI ketika slave-terpilih, dan beralih ke mode slave (jika dalam master).
Meskipun mungkin membutuhkan jaringan hierarkis, sebagian besar jaringan dapat diatur dengan cara seperti pohon, jadi biasanya ini bukan batasan penting
Di atas dapat sedikit rileks, karena setiap mikrokontroler AVR mendukung dua port SPI yang terpisah, sehingga setiap perangkat dapat memiliki posisi yang berbeda di dua jaringan yang berbeda.
Karena itu, jika Anda memerlukan banyak level di hierarki / pohon Anda (lebih dari 2), solusi di atas menggunakan resistor terlalu rumit untuk bekerja. Dalam hal ini, Anda harus mengubah jaringan SPI antara setiap lapisan pohon. Ini berarti setiap perangkat akan terhubung ke anak-anaknya di satu jaringan SPI, dan orang tuanya di jaringan SPI lainnya. Meskipun itu berarti Anda hanya memiliki satu pohon koneksi, keuntungannya adalah perangkat dapat berkomunikasi dengan salah satu dari anak-anak dan orang tuanya pada saat yang sama dan Anda tidak memiliki resistor fiddly (selalu sulit untuk memilih nilai yang tepat) .
Karena memiliki kabel MOSI dan MISO yang terpisah, master dan slave dapat berkomunikasi pada saat yang sama, sehingga memberikan faktor potensial dua peningkatan kecepatan. Diperlukan pin tambahan untuk slave-select untuk setiap slave tambahan, tetapi ini bukan beban besar, bahkan 10 budak berbeda hanya membutuhkan 10 pin tambahan, yang dapat dengan mudah ditampung pada mikrokontroler AVR yang khas.
CAN tidak didukung oleh mikrokontroler AVR yang telah Anda tentukan. Karena ada pilihan lain yang baik, mungkin tidak penting dalam kasus ini.
Rekomendasi adalah SPI , karena cepat, kabel tidak terlalu rumit, dan tidak memerlukan resistor pull-up fiddly. Dalam kasus yang jarang terjadi di mana SPI tidak sepenuhnya memenuhi kebutuhan Anda (mungkin di jaringan yang lebih rumit), Anda dapat menggunakan beberapa opsi (mis. Gunakan kedua port SPI, bersama dengan antarmuka dua kawat, serta memasangkan beberapa mikrokontroler menggunakan loop USART!)
Dalam kasus Anda, menggunakan SPI berarti bahwa secara alami, mikrokontroler dengan koneksi USB ke komputer dapat menjadi master, dan itu hanya dapat meneruskan perintah yang relevan dari komputer ke setiap perangkat slave. Itu juga dapat membaca pembaruan / pengukuran dari setiap budak dan mengirimkannya ke komputer.
Pada 8MHz, dan panjang kawat 0,5m, saya tidak berpikir itu akan menjadi masalah. Tetapi jika ya, cobalah lebih berhati-hati terhadap kapasitansi (jaga agar kabel ground dan sinyal terlalu dekat, dan juga berhati-hati terhadap koneksi antara konduktor yang berbeda), dan juga pemutusan sinyal. Jika hal itu tetap menjadi masalah, Anda dapat mengurangi laju jam, tapi saya pikir itu tidak perlu.
Saya sangat merekomendasikan CAN untuk komunikasi antar prosesor. Kami menggunakannya dalam robot kami, dengan hingga 22 prosesor di bus yang sama. Dengan desain protokol yang baik, Anda dapat menggunakan hingga sekitar 90% dari bandwidth yang tersedia (sekitar 640kbps saat Anda memperhitungkan semua pengecekan kesalahan dan jarak antar bingkai). Kami dapat melakukan servo 10 motor pada 1000Hz pada satu bus CAN. Ini mendekati batas. Anda mungkin bisa memerasnya ke 20 motor jika Anda mengemas data dengan sangat hati-hati.
Umumnya BISA perlu memiliki satu chip transceiver untuk setiap prosesor (itu hanya perangkat 8-pin kecil). Transceiver memberi Anda sinyal diferensial yang bagus yang memancarkan sedikit gangguan, dan juga membuatnya kebal terhadap gangguan jika Anda bekerja di lingkungan yang berisik secara elektrik (motor, solenoida, dan pemancar radio).
Namun, dalam keadaan terbatas, sebenarnya mungkin untuk menggunakan CAN tanpa transceiver .
Jika Anda pernah merasa ingin menerapkan bus dengan bandwidth serius, saya sarankan Anda mencoba EtherCAT . Ini adalah bus 100 MB, yang dapat dihubungkan ke port Ethernet PC Anda. Ada dua bagian penting ke bus:
PC dapat mengirim dan menerima potongan besar data ke dan dari node pada 1kHz atau lebih cepat. Anda dapat mengontrol banyak hal dalam satu bus EtherCAT.
Ditambahkan:
Shadow Robot Company sekarang menjual sistem Bus EtherCAT yang berguna yang disebut Ronex . Ini memungkinkan Anda menambahkan cukup banyak I / O, dan mereka akan segera memperkenalkan banyak jenis papan lainnya, seperti pengontrol motor, dan ADC berkualitas tinggi.
sumber
CAN High
kabel merah dan biru.Saya tahu saya sedang menggali utas lama dan ini adalah topik yang tidak umum, tetapi saya tidak berpikir Anda bisa mendapatkan chip ET1200 dari Beckhoff. Saya mengirim email kepada mereka beberapa saat yang lalu dan saya disarankan untuk bergabung dengan grup Ethercat. Untuk melakukan ini, saya harus menunjukkan bahwa saya akan berkontribusi kembali ke grup - yaitu, dengan membangun dan menjual perangkat yang menggunakan barang-barang Ethercat. Pada saat itu (dan ini), saya masih membuat prototipe perangkat saya (pengontrol motor brushless untuk aplikasi robot - saat ini menggunakan CAN) jadi saya tidak dapat menawarkan apa pun (saya tidak bisa memberikan waktu yang solid untuk penyelesaian - Saya masih bekerja pada perangkat saya sarjana). Saya menyatakan kepada mereka kekecewaan saya. Mereka bilang jangan kecewa !! Hal-hal yang cukup lucu! Saya akan benar - benaringin masuk ke Ethercat, tetapi ASIC tampaknya tidak tersentuh oleh penggemar atau mereka yang tidak memiliki perusahaan. Juga, ini adalah posting pertama saya, jadi minta maaf jika saya membuat marah para dewa dengan menggali posting lama!
sumber