Skip to main content

Az RS-485 interfész automatikus irányvezérlése

Megjelent: 2019. június 11.

microchip lidEgyszerűsége miatt sokan szívesen használják az informatikai eszközök közötti kommunikáció „ősidők óta” létező aszinkron soros technológiáját, az RS-232-t és annak nagyobb hatótávolságú, RS-485-ös változatát.
A bemutatott projekt automatikus irányváltással könnyíti meg az RS-485-öt használó szoftvertervezők életét. A konkrét példán túl a cikk nagy erénye, hogy „kézen fogva” vezeti végig az e témában járatlan mérnököt egy erősen automatizált, a gyakorlott programozó kezében rendkívül hatékony szoftverfejlesztési folyamaton.

 

Sok éven át az RS-232 volt a személyi számítógépek soros kommunikációs szabványa. Ennek az egyszerű, mégis hatékony interfésznek a hardver- és szoftvertámogatását mindaddig beépítették minden PC-be, amíg a gyorsabb, de bonyolultabb USB-szabvány át nem vette a szerepét. Mindazonáltal az RS-232 szabvány a mai napig megőrizte népszerűségét számos soros kommunikációs alkalmazásban, mivel egyszerű, és nem kell az alkalmazásáért licencdíjat fizetni. Az RS-232 szoftvertámogatása is megmaradt a jelenkor PC-inek operációs rendszereiben, és a hardvertámogatás is elérhető egy – számos forrásból beszerezhető – „USB-soros” átalakító adapter segítségével.

 

microchip figure1

1. ábra  Programozható kombinációs logika érzékeli a PC TX-en az adási startbit kezdetét, és 30 ns-on belül adási irányra kapcsolja az RS-485 interfészt

 
Az RS-232 egyetlen komoly alkalmazási nehézsége az általa összekapcsolt két informatikai eszköz között megengedhető korlátozott távolság. Az RS-485 szabvány azzal orvosolja ezt a problémát, hogy az RS-232 be- és kimeneteit differenciális vonalmeghajtókra és vonalvevőkre cseréli. Kevés kivételtől eltekintve az RS-485 adóvevők egy irányvezérlő funkciót is tartalmaznak az adási és vételi irány meghatározására, amely a soros kommunikációval csupán félduplex üzemmód használatát teszi lehetővé (azaz egyidejűleg csak az egyik irány használható). Ez nem jelent problémát az olyan eszközökben, ahol ez az irányváltási folyamat gyorsan megy végbe. Ha viszont RS-485-hardverrel akarunk kiegészíteni egy RS-232 csatlakozási felületet, automatikus irányvezérlést kell megvalósítanunk az adatáramlás közben szükséges irányváltások kezelésére. Sajnos azonban a PC-kbe épített RS-232 interfészek nem rendelkeznek olyan (közismert néven „handshake”) vezérlőjelekkel amelyek elég gyorsak lennének ahhoz, hogy megfeleljenek a nagy sebességű soros adatátvitelhez szükséges gyakori irányváltás követelményének.

 

microchip figure2

2. ábra  A startbit elindít egy belső időzítőt, amely egészen a stopbit közepéig fenntartja az adásirányra kapcsolt állapotot

 
A mai mikrovezérlők (MCU-k) némelyike (mint például a Microchip PIC10F320 típusa is) rendelkezik olyan – a processzormagtól függetlenül működő – beépített perifériákkal (Core Independent Peripherals – CIP), amelyekkel ez a probléma könnyedén megoldható.
A PIC10F320 CIP-ek felhasználása csökkenti a szükséges külső alkatrészek mennyiségét, és ezzel olcsóbbá teszi a megoldást. A PIC10F320 progrmozható kombinációs logikai hálózatok kiépítésére alkalmas CIP egységét használhatjuk a PC által kiadott adáskezdeményező (TX) startbit érzékelésére. Ha ez megtörtént, az RS-482 interfész 30 ns-on belül adásirányra kapcsolódik (1. ábra), és elindít egy belső időzítőt, amely fennntartja az adásirányt a stopbit közepéig (2. ábra). Az RS-485 vezetékeken felhúzó és lehúzó ellenállások tartják az adatátviteli vezetéket a „tétlen” állapotnak megfelelő közbenső jelszinten a leállási idő – illetve bármilyen, ezt követő nyugalmi időszak – tartamára.

 

microchip figure3

3. ábra  A mikrovezérlő érzékeli, ha az adási stopbit már nincs jelen, és ekkor megnyújtja az adásirányra kapcsoló jelet


