- Protokol Komunikasi Bersiri RS-485
- RS-485 di Arduino
- Komponen Diperlukan
- Rajah Litar
- Pengaturcaraan Arduino UNO & Arduino Nano untuk Komunikasi Bersiri RS485
- Mengawal Kecerahan LED dengan Komunikasi Bersiri RS485
Memilih protokol komunikasi untuk komunikasi antara mikrokontroler dan peranti periferal adalah bahagian penting dalam sistem tertanam. Ini penting kerana prestasi keseluruhan aplikasi yang disisipkan bergantung pada cara komunikasi kerana berkaitan dengan pengurangan kos, pemindahan data yang lebih cepat, liputan jarak jauh dll.
Dalam tutorial sebelumnya, kita telah belajar mengenai protokol komunikasi I2C dan protokol Komunikasi SPI di Arduino. Sekarang ada satu lagi protokol komunikasi bersiri yang disebut RS-485. Protokol ini menggunakan komunikasi bersiri tak segerak. Kelebihan utama RS-485 adalah pemindahan data jarak jauh antara dua peranti. Dan mereka paling biasa digunakan dalam persekitaran industri yang bising elektrik.
Dalam tutorial ini, kita akan belajar mengenai komunikasi bersiri RS-485 antara dua Arduino dan kemudian menunjukkannya dengan mengawal kecerahan LED yang disambungkan ke Slave Arduino dari Master Arduino dengan menghantar nilai ADC melalui Modul RS-485. Potensiometer 10k digunakan untuk mengubah nilai ADC di Master Arduino.
Mari mulakan dengan memahami cara komunikasi Serial RS-485.
Protokol Komunikasi Bersiri RS-485
RS-485 adalah protokol komunikasi bersiri tak segerak yang tidak memerlukan denyutan jam. Ia menggunakan teknik yang disebut isyarat pembezaan untuk memindahkan data binari dari satu peranti ke peranti lain.
Jadi apakah kaedah pemindahan isyarat pembezaan ini ??
Kaedah isyarat pembezaan berfungsi dengan membuat voltan pembezaan dengan menggunakan 5V positif dan negatif. Ia menyediakan komunikasi Half-Duplex ketika menggunakan dua wayar dan Full-Duplex memerlukan wayar 4 Fours.
Dengan menggunakan kaedah ini
- RS-485 menyokong kadar pemindahan data maksimum 30Mbps maksimum.
- Ia juga memberikan jarak transfer data maksimum dibandingkan dengan protokol RS-232. Ia memindahkan data maksimum 1200 meter.
- Kelebihan utama RS-485 berbanding RS-232 adalah hamba berganda dengan Master tunggal sementara RS-232 hanya menyokong hamba tunggal.
- Ia boleh mempunyai maksimum 32 peranti yang disambungkan ke protokol RS-485.
- Kelebihan lain dari RS-485 adalah kebal terhadap kebisingan kerana mereka menggunakan kaedah isyarat pembezaan untuk memindahkan.
- RS-485 lebih pantas berbanding protokol I2C.
RS-485 di Arduino
Untuk menggunakan RS-485 di Arduino, modul yang disebut 5V MAX485 TTL ke RS485 yang berdasarkan pada Maxim MAX485 IC diperlukan kerana ia membolehkan komunikasi bersiri pada jarak jauh 1200 meter dan ia adalah dua arah. Dalam mod half duplex ia mempunyai kadar pemindahan data 2. 5Mbps.
Modul 5V MAX485 TTL to RS485 memerlukan voltan 5V dan menggunakan tahap logik 5V sehingga dapat dihubungkan dengan port siri perkakasan mikrokontroler seperti Arduino.
Ia mempunyai ciri-ciri berikut:
- Voltan operasi: 5V
- Cip MAX485 on-board
- Penggunaan kuasa yang rendah untuk komunikasi RS485
- Pemancar terhad kadar laju
- Terminal 2P pitch 5.08mm
- Pendawaian komunikasi RS-485 yang selesa
- Semua pin cip boleh dikendalikan melalui mikrokontroler
- Saiz papan: 44 x 14mm
Pin-Out dari RS-485:
Nama Pin |
Gunakan |
VCC |
5V |
A |
Input Penerima Bukan Pembalik Keluaran Pemacu Bukan Pembalik |
B |
Input Penerima Pembalik Membalikkan Output Pemacu |
GND |
GND (0V) |
R0 |
Penerima Keluar (pin RX) |
RE |
Output Penerima (LOW-Enable) |
DE |
Keluaran Pemacu (Diaktifkan TINGGI) |
DI |
Input Pemacu (pin TX) |
Modul RS-485 ini dapat dihubungkan dengan mudah dengan Arduino. Mari gunakan port bersiri perkakasan Arduino 0 (RX) dan 1 (TX) (Dalam UNO, NANO). Pengaturcaraan juga mudah hanya menggunakan Serial.print () untuk menulis ke RS-485 dan Serial. Baca () untuk membaca dari RS-485.
Bahagian pengaturcaraan dijelaskan kemudian secara terperinci tetapi pertama-tama mari kita periksa komponen dan rajah litar yang diperlukan.
Komponen Diperlukan
- Arduino UNO atau Arduino NANO (2)
- Modul Penukar MAX485 TTL ke RS485 - (2)
- Potensiometer 10K
- Paparan LCD 16x2
- LED
- Papan roti
- Wayar Penyambung
Dalam tutorial ini Arduino Uno digunakan sebagai Master dan Arduino Nano digunakan sebagai Slave. Dua Papan Arduino digunakan di sini sehingga diperlukan dua Modul RS-485.
Rajah Litar
Sambungan Litar antara RS-485 pertama dan Arduino UNO (Master):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
8 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
Kepada A dari Slave RS-485 |
B |
Ke B Slave RS-485 |
Sambungan antara RS-485 kedua dan Arduino Nano (Budak):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE RE |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
A |
Kepada A Master RS-485 |
B |
Kepada B Master RS-485 |
Sambungan Litar antara LCD 16x2 dan Arduino Nano:
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Ke pin pusat potensiometer untuk kawalan kontras LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
Potensiometer 10K disambungkan ke Analog Pin A0 dari Arduino UNO untuk memberikan input Analog dan LED disambungkan ke pin D10 dari Arduino Nano.
Pengaturcaraan Arduino UNO & Arduino Nano untuk Komunikasi Bersiri RS485
Untuk pengaturcaraan kedua-dua papan digunakan Arduino IDE. Tetapi pastikan anda telah memilih PORT yang sesuai dari Tools-> Port and Board dari Tools-> Board.
Kod lengkap dengan Video Demo diberikan pada akhir tutorial ini. Di sini kami menerangkan bahagian penting kod. Terdapat dua program dalam tutorial ini, satu untuk Arduino UNO (Master) dan satu lagi untuk Arduino Nano (Slave).
Penjelasan Kod untuk Master: Arduino UNO
Di sisi Master, cukup ambil input Analog pada pin A0 dengan mengubah potensiometer dan kemudian SerialWrite nilai tersebut ke bas RS-485 melalui Hardware Serial Ports (0,1) dari Arduino UNO.
Untuk Memulakan Komunikasi Bersiri di Hardware Serial Pins (0,1) gunakan:
Serial.begin (9600);
Untuk membaca nilai Analog pada pin A0 Arduino UNO dan menyimpannya dalam penggunaan potval berubah-ubah:
int potval = analogRead (pushval);
Sebelum menulis nilai potval ke port bersiri, pin DE & RE RS-485 harus TINGGI yang disambungkan ke pin 8 Arduino UNO sehingga menjadikan pin 8 TINGGI:
digitalWrite (allowPin, TINGGI);
Seterusnya untuk meletakkan nilai-nilai tersebut di Serial Port yang dihubungkan dengan modul RS-485, gunakan pernyataan berikut
Serial.println (potval);
Penjelasan Kod untuk Hamba: Arduino NANO
Di sisi Slave, nilai integer diterima dari Master RS-485 yang terdapat di port Hardware Serial Arduino Nano (Pin -0,1). Cukup baca nilai tersebut dan simpan dalam pemboleh ubah. Nilai dalam bentuk (0 -1023). Jadi ia diubah menjadi (0-255) kerana teknik PWM digunakan untuk mengawal kecerahan LED.
Kemudian AnalogWrite nilai yang ditukar itu ke pin LED D10 (Ini adalah pin PWM). Jadi bergantung pada nilai PWM, kecerahan LED berubah dan juga memaparkan nilai-nilai tersebut dalam paparan LCD 16x2.
Agar RS-485 Slave Arduino menerima nilai dari Master, cukup buat pin DE & RE RS-485 RENDAH. Jadi pin D8 (enablePin) dari Arduino NANO dibuat RENDAH.
digitalWrite (allowPin, LOW);
Dan untuk membaca data integer yang terdapat di Serial Port dan menyimpannya dalam penggunaan yang berubah-ubah
int pwmval = Serial.parseInt ();
Nilai tukar seterusnya dari (0-1023 hingga 0-255) dan simpan dalam pemboleh ubah:
int convert = peta (pwmval, 0,1023,0,255);
Seterusnya tulis nilai analog (PWM) ke pin D10 di mana anod LED disambungkan:
analogWrite (ledpin, menukar);
Untuk mencetak nilai PWM tersebut dalam penggunaan paparan LCD 16x2
lcd.setCursor (0,0); lcd.print ("PWM DARI MASTER"); lcd.setCursor (0,1); lcd.print (tukar);
Mengawal Kecerahan LED dengan Komunikasi Bersiri RS485
Apabila nilai PWM ditetapkan pada 0 menggunakan potensiometer, LED dimatikan.
Dan apabila nilai PWM ditetapkan pada 251 menggunakan potensiometer: LED dihidupkan dengan kecerahan penuh seperti yang ditunjukkan pada gambar di bawah:
Jadi ini adalah bagaimana RS485 dapat digunakan untuk komunikasi bersiri di Arduino.