- RS-485 Seri Haberleşme
- Gerekli Bileşenler
- Devre şeması
- RS485 Seri Haberleşme için STM32F103C8 & Arduino UNO Programlama
- STM32F103C8 ve Arduino UNO arasındaki RS485 iletişimini test etme:
İletişim protokolleri, dijital elektronik ve gömülü sistemin ayrılmaz bir parçasıdır. Birden fazla mikro denetleyici ve çevre biriminin arabiriminin olduğu her yerde, veri grubu alışverişi yapmak için iletişim protokolü kullanılmalıdır. Kullanılabilir birçok seri iletişim protokolü türü vardır. RS485, seri iletişim protokollerinden biridir ve endüstriyel projelerde ve ağır makinelerde kullanılır.
Önceki eğitimde Arduino Uno ve Arduino Nano arasındaki RS485 Seri İletişimini öğrendik . Bu eğitim, STM32F103C8 Mikrodenetleyicide bir RS-485 Seri iletişimi kullanmak hakkındadır. STM32 Mikrodenetleyicide yeniyseniz, Arduino IDE: Yanıp Sönen LED kullanarak STM32 ile Başlarken ile başlayın ve tüm STM32 projelerini buradan kontrol edin.
Bu eğitimde Master STM32F103C8, RS-485 Seri iletişim kullanarak Slave Arduino Uno'da bulunan üç LED'in durumunu kontrol etmek için kullanılan üç basma düğmesine sahiptir.
RS-485 Seri iletişimin çalışmasını anlayarak başlayalım.
RS-485 Seri Haberleşme
RS-485, saat gerektirmeyen bir asenkron seri iletişim protokolüdür. İkili verileri bir cihazdan diğerine aktarmak için diferansiyel sinyal adı verilen bir teknik kullanır.
Peki bu Diferansiyel Sinyal Transfer Yöntemi nedir?
Diferansiyel sinyal yöntemi, pozitif ve negatif 5V kullanarak diferansiyel voltaj oluşturarak çalışır. Bu içerir Yarı-Dubleks kullanıldığında iletişim iki kabloyu ve Tam-çift yönlü kullanıldığında iletişim dört tel.
Bu yöntemi kullanarak:
- RS-485, maksimum 30 Mbps'lik daha yüksek veri aktarım hızını destekler.
- Ayrıca RS-232 protokolüne kıyasla maksimum veri aktarım mesafesi sağlar. Verileri maksimum 1200 metreye kadar aktarır.
- RS-485'in RS-232'ye göre ana avantajı, tek Master ile çoklu slave, RS-232 ise sadece tek slave'i destekler.
- RS-485 protokolüne bağlı maksimum 32 cihaz olabilir.
- RS-485'in bir başka avantajı, aktarım için diferansiyel sinyal yöntemini kullandıklarından gürültüden etkilenmemesidir.
- RS-485, I2C protokolüne göre daha hızlıdır.
RS-485 Modülü, seri porta sahip herhangi bir mikrodenetleyiciye bağlanabilir. RS-485 modülünü mikrodenetleyicilerle kullanmak için, 1200 metrelik uzun mesafelerde seri haberleşmeye izin verdiği için Maxim MAX485 IC'ye dayanan 5V MAX485 TTL - RS485 adlı bir modüle ihtiyaç vardır, çift yönlüdür ve yarı duplex 2.5 veri aktarım hızına sahiptir. Mbps. Bu modül, 5V'luk bir voltaj gerektirir.
RS-485 Pin Açıklaması:
Pin Adı |
Açıklama |
VCC |
5V |
Bir |
Tersine Çevrilmeyen Alıcı Girişi Ters Çevirmeyen Sürücü Çıkışı |
B |
Alıcı Girişini Ters Çevirme Ters Sürücü Çıkışı |
GND |
GND (0V) |
R0 |
Alıcı Çıkışı (RX pin) |
YENİDEN |
Alıcı Çıkışı (LOW-Enable) |
DE |
Sürücü Çıkışı (YÜKSEK Etkin) |
DI |
Sürücü Girişi (TX pini) |
RS485 modülü aşağıdaki özelliklere sahiptir:
- Çalışma gerilimi: 5V
- Yerleşik MAX485 yongası
- RS485 iletişimi için düşük güç tüketimi
- Dönüş hızı sınırlı alıcı-verici
- 5.08mm aralıklı 2P terminali
- Kullanışlı RS-485 iletişim kablosu
- Tüm çip pinleri, mikro denetleyici aracılığıyla kontrol edilebilir.
- Karton boyutu: 44 x 14 mm
Bu modülü STM32F103C8 ve Arduino UNO ile kullanmak çok kolaydır. Mikrodenetleyicilerin donanım seri portları kullanılır. STM32 ve arduino UNO'daki donanım seri pinleri aşağıda verilmiştir.
- STM32F103C8'de: PA9 (TX) ve PA10 (RX) Pinleri
- Arduino Uno'da: Pin 0 (RX) ve 1 (TX)
Programlama sadece kullanımı da basittir Serial.print () RS-485 ve yazma Serial.Read (), RS-485 ve pim okumak için DE-RE RS-485 yapılır verileri almak için DÜŞÜK ve yapılan yüksekten veri yazma RS-485'e.
Gerekli Bileşenler
- STM32F103C8
- Arduino UNO
- MAX485 TTL - RS485 Dönüştürücü Modülü - (2)
- 10K Potansiyometre
- Basmalı Düğme - 3
- LED - 3
- Dirençler
- Breadboard
- Kabloların Bağlanması
Devre şeması
Bu eğitimde STM32F103C8, bir RS-485 modülüyle Master olarak kullanılır ve Arduino UNO başka bir RS-485 modülü ile Slave olarak kullanılır.
RS-485 ve STM32F103C8 (Ana) arasındaki Devre Bağlantısı:
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE YENİDEN |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
Bir |
Bağımlı RS-485 A'ya |
B |
Bağımlı RS-485'in B'sine |
Üç Basmalı Düğmeli STM32F103C8:
STM32F103C8'in PA0, PA1, PA2 pinlerine 10k'lık üç Aşağı Çekme Direncine sahip üç Basma düğmesi bağlanır.
RS-485 ve Arduino UNO (Slave) arasındaki Devre Bağlantısı:
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE YENİDEN |
2 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
Bir |
Master RS-485'in A'sına |
B |
Usta RS-485'in B'sine |
330 ohm dirençli LED'lerin Anotlarının Arduino UNO'nun 4, 7, 8 numaralı pinlerine ve LED'lerin Katotlarının GND'ye bağlandığı yerlerde üç LED kullanılır.
RS485 Seri Haberleşme için STM32F103C8 & Arduino UNO Programlama
Arduino IDE, her iki kartın yani STM32 ve Arduino UNO'nun geliştirilmesi ve programlanması için kullanılır. Ancak Tools-> Port and Board'dan Tools-> Board'dan ilgili PORT'u seçtiğinizden emin olun. Herhangi bir zorluk veya şüphe bulursanız, STM32'nizi ARDUINO IDE'de programlama konusuna bakın. Bu öğretici için programlama, biri STM32F103C8 (Master) ve diğeri Arduino UNO (Slave) için iki bölümden oluşur. Her iki kod da aşağıda tek tek açıklanacaktır.
Master olarak STM32F103C8Ana tarafta, Basma Düğmesinin durumu okunur ve ardından bu değerler STM32F103C8'in Donanım Seri Bağlantı Noktaları 1 (PA9, PA10) aracılığıyla RS-485 veri yoluna seri olarak yazılır. Ayrıca şu an için harici kitaplığa ihtiyaç yoktur. Arduino, seri iletişim için gerekli tüm kitaplığa sahiptir.
9600 buad hızında Donanım Seri Pinlerini (PA9, PA10) kullanarak Seri Haberleşmeye başlayın.
Serial1.begin (9600);
STM32F103C8'in PA0, PA1, PA2 pinlerindeki basma düğmesinin durumunu okuyun ve bunları değişken bir button1val, button2val, button3val içinde saklayın. Değer, düğmesine basılırsa YÜKSEK ve basılmadığında DÜŞÜK olur.
int button1val = digitalRead (button1); int button2val = digitalRead (button2); int button3val = digitalRead (button3);
Düğme değerlerini seri porta göndermeden önce, RS-485'in DE ve RE pinleri, STM32F103C8'in PA3 pinine bağlanan HIGH olmalıdır (PA3 HIGH pinini yapmak için):
digitalWrite (enablePin, HIGH);
Bu değerleri Seri Port'a koymak ve hangi butona basıldığına bağlı olarak değerleri göndermek için else if ifadesini kullanın ve butonuna basıldığında karşılık gelen değeri gönderin.
İlk düğmeye basıldığında durum eşleşir ve '1' değeri Arduino UNO'nun bağlı olduğu seri porta gönderilir.
eğer (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }
Benzer şekilde, buton 2'ye basıldığında 2 değeri seri port üzerinden gönderilir ve buton 3'e basıldığında 3 değeri seri port üzerinden gönderilir.
else if (button2val == HIGH) { int num2 = 2; Serial1.println (num2); } else if (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }
Ve hiçbir düğmeye basılmadığında, 0 değeri Arduino Uno'ya gönderilir.
başka { int num = 0; Serial1.println (sayı); }
Bu, STM32'yi Master olarak yapılandırmak için programlamayı bitirir.
Slave olarak Arduino UNOBağımlı tarafta Arduino UNO, RS-485 modülünün bağlı olduğu Arduino UNO'nun (P0, 1) Donanım Seri portunda bulunan Master STM32F103C8'den gönderilen bir tamsayı değeri alır.
Basitçe değeri okuyun ve bir değişkende saklayın. Alınan değere bağlı olarak karşılık gelen LED Arduino GPIO'ya bağlanarak AÇIK veya KAPALI konuma getirilir.
Master'dan değerleri almak için RS-485 modülünün DE ve RE pinlerini LOW yapın. Böylece Arduino UNO'nun pin-2'si (enablePin) DÜŞÜK yapılır.
digitalWrite (enablePin, LOW);
Şimdi sadece Seri Port'ta bulunan tamsayı verilerini okuyun ve bir değişkende saklayın.
int take = Serial.parseInt ();
Alınan değere, yani (0, 1, 2, 3) bağlı olarak, karşılık gelen üç LED'den biri AÇIK konuma getirilir.
eğer (alma == 1) // Alınan değere bağlı olarak ilgili LED AÇIK veya KAPALI olur { digitalWrite (ledpin1, HIGH); } else if ( take == 2) { digitalWrite (ledpin2, HIGH); } else if ( take == 3) { digitalWrite (ledpin3, HIGH); } else { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, DÜŞÜK); digitalWrite (ledpin3, DÜŞÜK); }
Bu, Arduino UNO'yu Slave olarak programlamayı ve yapılandırmayı bitirir. Ayrıca bu, Arduino UNO ve STM32 için tüm konfigürasyonları tamamlar. Çalışma videosu ve tüm kodlar bu eğitimin sonuna eklenmiştir.
STM32F103C8 ve Arduino UNO arasındaki RS485 iletişimini test etme:
1. Master STM32'ye bağlı olan Basma düğmesi-1'e basıldığında, LED 1 Slave Arduino'ya bağlı olarak yanar.
2. Master STM32'ye bağlı olan Basma düğmesi-2'ye basıldığında, LED 2 Slave Arduino'ya bağlı olarak yanar.
3. Benzer şekilde Basma düğmesi-3'e basıldığında LED 3 Bağımlı Arduino'ya bağlı olarak AÇIK konuma gelir.
Bu STM32F103C8 ve Arduino UNO arasındaki RS485 seri iletişimini bitirir. Arduino UNO ve STM32 kartları, hızlı prototipleme için yaygın olarak kullanılan kartlardır ve bu kartlar üzerinde birçok faydalı proje yaptık. Herhangi bir şüpheniz varsa veya bize herhangi bir öneriniz varsa, aşağıya yazın ve yorum yapın.