- Послідовний зв’язок RS-485
- Потрібні компоненти
- Кругова діаграма
- Програмування STM32F103C8 та Arduino UNO для послідовного зв'язку RS485
- Тестування зв'язку RS485 між STM32F103C8 та Arduino UNO:
Протоколи зв'язку є невід’ємною частиною цифрової електроніки та вбудованої системи. Скрізь, де існує взаємодія декількох мікроконтролерів та периферійних пристроїв, протокол зв'язку повинен використовуватися для обміну купою даних. Доступно багато типів протоколів послідовного зв'язку. RS485 є одним із послідовних протоколів зв'язку і використовується в промислових проектах та важких машинах.
Про послідовний зв’язок RS485 між Arduino Uno та Arduino Nano ми дізналися з попереднього підручника . Цей підручник стосується використання послідовного зв’язку RS-485 у мікроконтролері STM32F103C8. Якщо ви новачок у мікроконтролері STM32, тоді почніть з Початок роботи зі STM32 за допомогою Arduino IDE: Блимає світлодіод і перевірте всі проекти STM32 тут.
У цьому посібнику Master STM32F103C8 має три кнопки, які використовуються для управління статусом трьох світлодіодів, присутніх на підлеглому Arduino Uno, за допомогою послідовного зв'язку RS-485.
Почнемо з розуміння роботи послідовного зв'язку RS-485.
Послідовний зв’язок RS-485
RS-485 - це асинхронний послідовний протокол зв'язку, який не потребує годинника. Він використовує техніку, яка називається диференціальним сигналом для передачі двійкових даних з одного пристрою на інший.
То що це за метод диференціальної передачі сигналу ??
Метод диференціального сигналу працює шляхом створення диференціальної напруги за допомогою позитивних і негативних 5В. Він забезпечує напівдуплексний зв’язок при використанні двох проводів і повний дуплексний зв’язок при використанні чотирьох проводів.
За допомогою цього методу:
- RS-485 підтримує більш високу швидкість передачі даних максимум 30 Мбіт / с.
- Він також забезпечує максимальну відстань передачі даних у порівнянні з протоколом RS-232. Він передає дані максимум до 1200 метрів.
- Головною перевагою RS-485 перед RS-232 є кілька ведених з одним ведучим, тоді як RS-232 підтримує лише одного веденого.
- Може мати максимум 32 пристрої, підключені до протоколу RS-485.
- Ще однією перевагою RS-485 є захист від шуму, оскільки для передачі вони використовують метод диференціального сигналу.
- RS-485 швидший у порівнянні з протоколом I2C.
Модуль RS-485 можна підключити до будь-якого мікроконтролера, що має послідовний порт. Для використання модуля RS-485 з мікроконтролерами потрібен модуль під назвою 5V MAX485 TTL - RS485, який базується на Maxim MAX485 IC, оскільки він дозволяє здійснювати послідовний зв'язок на великій відстані 1200 метрів, він є двонаправленим, а напівдуплекс має швидкість передачі даних 2,5 Мбіт / с. Цей модуль вимагає напруги 5В.
Опис штиря RS-485:
Ім'я PIN-коду |
Опис |
VCC |
5 В |
A |
Вхід неінвертуючого приймача Неінвертуючий вихід драйвера |
B |
Інвертування вхідного сигналу приймача Інвертування вихідних даних драйвера |
GND |
GND (0 В) |
R0 |
Вихід приймача (RX-штифт) |
RE |
Вихід приймача (LOW-Enable) |
DE |
Вихід драйвера (HIGH-Enable) |
DI |
Вхід драйвера (штекер TX) |
Модуль RS485 має такі особливості:
- Робоча напруга: 5 В
- Вбудований чіп MAX485
- Низьке споживання енергії для зв'язку RS485
- Прийомопередавач з обмеженою швидкістю
- Термінал 2P з кроком 5,08 мм
- Зручна комунікаційна проводка RS-485
- Всі штифти мікросхеми, до яких було проведено, можна контролювати за допомогою мікроконтролера
- Розмір дошки: 44 х 14 мм
Використовувати цей модуль із STM32F103C8 та Arduino UNO дуже просто. Використовуються апаратні послідовні порти мікроконтролерів. Апаратні послідовні висновки в STM32 та arduino UNO наведені нижче.
- У STM32F103C8: висновки PA9 (TX) і PA10 (RX)
- В Arduino Uno: Pin 0 (RX) & 1 (TX)
Програмування також просте, просто використовуйте Serial.print () для запису в RS-485 і Serial.Read () для читання з RS-485, а шпильки DE & RE RS-485 зроблені НИЗКИМИ для отримання даних і ВИСОКИМ до запис даних на шину RS-485.
Потрібні компоненти
- STM32F103C8
- Arduino UNO
- Модуль перетворювача MAX485 TTL в RS485 - (2)
- Потенціометр 10K
- Кнопка - 3
- Світлодіод - 3
- Резистори
- Макет
- Підключення проводів
Кругова діаграма
У цьому посібнику STM32F103C8 використовується як ведучий з одним модулем RS-485, а Arduino UNO використовується як підлеглий з іншим модулем RS-485.
Схема з'єднання між RS-485 та STM32F103C8 (головний):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE RE |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5 В |
GND |
GND |
A |
До А раба RS-485 |
B |
До B Slave RS-485 |
STM32F103C8 з трьома кнопками:
Три вимикачі з трьома витяжними резисторами 10k підключені до контактів PA0, PA1, PA2 STM32F103C8.
Схема з'єднання між RS-485 та Arduino UNO (ведений):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
2 |
R0 |
0 (RX) |
VCC |
5 В |
GND |
GND |
A |
До А майстра RS-485 |
B |
До В майстра RS-485 |
Використовуються три світлодіоди, де аноди світлодіодів з резистором 330 Ом підключені до висновків 4, 7, 8 Arduino UNO, а катод світлодіодів підключений до GND.
Програмування STM32F103C8 та Arduino UNO для послідовного зв'язку RS485
Arduino IDE використовується для розробки та програмування обох плат, тобто STM32 та Arduino UNO. Але переконайтеся, що ви вибрали відповідний ПОРТ в меню Інструменти-> Порт та Дошка з Інструменти-> Дошка. Якщо ви виявите труднощі або сумніви, просто зверніться до програмування вашого STM32 в ARDUINO IDE. Програмування для цього підручника складається з двох розділів, першого для STM32F103C8 (Master) та іншого для Arduino UNO (Slave). Обидва коди будуть пояснюватися по одному нижче.
STM32F103C8 як головнийНа стороні ведучого зчитується стан кнопки, а потім послідовно записуються ці значення на шину RS-485 через апаратні послідовні порти 1 (PA9, PA10) STM32F103C8. Також на сьогодні немає необхідної зовнішньої бібліотеки. Arduino має всю необхідну бібліотеку для послідовного зв'язку.
Почніть послідовний зв’язок за допомогою апаратних послідовних висновків (PA9, PA10) при буадраті 9600.
Serial1.begin (9600);
Зчитайте стан кнопки на штифтах PA0, PA1, PA2 STM32F103C8 і збережіть їх у змінних button1val, button2val, button3val. Значення HIGH, якщо натиснута кнопка, і LOW, якщо не натиснуто.
int button1val = digitalRead (button1); int button2val = digitalRead (button2); int button3val = digitalRead (button3);
Перш ніж відправляти значення кнопок на послідовний порт, висновки DE & RE RS-485 повинні бути ВИСОКИМ, що підключено до виводу PA3 STM32F103C8 (Щоб зробити висновок PA3 HIGH):
digitalWrite (enablePin, HIGH);
Далі, щоб помістити ці значення в послідовний порт і надіслати значення, залежно від натиснутої кнопки, використовуйте оператор if else і надішліть відповідне значення при натисканні кнопки.
Якщо натиснути першу кнопку, тоді умова збігається, і значення '1' надсилається на послідовний порт, де підключений Arduino UNO.
якщо (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }
Подібним чином, при натисканні кнопки 2 значення 2 надсилається через послідовний порт, а при натисканні кнопки 3 значення 3 надсилається через послідовний порт.
інакше якщо (button2val == HIGH) { int num2 = 2; Serial1.println (num2); } ще if (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }
І коли жодна кнопка не натиснута, значення 0 надсилається в Arduino Uno.
ще { int num = 0; Serial1.println (num); }
На цьому програмування налаштовано STM32 як головний.
Arduino UNO як рабНа стороні веденого Arduino UNO отримує ціле число, яке надсилається від Master STM32F103C8, який доступний на апаратному послідовному порту Arduino UNO (P0, 1), де підключений модуль RS-485.
Просто прочитайте значення та збережіть у змінній. Залежно від отриманого значення відповідний світлодіод вмикається або вимикається, підключений до Arduino GPIO.
Щоб отримати значення від ведучого, просто зробіть штифти DE & RE модуля RS-485 НИЗКИМ. Отже, pin-2 (enablePin) Arduino UNO зроблений НИЗКИМ.
digitalWrite (enablePin, LOW);
Тепер просто прочитайте цілочисельні дані, доступні на послідовному порту, і збережіть їх у змінну.
int receive = Serial.parseInt ();
Залежно від отриманого значення, тобто (0, 1, 2, 3), відповідно вмикається один із трьох світлодіодів.
if ( receive == 1) // Залежно від отриманого значення відповідний світлодіод вмикається або вимикається { digitalWrite (ledpin1, HIGH); } інакше якщо (отримати == 2) { digitalWrite (ledpin2, HIGH); } інакше якщо (отримати == 3) { digitalWrite (ledpin3, HIGH); } else { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
На цьому програмування та налаштування Arduino UNO закінчується як підлеглий. Також на цьому закінчені повні конфігурації для Arduino UNO та STM32. Робоче відео та всі коди додаються в кінці цього посібника.
Тестування зв'язку RS485 між STM32F103C8 та Arduino UNO:
1. При натисканні кнопки-1, яка підключена до Master STM32, світлодіод 1 включається, підключений до підлеглого Arduino.
2. При натисканні кнопки-2, яка підключена до Master STM32, світлодіод 2 включається, підключений до підлеглого Arduino.
3. Подібним чином, коли натискається кнопка-3, світлодіод 3 включається, підключений до підлеглого Arduino.
Це завершує послідовний зв’язок RS485 між STM32F103C8 та Arduino UNO. Плати Arduino UNO та STM32 широко використовуються для швидкого створення прототипів, і ми зробили багато корисних проектів на цих платах. Якщо ви виявите будь-які сумніви чи пропозиції щодо нас, напишіть і коментуйте нижче.