Gambaran:
Saya berkomunikasi di antara 3 papan PCB kustom dengan dspic33 pada mereka menggunakan SPI. Saya memiliki master dan 2 budak, tetapi saya mengirimkan kedua budak data yang sama (dan membiarkan mereka memilih apa yang harus diperhatikan).
Pengaturan perangkat keras:
Kedua budak telah membangun pengontrol motor BLDC dan Master mengendalikan pengontrol motor ini melalui SPI. Kabel dijalankan sekitar 3 kaki dari master ke masing-masing budak dan header khas .1 "pitch melalui lubang header SAMTECH. Setiap pengontrol motor memiliki regulator 3,3 volt yang menjalankan elektronik dsPIC / LV. Saya menggunakan satu regulator pengontrol motor (ayo panggil dia A) untuk juga menyalakan SPI master DSPIC. Untuk pengontrol motor lainnya (sebut saja B), saya jalankan saja jalur SPI dan ground dari master. CLK SPI berjalan pada 100KHz
Sampai ke titik (Akhirnya):
Dengan tidak ada motor yang menjalankan ini semua berfungsi dengan baik, semua data muncul seperti yang diharapkan untuk kedua budak. Namun, ketika saya memulai motor, Bslave tidak lagi mendapatkan data yang benar. Dia mengambil jam tambahan atau menjatuhkannya, saya kira lakukan untuk kebisingan tambahan. Bagaimanapun, checksumnya mulai gagal. Aslave bekerja seperti seorang juara tidak peduli apa.
1) Apakah Anda berharap bahwa semua perangkat ini perlu dijalankan dari sumber 3,3 volt yang sama? Jika demikian, dapatkah Anda meyakinkan saya dengan berbicara tentang loop induktansi yang lebih panjang dan ilmu hitam seperti itu.
2) Apakah Anda memiliki aturan praktis tentang seberapa cepat saya dapat berharap dapat menjalankan SPI clk dan sukses dengan pengaturan perangkat keras seperti di atas?
Jawaban:
Saya sudah menjalankan SPI (2MHz clock) sekitar 5m dari 1 kotak ke kotak lain dan saya tidak ragu dalam mendesain jam dan data menjadi output seimbang. Kabel (khusus) antara keduanya juga menggunakan twisted pair dan layar pada data dan jam.
Saya juga mengirim daya terisolasi ke kotak jauh melalui konverter dc-to-dc. Saya tidak punya cukup waktu untuk mendapatkan yang salah ini jadi mungkin solusi saya adalah kerja keras tapi hei, itu berhasil. Alasan saya di balik keputusan ini adalah bahwa saya tidak ingin lonjakan "konsumsi saat ini" turun di layar pasangan bengkok. Layar tidak terhubung ke ground pada akhir pengiriman PC. Perlakukan sinyal digital seperti sinyal analog yang berharga untuk mendapatkan kinerja terbaik - selalu singkirkan layar Anda di ujung penerima dan jika Anda harus (karena alasan apa pun) berhenti dengan enggan (juga) di ujung pengirim.
Itu untuk mentransmisikan 128 saluran sinyal analog kecepatan rendah ke kotak keluar dari PC. Saya curiga, bahwa jika perlu, saya dapat mengoperasikan ini pada clock 20MHz.
sumber
SPI tidak berbeda dengan antarmuka listrik lainnya. Perhatikan masalah integritas sinyal yang biasa (perisai, area putaran, impedansi, pemutusan sinyal, dll.) Dan Anda dapat menjalankannya dengan jarak yang masuk akal. Apa jarak yang masuk akal, itu tergantung pada apa yang Anda lakukan dengannya dan seberapa baik Anda dapat mengendalikan berbagai faktor.
Bisakah Anda menjalankannya 3 kaki? Pasti. Seharusnya kamu? Ya, ada hal-hal yang lebih baik untuk digunakan. Seperti yang orang lain tunjukkan, ada RS-4xx yang bisa bekerja dengan baik. Anda juga dapat menjalankan SPI, tetapi gunakan pensinyalan diferensial melalui kabel seperti RS-4xx. Ini akan menghabiskan lebih banyak kabel, tetapi itu adalah jeda. Anda juga dapat melakukan RS-485 normal, menggunakan UART dan sejenisnya.
Saya pribadi telah menjalankan kabel SPI lebih dari 1 kaki, di dalam sasis, dengan kecepatan hingga 32 MHz tanpa masalah. Saya juga menjalankan I2C lebih dari 4 kaki pada 100 KHz di lingkungan EMI yang tinggi dan SPI jauh lebih baik daripada I2C - jadi itu bisa dilakukan. Tetapi jika Anda tidak memperhatikan detailnya maka Anda dapat dengan mudah mengalami masalah. Tapi jujur, Anda perlu memperhatikan detailnya terlepas dari apa yang Anda gunakan.
sumber
Pertimbangkan dengan hati-hati skema landasan Anda. Lindungi garis data, jika itu membantu, dan arde perisai dengan benar. Jangan jalankan data dan jam pada twisted pair yang sama. Gunakan isolasi galvanik jika diperlukan. Selain itu, tidak ada aturan praktis yang saya sadari.
SPI dirancang untuk (1) komunikasi jarak pendek, biasanya dalam satu PCB dan (2) di lingkungan dengan EMI yang tidak banyak. Mungkin, satu-satunya bus yang berkinerja lebih buruk daripada SPI di hadapan EMI adalah I 2 C dan 1-wire. Ada bus, yang dirancang untuk komunikasi jarak jauh di hadapan EMI (RS-485, CAN, Ethernet).
Dimungkinkan untuk memperpanjang dan meningkatkan SPI. Berikut catatan aplikasi , yang menunjukkan bus SPI dengan garis diferensial.
sumber
Ada beberapa cara untuk meminimalkan efek noise pada saluran sinyal Anda. Cara termudah adalah dengan merutekan bidang tembaga atau jejak tembaga yang berdekatan dengan jejak sinyal Anda. Ini meminimalkan induktansi dari jejak dan area loop.
Pada frekuensi tinggi arus balik ingin menjalankan jalur impedansi paling rendah yang berdekatan dengan jalur sinyal itu sendiri. Saya berasumsi bahwa Anda memiliki landasan bersama di antara sirkuit Anda, tetapi ini dapat menyebabkan masalah untuk pensinyalan frekuensi tinggi jika landasan bersama Anda hanyalah "kekuatan" koneksi darat antara sirkuit. Ini akan menyebabkan area loop yang sangat besar untuk arus sinyal yang dapat memungkinkan banyak injeksi noise karena kopling magnetik yang menyimpang.
Jika Anda bisa, sambungkan koneksi ground tambahan antara dasar yang berdekatan dengan jalur sinyal SPI selain menjaga pesawat ground tembaga atau jejak yang diarahkan berdekatan dengan garis di dalam papan juga. Ini mungkin membuat dunia berbeda dalam hal seberapa rentan sirkuit Anda terhadap motor.
sumber