- UART ve RS485 İletişimi arasındaki fark
- Gerekli Bileşenler
- Uzun Mesafe Kablolu İletişim için Devre Şeması
- MAX485 UART-RS485 Dönüştürücü Modülü
- Ethernet CAT-6E Kablosu
- Arduino Kodu Açıklaması
- Sonuç
Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430 gibi Mikrodenetleyici Geliştirme Kartlarını, sensör ile kart arasındaki mesafenin çoğunun maksimumda birkaç santimetreden fazla olmadığı küçük projelerimizde uzun süredir kullanıyoruz. Bu mesafelerde, farklı sensör modülleri, röleler, aktüatörler ve kontrolörler arasındaki iletişim, ortamdaki sinyal bozulması ve içine sızan Elektriksel sesler konusunda endişelenmemize gerek kalmadan basit atlama telleri üzerinden kolayca yapılabilir. Ancak, bu geliştirme kartlarıyla 10 ila 15 metreden daha uzun bir mesafede bir kontrol sistemi oluşturuyorsanız, gürültü ve sinyal gücünü dikkate almalısınız çünkü sisteminizin güvenilir bir şekilde çalışmasını istiyorsanız, o zaman kaybetmeyi göze alamazsınız. aktarırken veri.
Arduino ile kolayca uygulanabilen I2C ve SPI gibi birçok farklı seri iletişim protokolü vardır ve bugün, verileri aktarmak için yüksek gürültülü endüstriyel ortamlarda çok yaygın olarak kullanılan RS485 adlı başka bir en yaygın kullanılan protokole bakacağız. uzun mesafe. Bu eğitimde, RS485 iletişim protokolünü ve bunu yanımızdaki iki Arduino Nano ile nasıl uygulayacağımızı ve MAX485 RS485 - UART dönüştürme Modülünü nasıl kullanacağımızı öğreneceğiz. Daha önce Arduino ile MAX485 haberleşmesini ve ayrıca Raspberry pi ile MAX485 haberleşmesini gerçekleştirmiştik, ilgileniyorsanız bunları da inceleyebilirsiniz.
UART ve RS485 İletişimi arasındaki fark
Piyasada Arduino, Raspberry Pi ile yaygın olarak kullanılan düşük maliyetli sensörlerin ve GPS, Bluetooth, RFID, ESP8266 gibi diğer modüllerin çoğu, sadece 2 telli TX (Verici) ve RX gerektirdiği için UART TTL tabanlı iletişim kullanır. (Alıcı). Standart bir İletişim protokolü değildir, ancak diğer çevre birimleriyle seri verileri gönderip alabileceğiniz fiziksel bir devredir. Yalnızca seri olarak veri iletebilir / alabilir, bu nedenle önce paralel verileri seri verilere dönüştürür ve ardından verileri iletir.
UART bir Asenkron iletim cihazıdır, bu nedenle iki cihaz arasında verileri senkronize etmek için saat sinyali yoktur, bunun yerine aktarılan verilerin uç noktalarını işaretlemek için sırasıyla her veri paketinin başında ve sonunda başlangıç ve durdurma bitlerini kullanır. UART ile iletilen veriler paketler halinde düzenlenir. Her paket 1 başlangıç biti, 5 ila 9 veri biti (UART'a bağlı olarak), isteğe bağlı bir eşlik biti ve 1 veya 2 durdurma biti içerir. Çok iyi belgelenmiştir ve yaygın olarak kullanılmaktadır ve ayrıca hata kontrolüne izin veren bir eşlik biti vardır. Ancak, birden çok slave ve birden fazla master'ı destekleyemediği için bazı sınırlamalar vardır ve maksimum veri çerçevesi 9 bit ile sınırlıdır. Veri aktarımı için hem Master hem de Slave'in baud hızları birbirinin% 10'u arasında olmalıdır. Aşağıda, bir karakterin bir UART veri hattı üzerinden nasıl bir verici olduğuna dair bir örnek gösterilmektedir. Sinyal Yüksek ve Düşükler GND seviyesine göre ölçülür, bu nedenle GND seviyesinin kaydırılması veri aktarımı üzerinde feci bir etkiye sahip olacaktır.
Öte yandan, RS485, uzun mesafelerde ve daha yüksek hızlarda kullanılabilen birden çok cihazdan oluşan bir ağ için geliştirilmiş daha endüstri temelli bir iletişimdir. GND pinine göre voltaj ölçümü yerine diferansiyel sinyalizasyon ölçüm yöntemi ile çalışır. RS485 sinyalleri yüzerdir ve her sinyal bir Sig + hattı ve bir Sig- hattı üzerinden iletilir.
RS485 alıcısı, bir sinyal hattındaki mutlak voltaj seviyesi yerine her iki hat arasındaki voltaj farkını karşılaştırır. Bu iyi çalışıyor ve ortak bir iletişim problemi kaynağı olan toprak döngülerinin varlığını engelliyor. En iyi sonuçlar, Sig + ve Sig- hatları bükülerek büküldüğünde elde edilir ve bir kabloda indüklenen elektromanyetik gürültünün etkisini ortadan kaldırır ve gürültüye karşı çok daha iyi bir bağışıklık sağlar, bu da RS485'in 1200 m aralığa kadar verileri iletmesini sağlar.. Bükümlü çift ayrıca iletim hızlarının düz kablolarla mümkün olandan çok daha yüksek olmasını sağlar. Küçük iletim mesafelerinde RS485 ile 35Mbps'ye kadar hızlar gerçekleştirilebilir, ancak iletim hızı mesafe ile azalacaktır. 1200m iletim hızında, yalnızca 100kbps iletim hızı kullanabilirsiniz. Bu iletişim protokolünü gerçekleştirmek için özel bir Ethernet kablosuna ihtiyacınız var. CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A, vb. Gibi kullanabileceğimiz birçok Ethernet kablosu kategorisi vardır. Eğitimimizde CAT-6E kablosunu kullanacağız. 4 bükümlü 24AWG tel çiftine sahip olan ve 600MHz'e kadar destekleyebilen. Her iki uçta bir RJ45 konektörü ile sonlandırılır. Hat sürücülerinden tipik hat voltaj seviyeleri minimum ± 1,5 V ila maksimum yaklaşık ± 6 V'tur. Alıcı giriş hassasiyeti ± 200 mV'dir. ± 200 mV aralığındaki gürültü, genel mod gürültü iptali nedeniyle esasen engellenir. Bir baytın (0x3E) RS485 İletişiminin iki hattı üzerinden nasıl aktarıldığına bir örnek.
Gerekli Bileşenler
- 2 × MAX485 Dönüştürücü Modülü
- 2 × Arduino Nano
- 2 × 16 * 2 Alfanümerik LCD
- 2 × 10k Silecek Potansiyometresi
- Cat-6E Ethernet Kablosu
- Devre tahtaları
- Atlama Telleri
Uzun Mesafe Kablolu İletişim için Devre Şeması
Aşağıdaki görüntü, Arduino'nun uzun mesafeli kablolu iletişimi için verici ve alıcı devre şemasını göstermektedir. Hem verici hem de alıcı devrelerinin aynı göründüğünü unutmayın, farklı olan tek şeyin içine yazılan koddur. Ayrıca gösteri için bir kartı verici olarak ve bir kartı alıcı olarak kullanıyoruz, ancak panoları aynı kurulumla hem verici hem de alıcı olarak çalışacak şekilde kolayca programlayabiliriz.
Yukarıdaki devre için bağlantı şeması da aşağıda verilmiştir.
Yukarıda görebileceğiniz gibi, her biri bir Arduino nano, 16 * 2 Alfanümerik LCD ve bir RJ45 konektörü aracılığıyla bir Ethernet Cat-6E kablosunun her bir ucuna bağlanan MAX485 UART - RS485 dönüştürücü IC'ye sahip iki adet neredeyse aynı devre çifti vardır. Eğitimde kullandığım kablo 25 m uzunluğundadır. Master Modda çalışan MAX RS485 Modülü ile RS485 sinyallerine dönüştürülen Nano'dan kablo üzerinden verici tarafından bazı verileri göndereceğiz.
Alıcı uçta, MAX485 dönüştürücü modülü bir Slave olarak çalışıyor ve Master'dan gelen iletimi dinliyor, aldığı RS485 Verilerini, alıcı Nano tarafından okunacak ve 16 * 'da görüntülenecek standart 5V TTL UART sinyallerine dönüştürüyor. 2 Alfanümerik LCD ona bağlı.
MAX485 UART-RS485 Dönüştürücü Modülü
Bu UART-RS485 Dönüştürücü modülünde, RS-485 iletişimi için kullanılan düşük güçlü ve çevirme oranı sınırlı bir alıcı-verici olan yerleşik bir MAX485 yongası vardır. Tek bir + 5V güç kaynağında çalışır ve nominal akım 300 μA'dır. TTL seviyesini RS-485 seviyesine dönüştürme işlevini uygulamak için yarı çift yönlü iletişim üzerinde çalışır; bu, her ikisini birden değil, herhangi bir zamanda iletebileceği veya alabileceği anlamına gelir, maksimum 2.5Mbps iletim hızına ulaşabilir. MAX485 alıcı-verici, sürücü devre dışı bırakıldığında, yüksüz veya tam yüklü koşullar altında 120μA ile 500μA arasında bir besleme akımı çeker. Sürücü, kısa devre akımı için sınırlıdır ve sürücü çıkışları, termal kapatma devresi aracılığıyla yüksek empedans durumuna getirilebilir. Alıcı girişi, girişin açık devre olması durumunda mantıksal yüksek çıkışı garanti eden arıza korumalı bir özelliğe sahiptir.Ek olarak, güçlü anti-parazit performansına sahiptir. Ayrıca, çipin mevcut durumunu, yani çipin çalıştırılıp çalıştırılmadığını veya veri gönderip alıp almadığını, hata ayıklamayı ve kullanmayı kolaylaştıran yerleşik LED'lere sahiptir.
Yukarıda verilen devre şeması, yerleşik MAX485 IC'nin çeşitli bileşenlere nasıl bağlandığını ve isterseniz breadboard ile kullanılmak üzere 0,1 inç standart aralık başlıklarını nasıl sağladığını açıklar.
Ethernet CAT-6E Kablosu
Uzun mesafeli veri aktarımını düşündüğümüzde, anında Ethernet kabloları ile internete bağlanmayı düşünüyoruz. Günümüzde internet bağlantısı için çoğunlukla Wi-Fi kullanıyoruz, ancak daha önce internete bağlamak için her kişisel bilgisayara giden Ethernet kablolarını kullanıyorduk. Bu Ethernet Kablolarını normal kablolar üzerinden kullanmanın temel nedeni, yüksek mesafelerde sinyalin içeri sızmasına ve bozulmasına karşı çok daha iyi koruma sağlamasıdır. Elektromanyetik Girişime karşı koruma sağlamak için yalıtım tabakasının üzerinde Koruyucu Kılıf vardır ve ayrıca her bir kablo çifti, herhangi bir akım döngüsü oluşumunu önlemek ve dolayısıyla gürültüye karşı çok daha iyi koruma sağlamak için birlikte bükülür. Genellikle her iki uçta 8 pinli RJ45 konektörlerle sonlandırılırlar. CAT-4, CAT-5 gibi kullanabileceğimiz birçok Ethernet kablosu kategorisi vardır,CAT-5E, CAT-6, CAT-6A, vb. Eğitimimizde, 4 bükümlü 24AWG tel çiftine sahip ve 600MHz'e kadar destekleyebilen CAT-6E kablosunu kullanacağız.
CAT-6E Kablosunun Yalıtım Katmanı içinde bir çift telin nasıl büküldüğünü gösteren resim
RJ-45 Konektörü, CAT-6E Ethernet Kablosu içindir
Arduino Kodu Açıklaması
Bu projede, sonuçları görüntülemek için her biri 16 * 2 Alfanümerik LCD kullanan iki Arduino Nano, biri verici ve biri alıcı olarak kullanıyoruz. Bu yüzden, Arduino kodunda, verileri göndermeye ve gönderilen veya alınan verileri LCD ekranda göstermeye odaklanacağız.
Verici Tarafı İçin:
LCD'yi sürmek için standart kitaplığı dahil ederek başlıyoruz ve Arduino Nano'nun D8 pinini daha sonra MAX485 Modülünü bir verici veya Alıcı olarak ilan etmek için kullanacağımız bir çıkış pini olarak ilan ediyoruz.
int enablePin = 8; int potval = 0; #Dahil etmek
Şimdi kurulum kısmına geliyor. MAX485 modülünü verici moduna getirmek için etkinleştirme pimini yüksek çekeceğiz. Yarı çift yönlü bir IC olduğu için aynı anda hem iletip hem de alamaz. Ayrıca burada LCD'yi başlatacağız ve bir karşılama mesajı yazdıracağız.
Serial.begin (9600); // 9600 baud hızında seriyi başlat: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("DEVRE DIGEST"); lcd.setCursor (0,1); lcd.print ("Verici Nano"); gecikme (3000); lcd.clear ();
Şimdi döngüde, daha sonra diğer nano'ya iletilecek olan Seri satırlara sürekli artan bir tam sayı değeri yazıyoruz. Bu değer ayrıca görüntüleme ve hata ayıklama için LCD'de yazdırılır.
Seri.print ("Gönderilen Değer ="); Serial.println (potval); // RS-485 Veriyoluna POTval Seri Yaz lcd.setCursor (0,0); lcd.print ("Gönderilen Değer"); lcd.setCursor (0,1); lcd.print (potval); gecikme (1000); lcd.clear (); potval + = 1;
Alıcı Tarafı:
Burada yine LCD'yi sürmek için standart kitaplığı dahil ederek başlıyoruz ve Arduino Nano'nun D8 pinini daha sonra MAX485 Modülünü bir verici veya Alıcı olarak ilan etmek için kullanacağımız bir çıkış pini olarak ilan ediyoruz.
int enablePin = 8; #Dahil etmek
Şimdi kurulum kısmına geliyor. MAX485 modülünü alıcı moduna getirmek için etkinleştirme pimini yüksek çekeceğiz. Yarı çift yönlü bir IC olduğu için aynı anda hem gönderip hem de alamaz. Ayrıca burada LCD'yi başlatacağız ve bir karşılama mesajı yazdıracağız.
Serial.begin (9600); // 9600 baud hızında seriyi başlat: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("DEVRE DIGEST"); lcd.setCursor (0,1); lcd.print ("Alıcı Nano"); gecikme (3000); digitalWrite (enablePin, LOW); // (Ana'dan değer almak için Pin 8 her zaman DÜŞÜK)
Şimdi döngüde, seri bağlantı noktasında herhangi bir şey olup olmadığını kontrol edip verileri okuyoruz ve gelen veri bir tam sayı olduğu için onu ayrıştırıp bağlı LCD'de görüntülüyoruz.
int pwmval = Serial.parseInt (); // RS-485 Serial.print aracılığıyla Master'dan INTEGER değeri al ("Değer aldım"); Serial.println (pwmval); lcd.setCursor (0,0); lcd.print ("Alınan Değer"); lcd.setCursor (0,1); lcd.print (pwmval); gecikme (1000); lcd.clear ();
Sonuç
Bu proje için kullandığımız test düzeneği aşağıda bulunabilir.
Bu projenin tam çalışması aşağıda bağlantısı verilen videoda bulunabilir. Bu yöntem, verileri uzun mesafelerde aktarmak için basit ve uygulanması kolay yöntemlerden biridir. Bu projede, MAX-485 Modülü ile elde edebileceğimiz maksimum aktarım hızının çok altında olan 9600'lük bir baud hızı kullandık ancak bu hız, dışarıdaki sensör modüllerinin çoğu için uygundur ve gerçekten ihtiyacımız yok Kabloyu bir ethernet bağlantısı olarak kullanmadığınız ve alabileceğiniz tüm bant genişliği ve aktarım hızına ihtiyaç duymadığınız sürece, Arduino ve diğer geliştirme kartlarıyla çalışırken tüm maksimum hızlar. Aktarım hızıyla kendi başınıza oynayın ve diğer ethernet kablo türlerini de deneyin. Herhangi bir sorunuz varsa, aşağıdaki yorum bölümüne bırakın veya forumlarımızı kullanın, ben de onları cevaplamak için elimden geleni yapacağım. O zamana kadar, adios!