A mikrovezérlő arra is programozható, hogy érzékelje, ha az adási stopbit már nincs jelen, és ezzel meghosszabbítsa az olyan irányvezérlő jeleket, mint a BREAK (3. ábra). A belső kombinációs logika mindaddig adásirányon tartja az interfészt, amíg a PC el nem engedi a TX kimenetet. Amikor ezt követően a TX magas szintre kapcsolódik, a kombinációs logika 30 ns-on belül adásról vételre kapcsol (4. ábra).

 

microchip figure4

4. ábra  Amikor a TX jel magas szintre vált, a kombinációs logika kevesebb mint 30 ns alatt adásról vételre kapcsol

 

Az 5. és 6. ábrán egy tipikus hardverkonfiguráció látható. Vegyük észre, hogy az adás- és vételirány vezérlőjelei külön vannak választva, és a „vétel engedélyezése” (Receive Enable – RE) bemenet alacsony szintre van kapcsolva. Mivel a vétel állandóan engedélyezve van, az összes küldött adatot veszi is az interfész (a saját adását is beleértve – A szerk. megj.) Ezért az RS-485 buszon történő adatütközések könnyen felismerhetők arról, hogy a vett karakterek azonosak-e az elküldöttekkel.

 

microchip figure5

5. ábra  Az automatikus irányvezérlésű RS-486 adóvevő kapcsolási rajza

 
A bemutatott PC-oldali konfigurációt egy ADM00393 USB-soros adapter vezérlőjeleihez való csatlakozásokkal mutatjuk be. Ez az adapter adja az RS-485 adóvevő számára szükséges szoftverinterfészt a PC soros API-funkcióihoz, valamint a hardverillesztést a normál 3,3 V-os vagy 5 V-os logikai szintekhez.
A bemutatott J3 programozóinterfész kényelmes lehetőséget nyújt az áramkörbe fixen beépített SOT23-6 tokozatú eszköz programozásához. Még arra sincs szükség, hogy a J3 csatlakozóba csatlakozódugót illesszünk; ehhez egy olyan prog-ramozóeszköz közvetlen csatlakoztatása is elegendő, mint a PICkit™ 3.

 

microchip figure6

6 . ábra  Az automatikus irányvezérlésű RS-485 adóvevő NyÁK-terve

 

A programkód fejlesztése

Az MPLAB X integrált fejlesztőkörnyezet (Integrated Design Environment – IDE), az XC8 fordítóprogrammal és az MPLAB Code Configurator (MCC) plug-in szoftverrel kiegészítve az alkalmazás egyszerű fejlesztését teszi lehetővé. Mindez a Microchip honlapján elérhető és onnan ingyenesen letölthető.

 

microchip figure7

7. ábra


Nyissa meg az MPLAB X-et és a File>New Project beállításvarázslót használva hozzon létre egy PIC10F320 projektet a C programnyelv alkalmazásával. Ha eddig nem tette volna meg, töltse le az MCC plugint a Tools>Plugins Download menüpont segítségével. Használja az MCC-t a Tools>Embedded menu opcióval, vagy kattintson az eszközkészleten található MCC ikonra. Az eszközerőforrások (Device Resources) ablakban az NCO1 (Numerically Controlled Oscillator) és CLC1 (Configurable Logic Cell) opciókra duplán kattintva adja hozzá a projekt erőforrásaihoz (Project Resources). A projektablak ekkor a 7. ábrán látott megjelenésre hasonlít, amikor kiválasztjuk a System Module opciót a „rendszererőforrások” (System Resources) ablakban, és a SOT6 tokozatot a lábkiosztás-kezelő (Pin Manager) fülnél. Jelölje ki a belső oszcillátor (Internal Oscillator) és a WDT opciókat, ahogy a 7. ábrán látható. Kattintson a Registers fülre a konfigurációs beállítási lehetőségek megmutatásához és kiválasztásához (8. ábra).

 

microchip figure8

8. ábra


Ezután válassza a Pin Module rendszererőforrást, és konfigurálja az eszköz kivezetéseit úgy, ahogy az a 9. ábrán látható. Vegyük észre, hogy a nem használt A2 és A3 portkivezetéseket bemenetként konfiguráltuk egy gyenge felhúzással, hogy a rendszer ne érzékelje azokat szabadon hagyott, „lebegő” bemenetként.

 

microchip figure9

9. ábra


Válassza ki ezután az Interrupt Module funkciót, amint azt a 10. ábra mutatja, és ezen belül az NCO1 rendszererőforrást, és konfigurálja azt a 11. ábrán látható módon. Az NCO1 kimeneti frekvenciáját (Output Frequency) úgy kell meghatározni, hogy az RS-485 használni kívánt bitfrekvenciáját 9,5-el elosztjuk. Ez tehát az NCO1 egy periódusát 9,5 adatbitnyi időtartamra állítja be.
A bemutatott példában az NCO kimeneti frekvenciáját az RS-485 38 400 baud-os adatsebességéhez állítottuk be.

 

