- Komunikasi Serial RS-485
- Komponen Diperlukan
- Diagram Sirkuit
- Pemrograman STM32F103C8 & Arduino UNO untuk Komunikasi Serial RS485
- Menguji komunikasi RS485 antara STM32F103C8 dan Arduino UNO:
Protokol komunikasi merupakan bagian integral dari elektronik digital dan sistem tertanam. Dimanapun ada antarmuka dari beberapa mikrokontroler dan periferal, protokol komunikasi harus digunakan untuk bertukar banyak data. Ada banyak jenis protokol komunikasi serial yang tersedia. RS485 adalah salah satu protokol komunikasi serial dan digunakan dalam proyek industri dan alat berat.
Kami belajar tentang Komunikasi Serial RS485 antara Arduino Uno dan Arduino Nano di tutorial sebelumnya . Tutorial ini membahas tentang penggunaan komunikasi Serial RS-485 pada Mikrokontroler STM32F103C8. Jika Anda baru mengenal Mikrokontroler STM32, mulailah dengan Memulai STM32 menggunakan Arduino IDE: Blinking LED dan periksa semua proyek STM32 di sini.
Dalam tutorial ini Master STM32F103C8 memiliki tiga tombol push yang digunakan untuk mengontrol status tiga LED yang ada di Slave Arduino Uno dengan menggunakan komunikasi Serial RS-485.
Mari kita mulai dengan memahami cara kerja komunikasi Serial RS-485.
Komunikasi Serial RS-485
RS-485 adalah protokol komunikasi serial asinkron yang tidak memerlukan jam. Ini menggunakan teknik yang disebut sinyal diferensial untuk mentransfer data biner dari satu perangkat ke perangkat lainnya.
Jadi apakah Metode Transfer Sinyal Diferensial ini ??
Metode sinyal diferensial bekerja dengan cara membuat tegangan diferensial dengan menggunakan tegangan 5V positif dan negatif. Ini menyediakan komunikasi Half-Duplex saat menggunakan dua kabel dan komunikasi Full-Duplex saat menggunakan empat kabel.
Dengan menggunakan metode ini:
- RS-485 mendukung kecepatan transfer data maksimum 30Mbps.
- Ini juga menyediakan jarak transfer data maksimum dibandingkan dengan protokol RS-232. Ini mentransfer data hingga maksimum 1200 meter.
- Keunggulan utama RS-485 dibandingkan RS-232 adalah adanya beberapa slave dengan Master tunggal sementara RS-232 hanya mendukung slave tunggal.
- Dapat memiliki maksimal 32 perangkat yang terhubung ke protokol RS-485.
- Keuntungan lain dari RS-485 adalah kebal terhadap kebisingan karena mereka menggunakan metode sinyal diferensial untuk mentransfer.
- RS-485 lebih cepat dibandingkan dengan protokol I2C.
Modul RS-485 dapat dihubungkan ke mikrokontroler manapun yang memiliki port serial. Untuk menggunakan modul RS-485 dengan mikrokontroler diperlukan modul 5V MAX485 TTL hingga RS485 yang berbasis IC Maxim MAX485 karena memungkinkan komunikasi serial pada jarak jauh 1200 meter dan bersifat dua arah dan half duplex memiliki kecepatan transfer data 2,5 Mbps. Modul ini membutuhkan tegangan 5V.
Deskripsi Pin RS-485:
Nama Pin |
Deskripsi |
VCC |
5V |
SEBUAH |
Input Penerima Non-pembalik Output Driver Non-Pembalik |
B |
Membalik Input Penerima Membalik Output Driver |
GND |
GND (0V) |
R0 |
Penerima Keluar (RX pin) |
KEMBALI |
Output Penerima (LOW-Enable) |
DE |
Output Driver (HIGH-Enable) |
DI |
Masukan Driver (pin TX) |
Modul RS485 memiliki fitur-fitur berikut:
- Tegangan operasi: 5V
- Chip MAX485 terpasang
- Konsumsi daya yang rendah untuk komunikasi RS485
- Transceiver terbatas dengan laju perubahan tegangan
- 5.08mm pitch terminal 2P
- Kabel komunikasi RS-485 yang nyaman
- Semua pin chip yang telah diarahkan dapat dikontrol melalui mikrokontroler
- Ukuran papan: 44 x 14mm
Menggunakan modul ini dengan STM32F103C8 dan Arduino UNO sangat mudah. Port serial perangkat keras mikrokontroler digunakan. Pin serial perangkat keras di STM32 dan arduino UNO diberikan di bawah ini.
- Di STM32F103C8: Pin PA9 (TX) & PA10 (RX)
- Di Arduino Uno: Pin 0 (RX) & 1 (TX)
Pemrogramannya juga sederhana cukup gunakan Serial.print () untuk menulis ke RS-485 dan Serial.Read () untuk membaca dari RS-485 dan pin DE & RE RS-485 dibuat RENDAH untuk menerima data dan dibuat TINGGI untuk tulis data ke bus RS-485.
Komponen Diperlukan
- STM32F103C8
- Arduino UNO
- MAX485 TTL ke RS485 Converter Module - (2)
- Potensiometer 10K
- Tombol Tekan - 3
- LED - 3
- Resistor
- Papan tempat memotong roti
- Menghubungkan Kabel
Diagram Sirkuit
Dalam tutorial ini STM32F103C8 digunakan sebagai Master dengan satu modul RS-485 dan Arduino UNO digunakan sebagai Slave dengan modul RS-485 lainnya.
Koneksi Sirkuit antara RS-485 dan STM32F103C8 (Master):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE KEMBALI |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
SEBUAH |
Ke A dari Slave RS-485 |
B |
Ke B dari Slave RS-485 |
STM32F103C8 dengan Tiga Tombol Tekan:
Tiga tombol Tekan dengan tiga Resistor Pull Down 10k dihubungkan ke pin PA0, PA1, PA2 dari STM32F103C8.
Koneksi Sirkuit antara RS-485 dan Arduino UNO (Slave):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE KEMBALI |
2 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
SEBUAH |
Ke A dari Master RS-485 |
B |
Ke B dari Master RS-485 |
Tiga LED digunakan dimana Anoda LED dengan resistor 330 ohm dihubungkan ke pin 4, 7, 8 dari Arduino UNO dan Katoda dari LED dihubungkan ke GND.
Pemrograman STM32F103C8 & Arduino UNO untuk Komunikasi Serial RS485
Arduino IDE digunakan untuk pengembangan dan pemrograman kedua papan yaitu STM32 dan Arduino UNO. Tapi pastikan Anda telah memilih PORT yang sesuai dari Tools-> Port and Board dari Tools-> Board. Jika Anda menemukan kesulitan atau keraguan, lihat saja Pemrograman STM32 Anda di ARDUINO IDE. Pemrograman untuk tutorial ini terdiri dari dua bagian satu untuk STM32F103C8 (Master) dan lainnya untuk Arduino UNO (Slave). Kedua kode tersebut akan dijelaskan satu per satu di bawah ini.
STM32F103C8 sebagai MasterPada sisi Master status Push Button dibaca dan kemudian ditulis secara serial nilai tersebut ke bus RS-485 melalui Hardware Serial Ports 1 (PA9, PA10) dari STM32F103C8. Juga tidak ada perpustakaan eksternal yang dibutuhkan sampai sekarang. Arduino memiliki semua perpustakaan yang diperlukan untuk komunikasi serial.
Mulailah Komunikasi Serial menggunakan Pin Serial Perangkat Keras (PA9, PA10) pada buadrate 9600.
Serial1.begin (9600);
Baca status tombol tekan pada pin PA0, PA1, PA2 dari STM32F103C8 dan simpan dalam variabel button1val, button2val, button3val. Nilainya HIGH jika tombol ditekan dan LOW jika tidak ditekan.
int button1val = digitalRead (tombol1); int button2val = digitalRead (tombol2); int button3val = digitalRead (button3);
Sebelum mengirim nilai tombol ke port serial, pin DE & RE RS-485 harus HIGH yang dihubungkan ke pin PA3 dari STM32F103C8 (Untuk Membuat pin PA3 HIGH):
digitalWrite (enablePin, HIGH);
Selanjutnya untuk meletakkan nilai-nilai itu di Port Serial dan mengirim nilai tergantung pada tombol tekan mana yang ditekan gunakan pernyataan lain dan kirim nilai yang sesuai ketika tombol ditekan.
Jika tombol pertama ditekan maka kondisinya cocok dan nilai '1' dikirim ke serial port dimana Arduino UNO terhubung.
if (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }
Demikian pula, ketika tombol 2 ditekan, nilai 2 dikirim melalui port serial dan ketika tombol 3 ditekan nilai 3 dikirim melalui port serial.
lain jika (button2val == HIGH) { int num2 = 2; Serial1.println (num2); } lain jika (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }
Dan ketika tidak ada tombol yang ditekan, nilai 0 dikirim ke Arduino Uno.
lain { int num = 0; Serial1.println (num); }
Ini menyelesaikan pemrograman untuk mengkonfigurasi STM32 sebagai Master.
Arduino UNO sebagai SlaveDi sisi Slave, Arduino UNO menerima nilai integer yang dikirim dari Master STM32F103C8 yang tersedia di port Serial Hardware Arduino UNO (P0, 1) di mana modul RS-485 terhubung.
Cukup baca nilai dan simpan dalam variabel. Bergantung pada nilai yang diterima, LED yang sesuai dinyalakan atau dimatikan yang terhubung ke Arduino GPIO.
Untuk menerima nilai dari Master cukup buat pin DE & RE modul RS-485 LOW. Jadi pin-2 (enablePin) dari Arduino UNO dibuat LOW.
digitalWrite (enablePin, LOW);
Sekarang baca saja data integer yang tersedia di Serial Port dan simpan dalam sebuah variabel.
int menerima = Serial.parseInt ();
Bergantung pada nilai yaitu (0, 1, 2, 3) yang diterima, salah satu dari tiga LED yang sesuai dinyalakan.
if (terima == 1) // Bergantung pada nilai yang diterima, LED yang sesuai dinyalakan atau dimatikan { digitalWrite (ledpin1, HIGH); } lain jika (terima == 2) { digitalWrite (ledpin2, HIGH); } lain jika (terima == 3) { digitalWrite (ledpin3, HIGH); } lain { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
Ini menyelesaikan pemrograman dan mengkonfigurasi Arduino UNO sebagai Slave. Juga ini menyelesaikan konfigurasi lengkap untuk Arduino UNO dan STM32. Video yang berfungsi dan semua kode dilampirkan di akhir tutorial ini.
Menguji komunikasi RS485 antara STM32F103C8 dan Arduino UNO:
1. Saat tombol Push-1 yang terhubung ke Master STM32 ditekan, LED 1 Menyala terhubung ke Slave Arduino.
2. Saat tombol Push-2 yang terhubung ke Master STM32 ditekan, LED 2 Menyala terhubung ke Slave Arduino.
3. Demikian pula saat Push button-3 ditekan, LED 3 Menyala terhubung ke Slave Arduino.
Ini menyelesaikan komunikasi serial RS485 antara STM32F103C8 dan Arduino UNO. Papan Arduino UNO dan STM32 adalah papan yang banyak digunakan untuk pembuatan prototipe cepat dan kami telah melakukan banyak proyek berguna pada papan ini. Jika Anda menemukan keraguan atau memiliki saran untuk kami, tulis dan komentar di bawah.