RS-485 (yeni adıyla TIA/EIA-485), endüstriyel ortamlarda ve gürültülü sahalarda uzun mesafeli, yüksek hızlı ve çok noktaya (multi-drop) veri iletimi sağlamak için tasarlanmış fiziksel katman (Physical Layer) haberleşme standardıdır. I2C ve SPI gibi kart içi (on-board) protokollerin aksine, metrelere hatta kilometrelere varan mesafelerde sorunsuz veri aktarımı sunar.

RS-485’in endüstriyel gürültülere karşı bu kadar dayanıklı olmasının ana sebebi Diferansiyel (Dengeli) Sinyalleşme tekniğidir. Sistem tek bir sinyal hattındaki voltaja bakmak yerine iki hat arasındaki voltaj farkını ölçer:

Vdiff = VA - VBVA - VB > +200 mV (A hattı B'den daha pozitif)VA - VB < -200 mV (B hattı A'dan daha pozitif)Uzun iletim hatlarında sinyal yansımalarını (reflection) engellemek için veriyolunun en başında ve en sonunda yer alan cihazlara 120 Ω Sonlandırma Direnci bağlanmalıdır:
| Parametre | Half-Duplex (Yarı Çift Yönlü) | Full-Duplex (Tam Çift Yönlü) |
|---|---|---|
| Kablo Sayısı | 2 Tel (A, B) + GND | 4 Tel (TX+, TX-, RX+, RX-) + GND |
| Veri İletim Yapısı | Aynı anda sadece veri gönderilir veya alınır. | Aynı anda eş zamanlı veri gönderme ve alma yapılır. |
| Yön Kontrolü (DE/RE) | Zorunlu. Mikrokontrolcüden bir GPIO pini ile kontrol edilir. | Gerekmez, sürücü ve alıcı hatları ayrılmıştır. |
| Kullanım Alanı | Modbus RTU, Profibus, genel endüstriyel saha ağı. | Noktadan noktaya yüksek hızlı sistemler. |
Mikrokontrolcülerin UART (TTL) sinyallerini RS-485 diferansiyel seviyelerine dönüştürmek için yaygın olarak MAX485 gibi transkripsiyon çipleri kullanılır. Çip üzerinde yön denetimi sağlayan iki kritik pin bulunur:
#include <Arduino.h>
// MAX485 Yön Kontrol Pini ve UART Pin Tanımlamaları
#define RS485_FC_PIN 4 // DE & RE birleşik pini
#define RX2_PIN 16 // ESP32 UART2 RX Pini
#define TX2_PIN 17 // ESP32 UART2 TX Pini
void setup() {
Serial.begin(115200); // PC Seri Monitör
// Yön kontrol pinini çıkış olarak ayarla
pinMode(RS485_FC_PIN, OUTPUT);
digitalWrite(RS485_FC_PIN, LOW); // Varsayılan olarak Dinleme (Alıcı) Modu
// HardwareSerial2 Başlat (9600 Baudrate, 8N1)
Serial2.begin(9600, SERIAL_8N1, RX2_PIN, TX2_PIN);
Serial.println("RS-485 Düğümü Başlatıldı.");
}
// RS-485 Üzerinden Veri Gönderme Fonksiyonu
void rs485VeriGonder(String mesaj) {
digitalWrite(RS485_FC_PIN, HIGH); // Sürücüyü Aktif Et (Gönderim Modu)
delayMicroseconds(10); // Sinyal oturması için kısa bekleme
Serial2.print(mesaj);
Serial2.flush(); // Tüm verinin seri tampondan çıkmasını bekle
digitalWrite(RS485_FC_PIN, LOW); // Alıcı Moduna Geri Dön
}
void loop() {
// 1. Veri Dinleme Bloğu
if (Serial2.available()) {
String gelenMesaj = Serial2.readStringUntil('\n');
Serial.print("RS-485'ten Gelen Veri: ");
Serial.println(gelenMesaj);
}
// 2. Periyodik Veri Gönderme Örneği (Her 3 saniyede bir)
static unsigned long sonGonderim = 0;
if (millis() - sonGonderim > 3000) {
sonGonderim = millis();
rs485VeriGonder("PING_REQ_NODE_1\n");
Serial.println("RS-485 Paket Gönderildi.");
}
}
| Parametre | I2C | SPI | RS-485 |
|---|---|---|---|
| Maksimum Mesafe | ~1 - 2 Metre | < 1 Metre (PCB İçi) | 1200 Metre |
| Veri Hızı | 100 kHz - 3.4 MHz | 10 MHz - 80 MHz+ | 100 kbit/s - 35 Mbit/s |
| Sinyal Tipi | Tek Uçlu (Open-Drain) | Tek Uçlu (Push-Pull) | Diferansiyel (A / B) |
| Maksimum Cihaz Sayısı | 127 (7-bit adres) | CS Pin Sayısı Kadar | Standard göre 32 (Yüksek empedans transiverlar ile 256+) |
| Gürültü Bağışıklığı | Düşük | Düşük | Çok Yüksek (Endüstriyel Seviye) |
Henüz yorum yapılmamış. İlk yorumu siz yapın!