RS485 Slave Bağlantı şekli

Başlatan Mucit23, 04 Şubat 2021, 19:07:12

Mucit23

Alıntı yapılan: OG - 26 Mart 2021, 21:09:45SN75176'yı binlerce kullanıyorum, üstelik hemen hepsi 250Kb hızında, hiç bir sorun yok.
markalı olmasına dikkat edin (yani aynı zamanda güvenilir yerden alın demektir, ben Özdisan'dan alıyorum, smd kullanıyorum)
Data hattının dolaştığı yerler önemli, ben hiç kullanmadım,
mini sparklar (buna yıldırım diyorlar ama aslı mini deşarjlar) içeren ortam ise kesin kullanın

TVS'yi dirençsiz bağlayanlar oluyor, yanlış (tam doğru değil),
Ayrıca Data hattı arasına tek TVS bağlayanlar oluyor, bu da yanlış
Sayfa 9 daki gibi olmalı
Kural şu;
uzanan hattın ucu boş kalmayacak,
üniteler uzanan bir hat ile bağlanıyor, bu durumda ünitelerde sonlandırma direnci olacak
ayrıca şekil 2 de hattın uzanan boş ucu görünüyor, her hattın ucu direnç ile kapanacak
Bu yapıyı ben de kullanıyorum, Sayfa 7, Şekil 9
ne faydası var derseniz,
hat kopuksa, sistemdeki mcu yazılımı da ciddi önlemler alınmadıysa, data alışta usart interrupt da kullanılıyorsa,
- usart durduk yerde kesme atar
- usart frame error, overrun error verir, bunun kontrollerini yapmadıysanız uğraştırır durur

Şekil 9'daki dirençlerin hangisi + ya, hangisi gnd ye bağlı olduğuna dikkat edin, önemli.
bu dirençler için 120R falan yazdıklarına bakmayın ben 10K kullanıyorum ve hatta daha fazla cihaz bağlanabiliyor
cihaz sayısı az ise 120R daha iyidir, hat yansımalarına daha iyi engel olur.
ek,
75175'nın RX ucu (pin 1) yani mcu'ya rx sağlayan ucunu 1K~5K gibi direnç ile Vcc ye pullup yapın, çok rahat ettirir.

MAX485 kullanmaya gerek yok, daha pahalı,
sistemde sorun var ise 75176 kullanıldığından değildir, sorun çıkabilecek hususları belirttim, MAX485'de de aynı sorunlar yaşanır.


Abi bu bilgiler çok değerli tam olarak bunları öğrenmek istiyordum. Çok Teşekkür ederim. Ben dataları usart kesmesi ile alıyordum. Bir çok kez frame error gibi hatalarla karşılaşıyordum. Master cihazın rX pinini logic analyser ile incelediğimde Master Hatta veri basarken RE ve DE pinini 1 yaptığında RO pini lojik 0 oluyordu. Normalde High Z konumuna geçmesi lazım. Eğer MCU RX kanalını kendi içerisinde pull up yapmadıysa Master TX modun da RO çıkışının lojik sıfıra inmesini açıklamış olurum.

Dediğiniz önlemleri alacağım. Daha önceki yaptığım uygulamalarda çok hata yapmışım. Sistem birkaç node ile çalışsa bile sürekli hata alıyordum.

Termination Resistor olayını şekil 2 için konuşursak bağlantı noktaları ile slave aygıtlar arasındaki mesafenin uzaması durumunda her bir slave aygıta termination resistor bağlanması gerekir mi?

OG

Alıntı YapTermination Resistor olayını şekil 2 için konuşursak bağlantı noktaları ile slave aygıtlar arasındaki mesafenin uzaması durumunda her bir slave aygıta termination resistor bağlanması gerekir mi?

bir an cihazları unut, yok say,
data hat döşenmiş (ihtiyaca gerekecek şekilde)
hatta cihaz mihaz yok
bütün uzanan uçlar kapatılacak,
bu durum, transmisyon hatlarının sağlıklı çalışması için ihtiyacı, yani gerekli bir empedans ile kapatmak.






Şimdi data hat uçlarına cihazları bağlıyoruz,
(hangisi hangi uca?
MASTER hangi uçta, SLAVE'ler hangi uçta olacak diye bir kural yok,
her uçta her biri olabilir, MASTER haberleşme trafiğini yöneten unite demektir)

önceden bağladığımız o dirençler, taktığımız cihazların içinde de varsa ( ? )
hat ucuna taktığımız önceki dirence gerek kalmıyor, söküyoruz,
sökmesek?
sökmesek de çalışır, gereksiz ve hat için fazladan yük,

unutmayalım,
bütün hattın toplam elektriksel yükünü,
o an TX olmuş bir adet 75176 sürer, zavallı  :P  .
(aynı anda yalnızca 1 ünite TX olmalıdır, rs485 halfduplex yapıyı hatırlayalım)

TX olan 75176 datayı hatta 5V genlikte sürer,
veya diğer malzemelerden örnek 3V3 olsun,
farketmez 2V sürsün, 1V olsun


hat elektriksel yükü arttıkça, unitelere ulaşan datanın voltajı düşer, düşer, düşer...
yeter ki, RX durumundaki 75176'lar datayı algılayabilcek kadar voltajı görsün.

bu voltaj değeri, 75176 için 200mV dur,
yani,
200mV'dan alta inmedikçe, RS485 hattan gelen sinyali doğru algılar ve
mcu'ya TTL seviyesinde veririm
demektir

bu 200mV parametresi için önüne +- koyarlar,
anlamı pp 400mV demek DEĞİLDİR,
(data hattında sinyal bir öyle bir böyle iken demek)






FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Mucit23

Abi Teşekkürler.

Yapacağım uygulamada ve bundan sonraki uygulamalarda TVS diyot mutlaka koymak lazım.. Örnek Uygulamalarda SM712 kullanıldığını gördüm.

A ucunu 10K ile 5V'a çekip B ucunuda 10K gibi bir direnç ile GND ye çekmek gerekiyor düzenli bir haberleşme için. Örnek uygulamalarda daha düşük dirençler kullanıldığını gördüm. Düşük direnç kullanımı hattın empedansını çok düşüreceği için bağlanabilecek node sayısını düşürüyor sanırım. En önemlisi RO çıkışını harici olarak pull up yapmak bence. Çünkü SN75176 TX modunda RO çıkışını High Z yapıyor. Bu durumdayken RO çıkışı lojik 1 de kalmalı.

Gerekli düzenlemeleri yapıyorum.

OG

Alıntı YapA ucunu 10K ile 5V'a çekip B ucunuda 10K gibi bir direnç ile GND ye çekmek gerekiyor düzenli bir haberleşme için.

alttaki hali ile binlerce cihaz 250Kb'de şıkır şıkır çalışıyor,
hız 250Kb olduğundan data kablosu o hıza göre, CAT5 veya bazı özel data kabloları ile, tek özen gösterilen husus bu.

bahsettiğim hususlara dikkat edilirse
ve üniteler gereksiz konuşmaya kalkmazsa (bu hataya yazılımda atlanan hususlar sebep olur)
RS485'in ne şahane bir icad  :P  olduğunu keşfedeceksin.

mesela 9,6Kb de,
2 zil telini uzat gitsin, yüzlerce metreye binlerce cihaza
nereden giderse gitsin, gitsin de,
data zayıfladı mı, kes kabloyu, at araya çift yönlü tekrarlayıcıyı (3 kuruşluk şey), bitti.



Vcc 
-
10K
-     D+ ucu, 
10K   terminasyon direnci
-     D- ucu
10K
-
GND

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Cemre.

Çift yönlü tekrarlayıcı kaç kuruşluk bir şey hocam? Advantech'den almıştık Repeater pek de ucuz değildi :D

OG

Alıntı yapılan: Cemre. - 29 Mart 2021, 11:40:23Çift yönlü tekrarlayıcı kaç kuruşluk bir şey hocam? Advantech'den almıştık Repeater pek de ucuz değildi :D
kendiniz çok ucuza yapabilirsiniz, çok basit bir şey.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

kimlenbu

SN75176 tavsiye etmiyorum. Mouser'dan aldım, patates olmadığına eminim ama 4800baud sürekli iletişim olduğunda el değmeyecek kadar ısınıyorlar.  Bunun yerine SN65HVD485'e geçtim, tıkır tıkır ısınmadan çalışıyor.

Ayrıca @OG nin belirttiği failsafe diye tabir edilen dirençleri mutlaka ekleyin. A hattı 100k ile VCC'ye, B hattı 100K ile GND'ye. Eklemezseniz cihaz girişlerine herhangi bir data/kablo bağlanmadığında parazitleri sinyal olarak algılıyor ve aynen bahsedildiği gibi usart kesmelerinin tetiklenmesine sebep oluyor. Dijital kapılarla data akışı var mı yok mu kontrol etmeye çalışırsanız da bu parazitler yüzünden yedek girişe otomatik geçiş yapması beklenen bir cihaz hatta verinin kesildiğini algılayamıyor ve sisteme bozuk veri basıyor.

OG

Alıntı YapSN75176 tavsiye etmiyorum. Mouser'dan aldım, patates olmadığına eminim ama 4800baud sürekli iletişim olduğunda el değmeyecek kadar ısınıyorlar
Tatlı bir ısı olur, ısı sebebiyle bozulan 75176 görmedim, SN65HVD485  kullanmadığımdan kıyas yapamıyorum.

Fiyatları çok farklı
https://ozdisan.com/entegre-devreler-ics/interface-entegreleri/driver-receiver-ve-transceiver-entegreleri/SN75176BDR
https://ozdisan.com/entegre-devreler-ics/interface-entegreleri/driver-receiver-ve-transceiver-entegreleri/SN65HVD485EDR

birde
65 serisi -40°C~+85°C
75 ise   0°C~+70°C

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Okan AKÇA

Sp485 daha uygun fiyatlı sorunsuz yıllardır kullandığım ürün.

tunayk

75176 ile yıllardır sorun yaşamadık. Ancak yeni tasarımlarda naçizane tavsiyem, ISO3082, 3088 gibi izole olanlarla çalışmak ve pekçok sorunu baştan yoketmek.

OG

Alıntı yapılan: tunayk - 29 Mart 2021, 23:26:23Ancak yeni tasarımlarda naçizane tavsiyem, ISO3082, 3088 gibi izole olanlarla çalışmak ve pekçok sorunu baştan yoketmek.
Marine uygulamaları ve askeri işlerde kullanıyoruz, isole mecbur.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Mucit23

RS485 Terminasyon direnci için bir sorum olacak.

120R tavsiye ediliyor ama hattın başına ve sonuna 120R direnç taktığımda haberleşmenin büyük bir oranda bozulduğunu görüyorum. Şuanda 5 metre kablo içinde yaklaşık 20 tane Node Var. Geliştirme ortamında cihazları test ediyorum. 120R dirençleri sökersem hiç bir sorun olmadan sorunsuz haberleşiyorum. Bu 120R olayını anlamadım. Her yerde 120R deniyor ama bence 120R hattın empedansını çok düşürüyor. SN75176'ların çıkış akımı yeterli gelmiyor. Yüksek mesafede(>100m) nasıl davranır henüz test etmedim.

Ek olarak yaptığım sistemde 4-5 byte'dan oluşan basit seri paketler gönderiyorum. Veri formatını kendim oluşturdum. Modbus gibi standart bir algoritma yok. Ek olarak CRC hesaplaması yaptırmak paket sonuna onu eklemek istiyorum. CRC için önereceğiniz bir algoritma var mı?

OG

#27
120R'ye sahip 20 adet node ile
5 metre kabloda
haberleşmede bozulma oluyorsa
başka sorun/sorunlar var
bu KESİN.

Sorunu aramaya donanımdan başlamak daha isabetli
genelde dalgınlıkla yapılmış basit hatalar gibi
pcb'deki bir çizim hatası, eleman/direnç değeri hatası vs

DATA- hattının kopukluğu
RS485 sistemlerinin testleri yapılırken
node'lar için aynı güç kaynağı kullanılıyor ise
DATA -  (data B, soğuk uç) hattındaki var olan kopukluk
veya bu hattın cihaz içindeki var olan bir bağlantı hatası/ değer hatası
üniteler aynı güç kaynağı ile beslenirken
var olan hata algılanamayabilir,
bu durum, hat'ta yüklü ünite sayısına göre farklılık gösterebilir
yani,
testlerde aynı güç kaynağını kullanmak, DATA -  hat'tındaki var olan kopuklukların görülmesini engelleyebilir


- - - - - -

Burası (buradan altta yazdıklarım) konuya kısa bir toparlama
(RS485 kullanımı için)

485'in dirençleri (data hattına yani dışarıya bakan)

Vcc
-
10K
-    D+ ucu,
10K  terminasyon direnci
-    D- ucu
10K
-
GND


485'in USART'a RX out pinine pullup direnci
75176 için pin 1 den pullup
çook işe yarar, önceden anlatıldı,
gereksiz usart kesmelerine/frame hatalarına  engel olur


Basit haberleşme formatı

Öncelikle;
alıcı tarafın gelen byte sonrası bazı kontroller yapması gerekiyorsa
gönderen tarafın, gönderdiği byte sonrası, gerekli küçük bir süre bekleme vermesi iyidir
işlemcinin hız kaabiliyetine ve datanın yavaşlığına göre bu süre gerekmiyebilir de

eğer vermek gerekiyorsa pratik bir bilgi,
delay'lar ile uğraşmaktansa
USART'ın TX ayarı 8N2 olarak ayarlanır, fazladan olan son bit H olmalıdır
USART'ın RX ayarı 8N1 olarak ayarlanır, kalan o 1 bitllik süre çok iş için yeterlidir


(buradan aşağısı CRC'ye dahil byte'lar, yani crc hesabına girecekler)

* 3 byte kafa datası (ilk beklenen bunlar, peşisıra bunlar gelmez ise gerisini dinleme, baştan al)
rastgele seçilmiş 3 byte dır, (3 adet zorunluluk değil, arttırılabilir, azaltılmaması önerilir)
bitleri arka arkaya çok değişen değerler olursa daha iyi
mesela 10101010 , 01010101, 11001101  gibi (decimal karşılığı 170, 85, 205) yalnızca örnektir 


* Muhatabın ID si
(ID = x ise gönderi hapsine,
x=0 değeri crc hesaplamalarında güvenli olmayabilir,
ek güvenlik için 2 kere ID,
birbirinin invertü değerler olarak iki kere göndermek
gibi çözümler gerekebilir)

diğer husus
ID, node sayısına göre 1 byte dan fazla da olabilir



* Esas bilgi
şimdi esas bilgi,
(bu bilgi her gönderide sabit adette değil ise,
hemen önüne, kaç adet bilgi olacak eki (alışta işe yarar)

kaç byte (bilgi byte sayısı)
bilgi
bilgi
bilgi
.
.
bilgi


* CRC (datayı alan taraf bu değer ile doğrulama yapar)
son bilgiye kadar byte'ların CRC olarak hesaplanmış değeri

CRC işlemi çok çeşitli yöntemlerle yapılabilir, yöntemimizi kendimiz üretebiliriz
En basiti bütün byte'ların exorlanması ve 8 bit (1 byte) bir değer elde edilmesi,

Güvenliğin önemli olduğu işlerde
daha sağlam ve en az 16 bitlik CRC yapıları kullanılmalıdır
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Mucit23

Abi teşekkürler mesajların gerçekten çok açıklayıcı.

Şuanki sistemde bütün cihazlar birbirine kaskat bağlı. Sistemi baya değiştirdim.

Master >>>> Node1 >>> Node2 >>> Node3 >>>> Node4 >>>> ... Şeklinde gidiyor. Kartlar üzerine 2 Tane RJ9 4P4C konnektör var. V+, RS485A, RS485B ve GND bu hat üzerinden tamamlanıyor. Master cihazda MCU RX ve TX pinine Lojik analyser bağlayıp ordan hattı izliyorum. Kim ne gönderiyor kim ne cevap veriyor görülüyor. Bozuk data olursa zaten hemen yakalıyorum.

Her bir cihaza 120R bağlamadım. Sadece MAster'da ve Hattın en sonuna bağladım. Sadece Master'da varsa sorun yok. Ama Hem master'da hemde hattın sonunda varsa problem oluyor. Haberleşme çoğunlukla bozuluyor. Muhtemelen 120R dirençler kısa mesafede hattın empedansını çok düşürüyor. Şimdilik takmayacağım.

Ama abi dediğin gibi RX pinini 10K ile pull-up yapmam çok faydalı oldu. Transmit anında artık RX pini 0'a düşüp framing uart'ın kafasını karıştırmıyor.

Komut yapısını şuanda geliştiriyorum hala. Şuanlık 4-5 byte'dan oluşan sabit bir frame yapısı kullanıyorum.

OG

#29
başka hata/hatalar olduğunu zannediyorum,

terminatör (ve beraberindeki pullup, pulldown)
dirençlerinden vazgeçmesen iyi olur.

Alıntı YapMaster >>>> Node1 >>> Node2 >>> Node3 >>>> Node4 >>>> ... Şeklinde gidiyor. Kartlar üzerine 2 Tane RJ9 4P4C konnektör var. V+, RS485A, RS485B ve GND bu hat üzerinden tamamlanıyor.
Şu yapı iyileştirilmiş (arttırılmış) C'ler gerektirir,
yani,
besleme hatlarında daha fazla elektrolitik kapasite ve 100nF (veya 220nF) değerler...

beslem hatları kontaklarla (pin) girdi çıktıyı fazla sevmez, onu desteklemek için.

(üstteki mesaja bazı eklemeler yaptım)
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.