- Communication série RS-485
- Composants requis
- Schéma
- Programmation STM32F103C8 et Arduino UNO pour la communication série RS485
- Test de la communication RS485 entre STM32F103C8 et Arduino UNO:
Les protocoles de communication font partie intégrante d'une électronique numérique et d'un système embarqué. Partout où il y a une interface de plusieurs microcontrôleurs et périphériques, le protocole de communication doit être utilisé afin d'échanger un tas de données. Il existe de nombreux types de protocoles de communication série disponibles. Le RS485 est l'un des protocoles de communication série et est utilisé dans les projets industriels et les machineries lourdes.
Nous avons appris la communication série RS485 entre Arduino Uno et Arduino Nano dans le didacticiel précédent . Ce tutoriel porte sur l'utilisation d'une communication série RS-485 dans le microcontrôleur STM32F103C8. Si vous êtes nouveau sur le microcontrôleur STM32, commencez par Premiers pas avec STM32 à l'aide de l'IDE Arduino: LED clignotante et vérifiez tous les projets STM32 ici.
Dans ce tutoriel, Master STM32F103C8 dispose de trois boutons poussoirs qui sont utilisés pour contrôler l'état de trois LED présentes sur l'esclave Arduino Uno en utilisant la communication série RS-485.
Commençons par comprendre le fonctionnement de la communication série RS-485.
Communication série RS-485
RS-485 est un protocole de communication série asynchrone qui ne nécessite pas d'horloge. Il utilise une technique appelée signal différentiel pour transférer des données binaires d'un appareil à un autre.
Alors, quelle est cette méthode de transfert de signal différentiel ??
La méthode du signal différentiel fonctionne en créant une tension différentielle en utilisant un 5V positif et négatif. Il fournit une communication semi-duplex lors de l'utilisation de deux fils et une communication duplex intégral lors de l'utilisation de quatre fils.
En utilisant cette méthode:
- RS-485 prend en charge un taux de transfert de données plus élevé de 30 Mbps maximum.
- Il fournit également une distance de transfert de données maximale par rapport au protocole RS-232. Il transfère des données jusqu'à 1200 mètres maximum.
- Le principal avantage de RS-485 par rapport à RS-232 est l'esclave multiple avec un seul maître tandis que RS-232 ne prend en charge qu'un seul esclave.
- Peut avoir un maximum de 32 appareils connectés au protocole RS-485.
- Un autre avantage du RS-485 est immunisé contre le bruit car ils utilisent la méthode du signal différentiel pour le transfert.
- RS-485 est plus rapide que le protocole I2C.
Le module RS-485 peut être connecté à n'importe quel microcontrôleur ayant un port série. Pour utiliser le module RS-485 avec des microcontrôleurs, un module appelé 5V MAX485 TTL à RS485 basé sur Maxim MAX485 IC est nécessaire car il permet une communication série sur une longue distance de 1200 mètres et il est bidirectionnel et semi-duplex a un taux de transfert de données de 2,5 Mbps. Ce module nécessite une tension de 5V.
Description de la broche RS-485:
Nom de la broche |
La description |
VCC |
5V |
UNE |
Entrée de récepteur non inverseuse Sortie pilote non inverseuse |
B |
Inverser l'entrée du récepteur Inverser la sortie du pilote |
GND |
GND (0 V) |
R0 |
Sortie récepteur (broche RX) |
RÉ |
Sortie récepteur (LOW-Enable) |
DE |
Sortie pilote (HIGH-Enable) |
DI |
Entrée du pilote (broche TX) |
Le module RS485 présente les caractéristiques suivantes:
- Tension de fonctionnement: 5 V
- Puce MAX485 intégrée
- Une faible consommation d'énergie pour la communication RS485
- Émetteur-récepteur limité à vitesse de balayage
- Borne 2P à pas de 5,08 mm
- Câblage de communication RS-485 pratique
- Toutes les broches de la puce ont été conduites peuvent être contrôlées via le microcontrôleur
- Taille de la carte: 44 x 14 mm
L'utilisation de ce module avec STM32F103C8 et Arduino UNO est très simple. Les ports série matériels des microcontrôleurs sont utilisés. Les broches série matérielles dans STM32 et arduino UNO sont indiquées ci-dessous.
- Dans STM32F103C8: broches PA9 (TX) et PA10 (RX)
- Dans Arduino Uno: broches 0 (RX) et 1 (TX)
La programmation est aussi simple, il suffit d' utiliser la Serial.print () pour écrire RS-485 et Serial.Read () pour lire RS-485 et les broches DE RE & RS-485 est fait LOW pour recevoir des données et fait HIGH à écrire des données sur le bus RS-485.
Composants requis
- STM32F103C8
- Arduino UNO
- Module de conversion MAX485 TTL vers RS485 - (2)
- Potentiomètre 10K
- Bouton poussoir - 3
- LED - 3
- Résistances
- Planche à pain
- Connexion des fils
Schéma
Dans ce tutoriel, STM32F103C8 est utilisé comme maître avec un module RS-485 et Arduino UNO est utilisé comme esclave avec un autre module RS-485.
Connexion du circuit entre le RS-485 et le STM32F103C8 (maître):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE RÉ |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
UNE |
Vers A du RS-485 esclave |
B |
Vers B de l'esclave RS-485 |
STM32F103C8 avec trois boutons poussoirs:
Trois boutons poussoirs avec trois résistances Pull Down de 10k sont connectés aux broches PA0, PA1, PA2 de STM32F103C8.
Connexion du circuit entre le RS-485 et l'Arduino UNO (esclave):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RÉ |
2 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
UNE |
Vers A du maître RS-485 |
B |
Vers B du maître RS-485 |
Trois LED sont utilisées là où les anodes de LED avec une résistance de 330 ohms sont connectées aux broches 4, 7, 8 d'Arduino UNO et la cathode des LED est connectée à GND.
Programmation STM32F103C8 et Arduino UNO pour la communication série RS485
Arduino IDE est utilisé pour le développement et la programmation des deux cartes à savoir STM32 et Arduino UNO. Mais assurez-vous d'avoir sélectionné le PORT correspondant dans Outils-> Port et carte dans Outils-> Tableau. Si vous rencontrez des difficultés ou des doutes, reportez-vous simplement à Programmation de votre STM32 dans ARDUINO IDE. La programmation de ce tutoriel se compose de deux sections une pour STM32F103C8 (maître) et une autre pour Arduino UNO (esclave). Les deux codes seront expliqués un par un ci-dessous.
STM32F103C8 comme maîtreDu côté maître, l'état du bouton poussoir est lu puis écrit en série ces valeurs sur le bus RS-485 via les ports série matériels 1 (PA9, PA10) du STM32F103C8. De plus, aucune bibliothèque externe n'est nécessaire pour le moment. L'Arduino possède toute la bibliothèque nécessaire pour la communication série.
Commencez la communication série à l'aide des broches série matérielles (PA9, PA10) à un débit de 9600.
Serial1.begin (9600);
Lire l'état du bouton poussoir aux broches PA0, PA1, PA2 de STM32F103C8 et les stocker dans une variable button1val, button2val, button3val. La valeur est HIGH si le bouton est enfoncé et LOW lorsqu'il n'est pas enfoncé.
int button1val = digitalRead (bouton1); int button2val = digitalRead (bouton2); int button3val = digitalRead (bouton3);
Avant d'envoyer les valeurs des boutons au port série, les broches DE & RE de RS-485 doivent être HAUTES qui sont connectées à la broche PA3 de STM32F103C8 (pour rendre la broche PA3 HIGH):
digitalWrite (enablePin, HIGH);
Suivant pour mettre ces valeurs dans le port série et envoyer des valeurs en fonction du bouton-poussoir enfoncé, utilisez l'instruction if else et envoyez la valeur correspondante lorsque vous appuyez sur le bouton.
Si le premier bouton est enfoncé, la condition correspond et la valeur «1» est envoyée au port série où Arduino UNO est connecté.
if (button1val == HIGH) { int num1 = 1; Serial1.println (num1); }
De même, lorsque le bouton 2 est enfoncé, la valeur 2 est envoyée sur le port série et lorsque le bouton 3 est enfoncé, la valeur 3 est envoyée sur le port série.
sinon si (button2val == HIGH) { int num2 = 2; Serial1.println (num2); } else if (button3val == HIGH) { int num3 = 3; Serial1.println (num3); }
Et quand aucun bouton n'est enfoncé, la valeur 0 est envoyée à Arduino Uno.
else { int num = 0; Serial1.println (num); }
Ceci termine la programmation pour configurer STM32 comme maître.
Arduino UNO comme esclaveDu côté esclave, l' Arduino UNO reçoit une valeur entière envoyée par le maître STM32F103C8, disponible sur le port série matériel de l'Arduino UNO (P0, 1) où le module RS-485 est connecté.
Lisez simplement la valeur et stockez-la dans une variable. En fonction de la valeur reçue, la LED correspondante est allumée ou éteinte connectée à Arduino GPIO.
Pour recevoir les valeurs du maître, il suffit de mettre les broches DE & RE du module RS-485 sur BAS. Ainsi, la broche 2 (enablePin) d'Arduino UNO est rendue BASSE.
digitalWrite (enablePin, LOW);
Maintenant, lisez simplement les données entières disponibles sur Serial Port et stockez-les dans une variable.
int receive = Serial.parseInt ();
En fonction de la valeur (0, 1, 2, 3) reçue, la LED correspondante des trois LED est allumée.
if (receive == 1) // En fonction de la valeur reçue, la LED correspondante est allumée ou éteinte { digitalWrite (ledpin1, HIGH); } else if (receive == 2) { digitalWrite (ledpin2, HIGH); } else if (receive == 3) { digitalWrite (ledpin3, HIGH); } else { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
Ceci termine la programmation et la configuration d'Arduino UNO en tant qu'esclave. Cela termine également les configurations complètes pour Arduino UNO et STM32. La vidéo de travail et tous les codes sont joints à la fin de ce didacticiel.
Test de la communication RS485 entre STM32F103C8 et Arduino UNO:
1. Lorsque le bouton-poussoir 1, qui est connecté au Master STM32, est enfoncé, la LED 1 s'allume connectée à l'Arduino esclave.
2. Lorsque le bouton-poussoir 2, connecté au Master STM32, est enfoncé, la LED 2 s'allume connectée à l'Arduino esclave.
3. De même, lorsque le bouton-poussoir 3 est enfoncé, la LED 3 s'allume connectée à l'Arduino esclave.
Ceci termine la communication série RS485 entre STM32F103C8 et Arduino UNO. Les cartes Arduino UNO et STM32 sont des cartes largement utilisées pour le prototypage rapide et nous avons réalisé de nombreux projets utiles sur ces cartes. Si vous avez des doutes ou avez des suggestions pour nous, écrivez et commentez ci-dessous.