- Différence entre la communication UART et RS485
- Composants requis
- Schéma de circuit pour la communication filaire longue distance
- Module convertisseur MAX485 UART-RS485
- Câble Ethernet CAT-6E
- Explication du code Arduino
- Conclusion
Nous utilisons depuis longtemps des cartes de développement de microcontrôleurs comme Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430, etc. dans nos petits projets où la plupart du temps, la distance entre les capteurs et la carte ne dépasse pas quelques centimètres au maximum et à ces distances, la communication entre les différents modules de capteurs, relais, actionneurs et contrôleurs peut se faire facilement sur de simples câbles de connexion sans que nous nous inquiétions de la distorsion du signal dans le milieu et des bruits électriques qui s'y glissent. Mais si vous construisez un système de contrôle avec ces cartes de développement sur une distance supérieure à 10 à 15 mètres, vous devez prendre en compte le bruit et la puissance du signal, car si vous voulez que votre système fonctionne de manière fiable, vous ne pouvez pas vous permettre de perdre le données lors du transfert.
Il existe de nombreux types de protocoles de communication série tels que I2C et SPI qui peuvent être facilement mis en œuvre avec Arduino et nous allons aujourd'hui nous pencher sur un autre protocole le plus couramment utilisé appelé RS485 qui est très couramment utilisé dans les environnements industriels à fort bruit pour transférer les données. une longue distance. Dans ce tutoriel, nous allons en apprendre davantage sur le protocole de communication RS485 et comment l'implémenter avec les deux Arduino Nano que nous avons avec nous et comment utiliser le module de conversion MAX485 RS485 vers UART. Auparavant, nous avons également effectué la communication MAX485 avec Arduino et également la communication MAX485 avec Raspberry pi, vous pouvez également les vérifier si vous êtes intéressé.
Différence entre la communication UART et RS485
La plupart des capteurs à faible coût et autres modules tels que GPS, Bluetooth, RFID, ESP8266, etc. qui sont couramment utilisés avec Arduino, Raspberry Pi sur le marché utilisent une communication basée sur UART TTL car il ne nécessite que 2 fils TX (émetteur) et RX (Destinataire). Ce n'est pas un protocole de communication standard, mais c'est un circuit physique avec lequel vous pouvez transmettre et recevoir des données série avec d'autres périphériques. Il ne peut transmettre / recevoir des données qu'en série, donc il convertit d'abord les données parallèles en données série, puis transmet les données.
UART est un dispositif de transmission asynchrone, il n'y a donc pas de signal d'horloge pour synchroniser les données entre les deux appareils au lieu de cela, il utilise des bits de démarrage et d'arrêt au début et à la fin de chaque paquet de données respectivement pour marquer les extrémités des données en cours de transfert. Les données transmises par UART sont organisées en paquets. Chaque paquet contient 1 bit de démarrage, 5 à 9 bits de données (selon l'UART), un bit de parité optionnel et 1 ou 2 bits d'arrêt. Il est très bien documenté et largement utilisé et il a également un bit de parité pour permettre la vérification des erreurs. Mais il y a quelques limitations car il ne peut pas prendre en charge plusieurs esclaves et plusieurs maîtres et la trame de données maximale est limitée à 9 bits. Pour le transfert de données, les débits en bauds du maître et de l'esclave doivent être compris entre 10% l'un de l'autre. L'exemple ci-dessous montre comment un personnage est un émetteur sur une ligne de données UART. Les signaux haut et bas sont mesurés par rapport au niveau GND, donc le décalage du niveau GND aura un effet désastreux sur le transfert de données.
D'autre part, RS485 est une communication plus basée sur l'industrie qui est développée pour un réseau de plusieurs appareils qui peuvent être utilisés sur de longues distances et à des vitesses plus élevées. Il fonctionne sur une méthode de mesure de signalisation différentielle plutôt que sur une mesure de tension par rapport à la broche GND. Les signaux RS485 sont flottants et chaque signal est transmis sur une ligne Sig + et une ligne Sig-.
Le récepteur RS485 compare la différence de tension entre les deux lignes, au lieu du niveau de tension absolu sur une ligne de signal. Cela fonctionne bien et évite l'existence de boucles de masse, une source courante de problèmes de communication. Les meilleurs résultats sont obtenus si les lignes Sig + et Sig- sont torsadées car la torsion annule l'effet du bruit électromagnétique induit dans un câble et offre une bien meilleure immunité contre le bruit qui permet au RS485 de transmettre les données jusqu'à 1200m de portée. La paire torsadée permet également aux vitesses de transmission d'être beaucoup plus élevées que ce qui est possible avec des câbles droits. À de petites distances de transmission, des vitesses allant jusqu'à 35 Mbps peuvent être réalisées avec RS485 bien que la vitesse de transmission diminue avec la distance. À 1200 m de vitesse de transmission, vous ne pouvez utiliser que 100 kbps de vitesse de transmission. Vous avez besoin d'un câble Ethernet spécial pour réaliser ce protocole de communication. Il existe de nombreuses catégories de câbles Ethernet que nous pouvons utiliser comme CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A, etc. Dans notre tutoriel, nous allons utiliser un câble CAT-6E qui a 4 paires torsadées de fils 24AWG et peut supporter jusqu'à 600MHz. Il est terminé aux deux extrémités par un connecteur RJ45. Les niveaux de tension de ligne typiques des pilotes de ligne sont d'un minimum de ± 1,5 V à un maximum d'environ ± 6 V. La sensibilité d'entrée du récepteur est de ± 200 mV. Le bruit dans la plage de ± 200 mV est essentiellement bloqué en raison de l'annulation du bruit en mode commun. Un exemple de la façon dont un octet (0x3E) est transféré sur les deux lignes de communication RS485.
Composants requis
- Module de conversion 2 × MAX485
- 2 × Arduino Nano
- LCD alphanumérique 2 × 16 * 2
- Potentiomètres d'essuie-glace 2 × 10k
- Câble Ethernet Cat-6E
- Planche à pain
- Fils de cavalier
Schéma de circuit pour la communication filaire longue distance
L'image ci-dessous montre le schéma du circuit de l'émetteur et du récepteur pour la communication filaire longue distance d'Arduino. Notez que les circuits émetteur et récepteur semblent identiques, la seule chose qui diffère est le code qui y est écrit. Aussi pour la démonstration, nous utilisons une carte comme émetteur et une carte comme récepteur, mais nous pouvons facilement programmer les cartes pour qu'elles fonctionnent à la fois comme émetteur et comme récepteur avec la même configuration.
Le schéma de connexion du circuit ci-dessus est également donné ci-dessous.
Comme vous pouvez le voir ci-dessus, il existe deux paires de circuits presque identiques, chacune ayant un Arduino nano, un LCD alphanumérique 16 * 2 et un convertisseur MAX485 UART vers RS485 IC connecté à chaque extrémité d'un câble Ethernet Cat-6E via un connecteur RJ45. Le câble que j'ai utilisé dans le tutoriel mesure 25 m de long. Nous enverrons des données du côté de l'émetteur sur le câble du Nano qui est converti en signaux RS485 via le module MAX RS485 fonctionnant en mode maître.
À la réception, le module convertisseur MAX485 fonctionne comme un esclave et, en écoutant la transmission du maître, il convertit à nouveau les données RS485 qu'il a reçues en signaux UART TTL 5V standard à lire par le Nano récepteur et à afficher sur 16 * 2 LCD alphanumérique qui y sont connectés.
Module convertisseur MAX485 UART-RS485
Ce module convertisseur UART-RS485 dispose d'une puce MAX485 intégrée qui est un émetteur-récepteur à faible puissance et à vitesse de balayage limitée utilisé pour la communication RS-485. Il fonctionne avec une seule alimentation + 5V et le courant nominal est de 300 μA. Il fonctionne sur une communication semi-duplex pour implémenter la fonction de conversion du niveau TTL en niveau RS-485, ce qui signifie qu'il peut transmettre ou recevoir à tout moment, pas les deux, il peut atteindre un débit de transmission maximal de 2,5 Mbps. L'émetteur-récepteur MAX485 tire un courant d'alimentation compris entre 120 μA et 500 μA dans des conditions déchargées ou entièrement chargées lorsque le pilote est désactivé. Le pilote est limité pour le courant de court-circuit et les sorties du pilote peuvent être placées dans un état d'impédance élevée via le circuit d'arrêt thermique. L'entrée du récepteur a une fonction de sécurité qui garantit une sortie logique élevée si l'entrée est en circuit ouvert.En outre, il a de fortes performances anti-interférences. Il dispose également de LED embarquées pour afficher l'état actuel de la puce, à savoir si la puce est alimentée ou si elle transmet ou reçoit des données, ce qui facilite son débogage et son utilisation.
Le schéma de circuit ci-dessus explique comment le circuit intégré MAX485 IC est connecté à divers composants et fournit des en-têtes d'espacement standard de 0,1 pouce à utiliser avec la maquette si vous le souhaitez.
Câble Ethernet CAT-6E
Quand on pense au transfert de données longue distance, on pense instantanément à se connecter à Internet via des câbles Ethernet. De nos jours, nous utilisons principalement le Wi-Fi pour la connectivité Internet, mais auparavant, nous utilisions des câbles Ethernet allant à chaque ordinateur personnel pour le connecter à Internet. La principale raison derrière l'utilisation de ces câbles Ethernet sur des fils normaux est qu'ils offrent une bien meilleure protection contre le bruit et la distorsion du signal sur de longues distances. Ils ont une veste de protection sur la couche isolante pour se protéger contre les interférences électromagnétiques et chaque paire de fils est torsadée ensemble pour éviter toute formation de boucle de courant et donc une bien meilleure protection contre le bruit. Ils sont souvent terminés par des connecteurs RJ45 à 8 broches à chaque extrémité. Il existe de nombreuses catégories de câbles Ethernet que nous pouvons utiliser comme CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A, etc. Dans notre tutoriel, nous allons utiliser un câble CAT-6E qui a 4 paires torsadées de fils 24AWG et peut supporter jusqu'à 600MHz.
Image montrant comment une paire de fils est tordue à l'intérieur de la couche d'isolation du câble CAT-6E
Connecteur RJ-45 destiné au câble Ethernet CAT-6E
Explication du code Arduino
Dans ce projet, nous utilisons deux Arduino Nano, un comme émetteur et un comme récepteur, chacun pilotant un écran LCD alphanumérique 16 * 2 pour afficher les résultats. Ainsi, dans le code Arduino, nous nous concentrerons sur l'envoi des données et afficherons les données envoyées ou reçues sur l'écran LCD.
Pour le côté émetteur:
Nous commençons par inclure la bibliothèque standard pour piloter l'écran LCD et déclarons la broche D8 de l'Arduino Nano comme une broche de sortie que nous utiliserons plus tard pour déclarer le module MAX485 en tant qu'émetteur ou récepteur.
int enablePin = 8; int potval = 0; #comprendre
Nous arrivons maintenant à la partie configuration. Nous allons tirer la broche d'activation en haut pour mettre le module MAX485 en mode émetteur. Comme il s'agit d'un circuit intégré semi-duplex, il ne peut donc pas à la fois émettre et recevoir en même temps. Nous initialiserons également l'écran LCD ici et imprimerons un message de bienvenue.
Serial.begin (9600); // initialise série à la vitesse de transmission 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Transmitter Nano"); retard (3000); lcd.clear ();
Maintenant dans la boucle, nous écrivons une valeur entière croissante sur les lignes Serial qui est ensuite transmise à l'autre nano. Cette valeur est également imprimée sur l'écran LCD pour l'affichage et le débogage.
Serial.print ("Valeur envoyée ="); Serial.println (potval); // POTval d'écriture série sur le bus RS-485 lcd.setCursor (0,0); lcd.print ("Valeur envoyée"); lcd.setCursor (0,1); lcd.print (potval); retard (1000); lcd.clear (); potval + = 1;
Côté récepteur:
Ici encore, nous commençons par inclure la bibliothèque standard pour piloter l'écran LCD et déclarons la broche D8 de l'Arduino Nano comme une broche de sortie que nous utiliserons plus tard pour déclarer le module MAX485 en tant qu'émetteur ou récepteur.
int enablePin = 8; #comprendre
Nous arrivons maintenant à la partie configuration. Nous allons tirer la broche d'activation en haut pour mettre le module MAX485 en mode récepteur. Comme il s'agit d'un circuit intégré semi-duplex, il ne peut donc pas à la fois émettre et recevoir en même temps. Nous initialiserons également l'écran LCD ici et imprimerons un message de bienvenue.
Serial.begin (9600); // initialise série à la vitesse de transmission 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Receiver Nano"); retard (3000); digitalWrite (enablePin, LOW); // (Pin 8 toujours BAS pour recevoir la valeur du maître)
Maintenant dans la boucle, nous vérifions s'il y a quelque chose de disponible sur le port série, puis lisons les données et comme les données entrantes sont un nombre entier, nous les analysons et les affichons sur l'écran LCD connecté.
int pwmval = Serial.parseInt (); // Recevoir la valeur INTEGER du maître via RS-485 Serial.print ("I got value"); Serial.println (pwmval); lcd.setCursor (0,0); lcd.print ("Valeur reçue"); lcd.setCursor (0,1); lcd.print (pwmval); retard (1000); lcd.clear ();
Conclusion
La configuration de test que nous avons utilisée pour ce projet se trouve ci-dessous.
Le fonctionnement complet de ce projet peut être trouvé dans la vidéo ci-dessous. Cette méthode est l'une des méthodes simples et faciles à mettre en œuvre pour transférer les données sur de longues distances. Dans ce projet, nous n'avons utilisé qu'une vitesse de transmission de 9600, ce qui est bien en dessous de la vitesse de transfert maximale que nous pouvons atteindre avec le module MAX-485, mais cette vitesse convient à la plupart des modules de capteurs et nous n'en avons pas vraiment besoin. toutes les vitesses maximales lorsque vous travaillez avec Arduino et d'autres cartes de développement, sauf si vous utilisez le câble comme connexion Ethernet et que vous avez besoin de toute la bande passante et de la vitesse de transfert que vous pouvez obtenir. Jouez seul avec la vitesse de transfert et essayez également d'autres types de câbles Ethernet. Si vous avez des questions, laissez-les dans la section commentaires ci-dessous ou utilisez nos forums et je ferai de mon mieux pour y répondre. Jusque-là, adios!