microchip figure10

10. ábra


Az NCO1, amelynek a működése bekapcsolás után nincs engedélyezve, 0-ról indul a CLC1 programmegszakítás hatására, és az első periódus végén állítja 1-be az NCO1 megszakítási jelzőbitet. Az NCO1 megszakítása nincs engedélyezve, ehelyett a megszakítási jelzőbitet ciklikusan lekérdezzük. Ezzel a továbbiakban még bővebben foglalkozunk.
Ezt követően válassza ki a CLC1 rendszererőforrást, és konfigurálja azt a 12. ábra szerint. Az RS-tárolót a CLCIN1 bemenetre érkező TX startbit lefutó éle billenti be, és az első NCO1-periódus végén törlődik, feltéve, hogy a CLCIN1-en a stopbit magas szinten van (a logikai függvény tehát CLCIN1 AND NCO1OUT). Ha ez nem történik meg, a szoftver újrakonfigurálja a CLC1-et, amivel törli az RS-tárolót a TX jel felfutó élén azáltal, hogy ráengedi a CLCIN1 igaz értékét a 4. OR-kapu bemenetére. A 4. OR-kapu kimenete invertálva van, ami biztosítja, hogy az RS-tároló törölt állapotban legyen az áramkör alaphelyzetbe állításakor. Ezt a statikus törlőjelet a rendszer alaphelyzetbe állításának utolsó lépéseként távolítja el a szoftver, közvetlenül azt megelőzően, hogy a rendszer a fő hurokba belépne.

 

microchip figure11

11. ábra


A kódkonfigurátor utolsó lépéseként a „Project resources” ablak „Generate” gombjára kattintva indítsa el az automatizált kódgenerálást. Amint a fejlesztőszoftver ezzel elkészült, mindössze annyi van hátra, hogy minimális korrekciókat hajtson végre a CLC1 alaphelyzetbe állításakor, a programmegszakítás-kiszolgálórutinban és a program fő ciklusában.

 

microchip figure12

12. ábra


Ennek keretében egyetlen sort kell hozzáadni a CLC1 megszakításkiszolgáló programjában, amelyet az MCC a clc1.c forrásnyelvi programban helyez el (13. ábra). Ez a sor engedélyezi az NCO1 működését.
Végül pedig a főprogramban a megszakításokat kell engedélyezni, valamint a CLC1 RS-tároló törlését eltávolítani. Ezekkel a főprogram a 14. ábra szerint alakul. A CLC1 megszakítás indítja el az NCO1-et. Az első NCO-periódus végén az NCO1IF megszakítási jelzőbit beíródik. A fő programhurok lekérdezi ezt az eseményt, és amint az bekövetkezik, leállítja az NCO1-et. Ezután a program törli az NCO1 számlálóját és a megszakítási jelzőbitet, és ezzel felkészül a soron következő startbit megérkezésére.

 

microchip figure13

13. ábra


Az utolsó lépés annak meghatározása, hogy a stopbit „valódi” volt-e. Ha nem, az RS-tároló nem törlődik és a CLC1 kimenet magas szinten marad. Ha viszont az RS-tároló nem törlődött, a szoftver újrakonfigurálja a CLC-t, amivel törli az RS-tárolót, amint a TX-vezeték (CLCIN1) magas szintre vált. A szoftver ezt követően meghatározatlan ideig várakozik erre az eseményre. Ha ez végül megtörténik, az újrakonfigurálás eltűnik és a főprogram újra belép az NCO1 megszakításra várakozó ciklusba.

 

microchip figure14

14. ábra

 

Összefoglalás

Ha egy RS-485 hardverinterfészt kívánunk készíteni egy PC RS-232 soros portjához, egy megfelelő magfüggetlen perifériákkal rendelkező mikrovezérlő felhasználásával automatikus irányváltással egészíthetjük ki azt. A cikkben egy olyan tipikus hardverkonfigurációt ismertettünk, amely automatikus adási/vételi irányvezérlést valósít meg egy mindössze hat kivezetéses mikrovezérlő felhasználásával. Ezenkívül bemutattuk, hogyan lehet ehhez az alkalmazáshoz a legegyszerűbben programkódot fejleszteni. Bár a projekt céljának elérésére léteznek más megoldások is, ez a módszer a kevesebb alkatrész, az olcsóbb ár és a jobb teljesítőképesség előnyét ajánlja a végfelhasználónak.

 

Szerző: Ward Brown – Microchip Technology, Inc.

 

 www.microchip.com

 

Még több Microchip