- Perbezaan antara Komunikasi UART dan RS485
- Komponen Diperlukan
- Rajah Litar untuk Komunikasi Berwayar Jarak Jauh
- Modul Penukar MAX485 UART-RS485
- Kabel Ethernet CAT-6E
- Penjelasan Kod Arduino
- Kesimpulannya
Kami telah lama menggunakan Papan Pembangunan Mikrokontroler seperti Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430, dan lain-lain dalam projek-projek kecil kami di mana jarak antara sensor dan papan tidak lebih dari beberapa sentimeter pada jarak ini, komunikasi antara modul sensor, relay, penggerak, dan pengawal yang berbeza dapat dilakukan dengan mudah melalui wayar pelompat sederhana tanpa kita khawatir dengan gangguan isyarat di medium dan bunyi elektrik yang merayap ke dalamnya. Tetapi jika anda membina sistem kawalan dengan papan pengembangan ini pada jarak lebih dari 10 hingga 15 meter, maka anda harus mempertimbangkan kebisingan dan kuasa isyarat kerana jika anda mahu sistem anda berfungsi dengan baik, maka anda tidak mampu kehilangan data semasa memindahkan.
Terdapat banyak jenis protokol komunikasi bersiri seperti I2C dan SPI yang dapat dilaksanakan dengan mudah dengan Arduino dan hari ini kita akan melihat protokol lain yang paling biasa digunakan yang disebut RS485 yang sangat biasa digunakan dalam persekitaran industri dengan kebisingan tinggi untuk memindahkan data melalui jarak jauh. Dalam tutorial ini, kita akan belajar mengenai protokol komunikasi RS485 dan bagaimana menerapkannya dengan dua Arduino Nano yang kita miliki dengan kita dan bagaimana menggunakan Modul penukaran MAX485 RS485 ke UART. Sebelumnya kami juga pernah melakukan komunikasi MAX485 dengan Arduino dan juga Komunikasi MAX485 dengan Raspberry pi, anda juga boleh melihatnya jika berminat.
Perbezaan antara Komunikasi UART dan RS485
Sebilangan besar sensor kos rendah dan modul lain seperti GPS, Bluetooth, RFID, ESP8266, dan lain-lain yang biasa digunakan dengan Arduino, Raspberry Pi di pasaran menggunakan komunikasi berasaskan UART TTL kerana hanya memerlukan 2 wayar TX (Transmitter) dan RX (Penerima). Ini bukan protokol Komunikasi standard, tetapi merupakan rangkaian fizikal dengan mana anda dapat menghantar dan menerima data bersiri dengan periferal lain. Ia hanya dapat menghantar / menerima data secara bersiri, jadi pertama-tama mengubah data selari menjadi data bersiri dan kemudian mengirimkan data.
UART adalah peranti penghantaran Asinkron, oleh itu tidak ada isyarat jam untuk menyegerakkan data antara kedua-dua peranti tersebut sebaliknya ia menggunakan bit permulaan dan berhenti pada permulaan dan akhir setiap paket data masing-masing untuk menandakan hujung data yang dipindahkan. Data yang dihantar UART disusun ke dalam paket. Setiap paket mengandungi 1 bit permulaan, 5 hingga 9 bit data (bergantung pada UART), bit pariti pilihan, dan 1 atau 2 bit berhenti. Ia didokumentasikan dengan baik dan digunakan secara meluas dan ia juga mempunyai pariti bit untuk membolehkan pemeriksaan kesilapan. Tetapi ada beberapa batasan untuk itu kerana tidak dapat menyokong banyak hamba dan banyak tuan dan bingkai data maksimum terhad kepada 9 bit. Untuk pemindahan data, kadar baud Master dan Slave mestilah antara 10% antara satu sama lain. Di bawah ini ditunjukkan contoh bagaimana watak adalah pemancar melalui garis data UART. Isyarat Tinggi dan Rendah diukur terhadap tahap GND sehingga pergeseran tahap GND akan memberi kesan buruk pada pemindahan data.
Sebaliknya, RS485 adalah komunikasi berasaskan industri yang dikembangkan untuk rangkaian pelbagai peranti yang dapat digunakan pada jarak jauh dan juga pada kecepatan yang lebih tinggi. Ia beroperasi pada kaedah pengukuran isyarat berbeza daripada pengukuran voltan dengan pin GND Isyarat RS485 melayang dan setiap isyarat dihantar melalui garis Sig + dan garis Sig.
Penerima RS485 membandingkan perbezaan voltan antara kedua-dua talian, bukannya tahap voltan mutlak pada garis isyarat. Ini berfungsi dengan baik dan mencegah adanya gelung tanah, sumber masalah komunikasi yang biasa. Hasil terbaik dicapai jika garis Sig + dan Sig dipintal sebagai memutar membatalkan kesan bunyi elektromagnetik yang disebabkan oleh kabel dan memberikan kekebalan yang jauh lebih baik terhadap bunyi yang membolehkan RS485 menghantar data sehingga jarak 1200m. Pasangan berpintal juga membolehkan kelajuan penghantaran jauh lebih tinggi daripada yang mungkin dilakukan dengan kabel lurus. Pada jarak transmisi kecil, kecepatan hingga 35Mbps dapat dicapai dengan RS485 walaupun kecepatan transmisi akan menurun dengan jarak. Pada kelajuan transmisi 1200m, anda hanya dapat menggunakan kelajuan transmisi 100kbps. Anda memerlukan kabel Ethernet khas untuk merealisasikan protokol komunikasi ini. Terdapat banyak kategori kabel Ethernet yang dapat kita gunakan seperti CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A, dll. Dalam tutorial kami, kami akan menggunakan kabel CAT-6E yang mempunyai 4 pasang wayar 24AWG berpintal dan dapat menyokong sehingga 600MHz. Ia ditamatkan pada kedua hujungnya dengan penyambung RJ45. Tahap voltan saluran khas dari pemacu talian adalah minimum ± 1.5 V hingga maksimum kira-kira ± 6 V. Kepekaan input penerima adalah ± 200 mV. Kebisingan dalam julat ± 200 mV pada dasarnya tersekat kerana pembatalan kebisingan mod biasa. Contoh bagaimana byte (0x3E) dipindahkan melalui dua baris Komunikasi RS485.
Komponen Diperlukan
- Modul Penukar 2 × MAX485
- 2 × Arduino Nano
- 2 × 16 * 2 LCD Alphanumerik
- Potensiometer pengelap 2 × 10k
- Kabel Ethernet Cat-6E
- Papan roti
- Wayar Pelompat
Rajah Litar untuk Komunikasi Berwayar Jarak Jauh
Gambar di bawah menunjukkan rajah litar pemancar dan penerima untuk komunikasi berwayar jarak jauh Arduino. Perhatikan bahawa kedua-dua rangkaian pemancar dan penerima kelihatan sama satu-satunya perkara yang berbeza adalah kod yang ditulis di dalamnya. Juga untuk demonstrasi, kami menggunakan satu papan sebagai pemancar dan satu papan sebagai penerima, tetapi kami dapat dengan mudah memprogram papan agar berfungsi sebagai pemancar dan penerima dengan pengaturan yang sama
Gambar rajah sambungan untuk litar di atas juga diberikan di bawah.
Seperti yang anda lihat di atas terdapat dua pasang litar yang hampir sama dengan masing-masing mempunyai Arduino nano, 16 * 2 Alphanumeric LCD, dan MAX485 UART to RS485 converter IC yang disambungkan ke setiap hujung kabel Ethernet Cat-6E melalui penyambung RJ45. Kabel yang telah saya gunakan dalam tutorial ini panjangnya 25m. Kami akan menghantar beberapa data dari sisi pemancar di atas kabel dari Nano yang ditukar menjadi isyarat RS485 melalui Modul MAX RS485 yang berfungsi dalam Mod Master.
Pada hujung penerimaan, modul penukar MAX485 berfungsi sebagai Slave, dan mendengar transmisi dari Master ia sekali lagi menukar Data RS485 yang diterimanya ke isyarat 5V TTL UART standard untuk dibaca oleh penerima Nano dan dipaparkan pada 16 * 2 LCD alfanumerik disambungkan kepadanya.
Modul Penukar MAX485 UART-RS485
Modul UART-RS485 Converter ini mempunyai cip MAX485 on-board yang merupakan transceiver bertenaga rendah dan kecepatan rendah yang digunakan untuk komunikasi RS-485. Ia berfungsi pada bekalan kuasa tunggal + 5V dan arus pengenalnya ialah 300 μA. Ia berfungsi pada komunikasi half-duplex untuk melaksanakan fungsi mengubah level TTL menjadi level RS-485 yang bermaksud ia dapat menghantar atau menerima kapan saja, bukan keduanya, ia dapat mencapai kadar transmisi maksimum 2.5Mbps. Transceiver MAX485 menarik arus bekalan antara 120μA dan 500μA dalam keadaan yang tidak dimuat atau dimuat sepenuhnya semasa pemandu dilumpuhkan. Pemacu terhad untuk arus litar pintas dan output pemandu dapat diletakkan pada keadaan impedans tinggi melalui litar pemutus terma. Input penerima mempunyai ciri fail-safe yang menjamin output tinggi logik jika input adalah litar terbuka.Di samping itu, ia mempunyai prestasi anti-gangguan yang kuat. Ia juga memiliki LED onboard untuk menampilkan keadaan cip semasa iaitu sama ada cip dihidupkan atau menghantar atau menerima data menjadikannya lebih mudah untuk debug dan digunakan.
Gambarajah litar yang diberikan di atas menerangkan bagaimana IC MAX485 onboard disambungkan ke pelbagai komponen dan menyediakan header jarak 0.1-inci standard untuk digunakan dengan papan roti jika anda mahu.
Kabel Ethernet CAT-6E
Apabila kita memikirkan pemindahan data jarak jauh, kita langsung berfikir tentang menyambung ke internet melalui kabel Ethernet. Pada masa kini, kami kebanyakan menggunakan Wi-Fi untuk penyambungan internet tetapi sebelumnya kami menggunakan kabel Ethernet ke setiap komputer peribadi untuk menyambungkannya ke internet. Sebab utama penggunaan Kabel Ethernet ini menggunakan wayar biasa adalah kerana ia memberikan perlindungan yang lebih baik daripada bunyi bising dan gangguan isyarat pada jarak yang tinggi. Mereka mempunyai Jaket Perisai di atas lapisan penebat untuk melindungi daripada Gangguan Elektromagnetik dan juga setiap pasang wayar dipintal bersama untuk mengelakkan pembentukan gelung semasa dan dengan itu perlindungan yang lebih baik terhadap kebisingan. Mereka sering ditamatkan dengan penyambung RJ45 8 pin di kedua-dua hujungnya. Terdapat banyak kategori kabel Ethernet yang dapat kita gunakan seperti CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A, dan lain-lain Dalam tutorial kami, kami akan menggunakan kabel CAT-6E yang mempunyai 4 pasang wayar 24AWG berpintal dan dapat menyokong hingga 600MHz.
Gambar menunjukkan bagaimana sepasang wayar dipintal di dalam Lapisan Penebat Kabel CAT-6E
RJ-45 Connector bermaksud Kabel Ethernet CAT-6E
Penjelasan Kod Arduino
Dalam projek ini, kami menggunakan dua Arduino Nano, satu sebagai pemancar dan Satu sebagai penerima masing-masing menggerakkan LCD Alfanumerik 16 * 2 untuk memaparkan hasilnya. Oleh itu, dalam kod Arduino, kami akan fokus untuk mengirim data dan memaparkan data yang dihantar atau diterima di layar LCD.
Untuk Bahagian Pemancar:
Kita mulakan dengan memasukkan perpustakaan standard untuk menggerakkan LCD dan menyatakan pin D8 Arduino Nano sebagai pin output yang kemudian kita akan gunakan untuk menyatakan Modul MAX485 sebagai pemancar atau Penerima.
int enablePin = 8; int potval = 0; #sertakan
Sekarang datang ke bahagian persediaan. Kami akan menarik pin membolehkan tinggi untuk meletakkan modul MAX485 dalam mod pemancar. Oleh kerana ia adalah IC separuh dupleks, maka ia tidak dapat menghantar dan menerima pada masa yang sama. Kami juga akan memulakan LCD di sini dan mencetak mesej selamat datang.
Serial.begin (9600); // memulakan siri pada baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Pemancar Nano"); kelewatan (3000); lcd.clear ();
Sekarang dalam gelung, kami menuliskan nilai bilangan bulat yang terus meningkat pada garis Serial yang kemudian dihantar ke nano yang lain. Nilai ini juga dicetak pada LCD untuk paparan dan penyahpepijatan.
Serial.print ("Nilai Terkirim ="); Serial.println (potval); // Serial Write POTval ke RS-485 Bus lcd.setCursor (0,0); lcd.print ("Nilai Terkirim"); lcd.setCursor (0,1); lcd.print (potval); kelewatan (1000); lcd.clear (); potval + = 1;
Bahagian Penerima:
Di sini sekali lagi, kita mulakan dengan memasukkan perpustakaan standard untuk menggerakkan LCD dan menyatakan pin D8 dari Arduino Nano sebagai pin output yang kemudian kita akan gunakan untuk menyatakan Modul MAX485 sebagai pemancar atau Penerima.
int enablePin = 8; #sertakan
Sekarang datang ke bahagian persediaan. Kami akan menarik pin membolehkan tinggi untuk meletakkan modul MAX485 dalam mod penerima. Oleh kerana ia adalah IC separuh dupleks, maka ia tidak dapat menghantar dan menerima pada masa yang sama. Kami juga akan memulakan LCD di sini dan mencetak mesej selamat datang.
Serial.begin (9600); // memulakan siri pada baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Penerima Nano"); kelewatan (3000); digitalWrite (allowPin, LOW); // (Pin 8 sentiasa RENDAH untuk menerima nilai daripada Master)
Sekarang dalam gelung, kami memeriksa apakah ada yang tersedia di port bersiri dan kemudian membaca data dan kerana data yang masuk adalah bilangan bulat, kami menguraikannya dan dipaparkan pada LCD yang disambungkan.
int pwmval = Serial.parseInt (); // Terima nilai INTEGER dari Master melalui Serial.print RS-485 ("Saya mendapat nilai"); Serial.println (pwmval); lcd.setCursor (0,0); lcd.print ("Nilai yang Diterima"); lcd.setCursor (0,1); lcd.print (pwmval); kelewatan (1000); lcd.clear ();
Kesimpulannya
Persediaan ujian yang kami gunakan untuk projek ini boleh didapati di bawah.
Penyelesaian sepenuhnya projek ini boleh didapati dalam video yang dipautkan di bawah. Kaedah ini adalah salah satu kaedah yang mudah dan senang dilaksanakan untuk memindahkan data dalam jarak jauh. Dalam projek ini, kami hanya menggunakan kecepatan baud 9600 yang berada di bawah kecepatan pemindahan maksimum yang dapat kita capai dengan Modul MAX-485 tetapi kelajuan ini sesuai untuk kebanyakan modul sensor di luar sana dan kita tidak benar-benar memerlukan semua kelajuan maksimum semasa bekerja dengan Arduino dan papan pengembangan lain melainkan anda menggunakan kabel sebagai sambungan ethernet dan memerlukan semua lebar jalur dan kelajuan pemindahan yang anda dapat. Jangan bermain-main dengan kelajuan pemindahan sendiri dan mencuba jenis kabel ethernet lain juga. Sekiranya anda mempunyai sebarang pertanyaan, tinggalkan di bahagian komen di bawah atau gunakan forum kami dan saya akan cuba menjawabnya dengan sebaik-baiknya. Sehingga itu, adios!