- Komunikasi Bersiri RS-485
- Komponen Diperlukan
- Rajah Litar
- Pengaturcaraan STM32F103C8 & Arduino UNO untuk Komunikasi Bersiri RS485
- Menguji komunikasi RS485 antara STM32F103C8 dan Arduino UNO:
Protokol komunikasi adalah bahagian tidak terpisahkan dari elektronik digital dan sistem tertanam. Di mana sahaja terdapat pelbagai mikrokontroler dan periferal, protokol komunikasi harus digunakan untuk menukar sekumpulan data. Terdapat banyak jenis protokol komunikasi bersiri yang tersedia. RS485 adalah salah satu protokol komunikasi bersiri dan digunakan dalam projek industri dan mesin berat.
Kami mengetahui mengenai Komunikasi Bersiri RS485 antara Arduino Uno dan Arduino Nano dalam tutorial sebelumnya . Tutorial ini adalah mengenai penggunaan komunikasi Serial RS-485 dalam Mikrokontroler STM32F103C8. Sekiranya anda baru menggunakan STM32 Microcontroller, mulailah dengan Bermula dengan STM32 menggunakan Arduino IDE: Blinking LED dan periksa semua projek STM32 di sini.
Dalam tutorial ini Master STM32F103C8 mempunyai tiga butang tekan yang digunakan untuk mengawal status tiga LED yang ada di Slave Arduino Uno dengan menggunakan komunikasi Serial RS-485.
Mari kita mulakan dengan memahami cara komunikasi Serial RS-485.
Komunikasi Bersiri RS-485
RS-485 adalah protokol komunikasi bersiri tak segerak yang tidak memerlukan jam. Ia menggunakan teknik yang disebut isyarat pembezaan untuk memindahkan data binari dari satu peranti ke peranti lain.
Jadi apakah Kaedah Pemindahan Isyarat Berbeza 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 komunikasi Full-Duplex ketika menggunakan empat wayar.
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 hingga maksimum 1200 meter.
- Kelebihan utama RS-485 berbanding RS-232 adalah hamba berganda dengan Master tunggal sementara RS-232 hanya menyokong hamba tunggal.
- Boleh mempunyai maksimum 32 peranti yang disambungkan ke protokol RS-485.
- Kelebihan lain dari RS-485 adalah kebal terhadap bunyi kerana mereka menggunakan kaedah isyarat pembezaan untuk memindahkan.
- RS-485 lebih pantas berbanding protokol I2C.
Modul RS-485 dapat dihubungkan ke mana-mana mikrokontroler yang mempunyai port bersiri. Untuk menggunakan modul RS-485 dengan mikrokontroler, modul yang disebut 5V MAX485 TTL hingga RS485 yang didasarkan pada Maxim MAX485 IC diperlukan kerana ia membolehkan komunikasi bersiri pada jarak jauh 1200 meter dan dua arah dan separuh dupleks mempunyai kadar pemindahan data 2.5 Mbps. Modul ini memerlukan voltan 5V.
Penerangan Pin RS-485:
Nama Pin |
Penerangan |
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 RS485 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
Menggunakan modul ini dengan STM32F103C8 dan Arduino UNO sangat mudah. Port siri perkakasan mikrokontroler digunakan. Pin siri perkakasan dalam STM32 dan arduino UNO diberikan di bawah.
- Dalam STM32F103C8: Pin PA9 (TX) & PA10 (RX)
- Di Arduino Uno: Pin 0 (RX) & 1 (TX)
Pengaturcaraan juga mudah hanya menggunakan Serial.print () untuk menulis ke RS-485 dan Serial. Baca () untuk membaca dari RS-485 dan pin DE & RE dari RS-485 dibuat RENDAH untuk menerima data dan dibuat TINGGI hingga tulis data ke bas RS-485.
Komponen Diperlukan
- STM32F103C8
- Arduino UNO
- Modul Penukar MAX485 TTL ke RS485 - (2)
- Potensiometer 10K
- Butang Tekan - 3
- LED - 3
- Perintang
- Papan roti
- Wayar Penyambung
Rajah Litar
Dalam tutorial ini STM32F103C8 digunakan sebagai Master dengan satu modul RS-485 dan Arduino UNO digunakan sebagai Slave dengan modul RS-485 yang lain.
Sambungan Litar antara RS-485 dan STM32F103C8 (Master):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE RE |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
A |
Kepada A dari Slave RS-485 |
B |
Ke B Slave RS-485 |
STM32F103C8 dengan butang Tiga Tekan:
Tiga butang Push dengan tiga Pull Down Resistor 10k disambungkan ke pin PA0, PA1, PA2 dari STM32F103C8.
Sambungan Litar antara RS-485 dan Arduino UNO (Slave):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
2 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
Kepada A Master RS-485 |
B |
Kepada B Master RS-485 |
Tiga LED digunakan di mana Anod LED dengan perintang 330 ohm disambungkan ke pin 4, 7, 8 Arduino UNO dan Cathode LED disambungkan ke GND.
Pengaturcaraan STM32F103C8 & Arduino UNO untuk Komunikasi Bersiri RS485
Arduino IDE digunakan untuk pengembangan dan pengaturcaraan kedua papan iaitu STM32 dan Arduino UNO. Tetapi pastikan anda telah memilih PORT yang sesuai dari Tools-> Port and Board dari Tools-> Board. Sekiranya anda menemui kesukaran atau keraguan, rujuk saja Programming STM32 anda di ARDUINO IDE. Pengaturcaraan untuk tutorial ini terdiri daripada Dua bahagian satu untuk STM32F103C8 (Master) dan yang lain untuk Arduino UNO (Slave). Kedua-dua kod tersebut akan dijelaskan satu persatu di bawah.
STM32F103C8 sebagai MasterDi sisi Master, status Butang Tekan dibaca dan kemudian dituliskan nilai-nilai tersebut secara bersiri ke bas RS-485 melalui Pelabuhan Serial Perkakasan 1 (PA9, PA10) STM32F103C8. Tidak ada perpustakaan luaran yang diperlukan seperti sekarang. Arduino mempunyai semua perpustakaan yang diperlukan untuk komunikasi bersiri.
Mulakan Komunikasi Bersiri menggunakan Hard Serial Pins (PA9, PA10) pada buadrate 9600.
Bersiri1.begin (9600);
Baca status butang tekan pada pin PA0, PA1, PA2 dari STM32F103C8 dan simpan dalam butang1val, button2val, button3val yang berubah-ubah. Nilainya TINGGI jika butang ditekan dan RENDAH apabila tidak ditekan.
int button1val = digitalRead (butang1); int button2val = digitalRead (butang2); int button3val = digitalRead (butang3);
Sebelum mengirim nilai butang ke port bersiri, pin DE & RE RS-485 harus TINGGI yang disambungkan ke pin PA3 dari STM32F103C8 (Untuk membuat pin PA3 TINGGI):
digitalWrite (allowPin, TINGGI);
Seterusnya untuk memasukkan nilai-nilai tersebut di Serial Port dan mengirim nilai bergantung pada butang tekan mana yang ditekan gunakan jika pernyataan lain dan hantar nilai yang sesuai ketika butang ditekan.
Sekiranya butang pertama ditekan maka keadaan sesuai dan nilai '1' dihantar ke port bersiri tempat Arduino UNO disambungkan.
jika (button1val == TINGGI) { int num1 = 1; Bersiri1.println (num1); }
Begitu juga, apabila butang 2 ditekan, nilai 2 dihantar melalui port bersiri dan ketika butang 3 ditekan, nilai 3 dihantar melalui port bersiri.
lain jika (button2val == TINGGI) { int num2 = 2; Bersiri1.println (num2); } lain jika (button3val == TINGGI) { int num3 = 3; Bersiri1.println (num3); }
Dan apabila tiada butang ditekan, nilai 0 akan dihantar ke Arduino Uno.
lain { int num = 0; Bersiri1.println (bilangan); }
Ini menyelesaikan pengaturcaraan untuk mengkonfigurasi STM32 sebagai Master.
Arduino UNO sebagai BudakDi sisi Slave, Arduino UNO menerima nilai integer yang dihantar dari Master STM32F103C8 yang terdapat di port Hardware Serial Arduino UNO (P0, 1) di mana modul RS-485 disambungkan.
Cukup baca nilai dan simpan dalam pemboleh ubah. Bergantung pada nilai yang diterima, LED yang sesuai dihidupkan atau dimatikan yang disambungkan ke Arduino GPIO.
Untuk menerima nilai dari Master hanya buat pin DE & RE modul RS-485 RENDAH. Jadi pin-2 (enablePin) dari Arduino UNO dibuat RENDAH.
digitalWrite (allowPin, LOW);
Sekarang hanya baca data integer yang terdapat di Serial Port dan simpan dalam pemboleh ubah.
int menerima = Serial.parseInt ();
Bergantung pada nilai iaitu (0, 1, 2, 3) yang diterima, salah satu daripada tiga LED dihidupkan.
jika (terima == 1) // Bergantung pada Nilai yang diterima, LED yang sesuai dihidupkan atau dimatikan { digitalWrite (ledpin1, TINGGI); } lain jika (terima == 2) { digitalWrite (ledpin2, TINGGI); } lain jika (terima == 3) { digitalWrite (ledpin3, TINGGI); } lain { digitalWrite (ledpin1, RENDAH); digitalWrite (ledpin2, RENDAH); digitalWrite (ledpin3, RENDAH); }
Ini selesai pengaturcaraan dan konfigurasi Arduino UNO sebagai Slave. Ini juga menyelesaikan konfigurasi lengkap untuk Arduino UNO dan STM32. Video yang berfungsi dan semua kod dilampirkan pada akhir tutorial ini.
Menguji komunikasi RS485 antara STM32F103C8 dan Arduino UNO:
1. Apabila butang Push-1, yang disambungkan ke Master STM32, ditekan LED 1 Turn ON yang disambungkan ke Slave Arduino.
2. Apabila butang Push-2, yang disambungkan ke Master STM32, ditekan LED 2 Turn ON yang disambungkan ke Slave Arduino.
3. Begitu juga ketika butang Push-3 ditekan LED 3 Turn ON yang disambungkan ke Slave Arduino.
Ini menyelesaikan komunikasi bersiri RS485 antara STM32F103C8 dan Arduino UNO. Papan Arduino UNO dan STM32 adalah papan yang digunakan secara meluas untuk membuat prototaip cepat dan kami telah melakukan banyak projek berguna pada papan ini. Sekiranya anda mendapat keraguan atau ada cadangan untuk kami, tulis dan komen di bawah.