DCIBUS

Een RS-485 bus.
Ook in Elektuur (november 2002). verschenen!
By De Coninck Ivo
Download the dcibus project. (10-2003)
Home.

RS-485
Bij de DCIBUS gaat de transmissie over een afgeschermde twisted-pair kabel en maakt gebruik van het RS-485 protocol.
Daarom eerst een woordje uitleg over RS-485.
Wanneer kleine hoeveelheden data met informatie moeten getransfereerd worden over langere afstanden dan is een RS-485 interface een goede keuze.
Een RS-485 interface is een elektrische specificatie voor een meerpunt schakeling die gebruik maakt van een symmetrisch netwerk.
RS-485 laat het gebruik van meerdere zenders en ontvangers op een netwerk (bus) toe.
Het specificatie document (TIA/EIA-485-A) definieert de elektrische karakteristieken van de bus en van de zender en ontvangers.
In het document staan suggesties voor het afsluiten en bedraden van het netwerk, maar hoe de pin's zijn aangesloten of welk software protocol er wordt gebruikt is vrij te kiezen. Een RS-485 netwerk kan over 256 stations beschikken indien er gebruik gemaakt wordt van ontvangers met een hoge weerstand.

De lengte van het netwerk kan tot 1200 meter bedragen bij dataoverdracht snelheden tot 10 Mbps. Voor langere afstanden kan er gebruik gemaakt worden van versterkers die het signaal regenereren en zo een nieuw RS-485 netwerk beginnen.

De RS-485 specificatie zegt niets over het te gebruiken protocol, in de praktijk wordt er veel gebruik gemaakt van een protocol dat vertrouwd is met dat van de UART die in een PC zit. In de handel zijn er verschillende soorten RS-485 omzetters te verkrijgen, voor microcontrollers kan je een RS-485 transceiver aansluiten aan de seriële poort. De meeste netwerken maken gebruik van een extra signaal voor controle van de transceiver. Aan de zijde van de PC kan men hiervoor gebruik maken van het RTS signaal.

De reden waarom RS-485 netwerken over zo een grote lengte communiceren is omdat de ontvangers het verschil meten in spanning tussen de twee geleiders van de kabel. De meeste storingen die op de geleiders voorkomt is voor beide gelijk, hierdoor verandert het spanningsverschil tussen de geleiders niet. Deze storingen oefenen daarom geen invloed op de ontvanger waardoor een goede werking van het netwerk is verzekerd. Van een common-mode spanning (zoals bij RS232) is er ook geen sprake dit omdat de retour via de tweede geleider loopt.

Voor de zender moet het spanningsverschil minstens 1,5 V zijn, zodat de interface een voldoende tolerantie heeft voor niet gemeenschappelijke ruis en verzwakking. In een knooppunt moet de bedrading zo kort mogelijk gehouden worden.
In de meeste gevallen wordt een getwiste (twisted-pair) afgeschermde kabel gebruikt omdat deze goede eigenschappen heeft om ruis te voorkomen.

De datasheets van interface chips geven de niet inverse lijn de naam Line A en de inverse lijn de naam Line B. Wanneer spanning op Line A meer dan 200mV groter is dan deze van Line B dan de is uitgang van de ontvanger hoog. In het omgekeerde geval is de uitgang van de ontvanger laag. Indien het verschil tussen Line A en Line B minder dan 200 mV is, dan is de status van de uitgang ongedefinieerd.

Figuur 1 toont een voorbeeld van een mogelijk RS-485 netwerk.

RS485 netwerk


In het begin van het netwerk staan drie weerstanden twee van 470 ohm en een van 120 ohm. Deze weerstanden zorgen ervoor dat de status van de lijn behouden blijft wanneer er geen driver actief is.

De afsluitweerstanden.
Aan het begin en het einde van een RS-485 netwerk moet een afsluitweerstand geplaatst worden.
De afsluitweerstanden reduceren reflecties in de kabel die ervoor kunnen zorgen dat de ontvanger een logische toestand verkeerd ontvangt en moeten dus steeds geplaatst worden! De waarde voor de afsluitweerstand is voor een RS-485 netwerk tussen de 100 en 150 ohm. Voor de DCIBUS die op een baudrate werkt van 115200 Hz is 120 ohm als waarde voor de afsluitweerstand een goede keus. Plaats alleen aan het begin en het einde van het netwerk een afsluitweerstand, meerdere weerstanden hebben geen nut en leggen het netwerk eigenlijk in kotsluiting waardoor de componenten voor de transmissie overbelast worden.
De RS-485 specificatie raad een 100 ohm weestand (0.5 W) aan in serie met de massa bij iedere knoop in het netwerk. Indien de spanning van de massa op twee knopen verschilt dan zullen de weerstanden de stroom beperken.

Voor de DCIBUS maken we gebruik van de transceiver: SN75LBC184.
Dit IC heeft de volgende eigenschappen.
. Integrated Transient Voltage Suppression
. ESD Protection for Bus Terminals Exceeds:
    ±30 kV IEC 61000-4-2, Contact Discharge
    ±15 kV IEC 61000-4-2, Air-Gap Discharge
    ±15 kV EIA/JEDEC Human Body Model
. Circuit Damage Protection of 400-W Peak (Typical) Per IEC 61000-4-5
. Controlled Driver Output-Voltage Slew Rates Allow Longer Cable Stub Lengths
. 250-kbps in Electrically Noisy Environments
. Open-Circuit Fail-Safe Receiver Design
. 1/4 Unit Load Allows for 128 Devices Connected on Bus
. Thermal Shutdown Protection
. Power-Up/-Down Glitch Protection
. Each Transceiver Meets or Exceeds the Requirements of TIA/EIA-485 (RS-485) and ISO/IEC 8482:1993(E) Standards
. Low Disabled Supply Current 300 µA Max
. Pin Compatible With SN75176

De print voor RS-485 omzetter.
De print die de signalen van RS-232 naar RS-485 omzet is zeer eenvoudig van opzet. Om het spanningsniveau van de seriële poort aan te passen aan dat van de SN75LBC184 maken we gebruik van een MAX232. De elco's zijn nodig voor de interne DC/DC omzetter van de MAX232. De SN75LBC184 zorgt voor het verzenden en ontvangen van de data. Dit IC mag ook vervangen worden door een 75176 alleen is deze niet beschermd tegen ESD. Omdat pin 2 van dit IC aan de massa ligt wordt alle op de bus aanwezige data altijd ontvangen. Pin 3 is via de MAX232 doorverbonden met pin7 (RTS) van de seriële poort. Het signaal RTS van de seriële poort gaan we gebruiken om via de software de zender te activeren en deactiveren. Jumper 1 zorgt er voor dat de afsluitweerstand is aangesloten. Jumper 2 en 3 zorgen ervoor dat de status van de lijn behouden blijft wanneer er geen driver actief is. Omdat we de omzetter aan het begin van de bus plaatsen moeten alle drie de jumpers gebruikt worden. Voor de voeding is een standaard 9-V-net-adapter aangesloten op K3 geschikt. Bijzondere eisen worden aan de adapter niet gesteld dit omdat IC3 (7805) zorgt voor een keurige gestabiliseerde voeding van 5V.

RS485 converter

Onderdelenlijst
Print 010113-1
Weerstanden:
R1, R2 =k470
R2 = k120
R4 = k100
Condensatoren:
C1, C2 = 100n
C3, C4, C5, C6, C7, C8 =10µ/50V radiaal
Halfgeleiders:
D1 = 1N4001
IC1 = MAX232
IC2 =7805
IC3 = SN75LBC184 of 75176
Diversen:
K1 = haakse 9-polige sub-D-connector voor printmontage, female
K2 = haakse 9-polige sub-D-connector voor printmontage, male

Het schema voor een station.

Het schema voor een station.


Onderdelenlijst
Print 010113-2
Weerstanden:
R1, R6 = weerstand-array 8 X 10k
R7 = weerstand-array 8 X 1k
R2...R5 = 1K
R8, R9 = k470
R10 = k120
R11 =k100
P1 = 10k instelpotmeter
Condensatoren:
C1 = 1µ
C2, C5, C7, C9, C10, C11, C12 =100n
C3, C4 = 15p
C6 = 10µ/16V
C8 = 100µ/25V
Halfgeleiders:
IC1 = 4021
IC2 = AT90S8515
IC3 = TL7705
IC4 = SN75LBC184 of 75176
IC5 = 7805
D1...D12 = rechthoekige rode LED, high efficiency
D13 = 1N4001

Diversen:
X1 = 3.6864 MHz kristal
S1 = 8-polige DIP-schakelaar
K1, K2 = 10-polige enkelvoudige printheader
K3 = haakse 9-polige sub-D-connector voor printmontage, male
K4 = haakse 9-polige sub-D-connector voor printmontage, female
K5 = 2X7-polige boxheader voor naar LCD-module 2 X 20 tekens.
K6 = 2-polige printkroonsteen, steek 5mm

Bijna al het werk in het station rust op de schouders van de AT90S8515 van Atmel. In deze microcontroller zit de software die voor de goede werking van een station zorgt. De klokfrequentie is door het kristal X1 vastgelegd op 3.6864 MHz. Bij deze frequentie is er geen afwijking bij de baudrate-generator voor de UART die wordt gebruikt voor de communicatie met de PC.
Via het schuifregister (IC1) kunnen we de toestand van de jumpers 1...8 uitlezen. Jumpers 1...6 worden gebruikt om het station een adres te geven. Wanneer er geen enkele jumper gebruikt is dan heeft het station adres: 63. Wanneer alle 6 jumpers zijn gebruikt krijgt dit station adres 0. In totaal kan men dus 63 stations op een bus plaatsen. Opgelet plaats nooit twee stations met het zelfde adres op een bus, dit omdat beide stations op hetzelfde moment zullen willen antwoorden en hierdoor de data op de bus verminkt wordt!
De jumpers 7 en 8 zijn vrij en kunnen eventueel gebruikt worden om zelf nog wat extra's aan een station toe te voegen. De software voor de microcontroller moet dan wel aangepast worden.

Led D9 geeft aan dat de AT90S8515 klaar is om data te ontvangen. Gedurende de tijd dat het station actief is (data ontvangen en zenden)zal led D12 oplichten. Led D10 en led D11 worden niet gebruikt maar zijn er voor eventuele uitbreidingen.
Pin 32...39 van de Atmel worden gebruikt als uitgangen en sturen de led's D1...D8 aan. Tevens staan de uitgangen in verbinding met een header, zo kan een uitgangsinterface aangesloten worden. Voor de ingangen maken we gebruik van pin 21...28 die in verbinding staan met pull-down weerstanden. De ingangen staan ook in verbinding met een header voor een eventueel aan te sluiten ingangsinterface.

Voor het resetten van de microcontroller is gekozen voor een TL7705. Elco C1 vormt het tijdbepalende element voor de resetpuls. Voor het resetsignaal gebruiken we de negatieve reset-uitgang.

Tevens is het mogelijk van een 2 x 20 karakters LCD display aan te sluiten. De aansluiting gebeurt via header K5. Instellen van het contrast kan door middel van potmeter P1 (±2k). PD2 en PD3 zijn de besturingslijnen voor het display (RS en E). Pin 5 van het display (R/W) ligt aan de GND waardoor het alleen mogelijk is data naar het LCD te sturen.


De bus aansluiten.
Figuur 3 laat een voorbeeld zien van hoe je drie stations op de bus kan aansluiten en hoe de afsluitweerstanden moeten aangesloten worden.

Voorbeeld RS485 netwerk.

Het adres van een station kan men instellen met DIP schakelaars 1...6.
In het voorbeeld van figuur 5 is het adres 12 gekozen (binaire waarde 4 + 8 = 12).
Dit station staat aan het einde van de bus omdat Jumper 3 ook gebruikt.

Adres instellen.


Het is niet toegelaten een station op de bus te plaatsen met een adres dat al door een ander station is gebruikt. Indien dit wel gebeurt zullen de twee stations met hetzelfde adres op het hetzelfde tijdstip data op de bus plaatsen woordoor de data verminkt zal worden.
Na het aansluiten van de voeding (standaard 9-V-net-adapter) zal na een tijdje LED D9 gaan branden. Hierdoor weten we dat het IC klaar is voor data te ontvangen en verzenden.
Indien een LCD display is aangesloten op het station dan zal de volgende tekst verschijnen:
" DCI-BUS Addr: 03 "
" waiting for data.U "
De waarde 03 is de waarde van het ingestelde adres voor het station.
De "U" op het einde van de tweede regel is de versie nummer van de software in de microcontroller.
De DCIBUS is getest met een kabel van 75 meter lengte met aan het einde 3 stations.
De software voor de PC.

De software.

Na het aansluiten van de hardware en het opstarten van de software moet de juiste poort ingesteld worden. Klik op Select port in het menu Ports en kies de juiste seriële poort. Klik nu op open port in het menu Ports en er verschijnt een dialoogvenster met de melding dat het openen van de poort gelukt is. Indien er een poort geselecteerd is die niet bestaat dan verschijnt de melding "Het systeem kan het opgegeven bestand niet vinden". Klik nu op Run in het menu Bus en het programma is nu in RUN mode.
Naast elke drukknop "SetStation" is een UpDown component kies hiermee een station nummer. Klik nu op de drukknop "SetStation" en het station is on-line, dit is zichtbaar omdat links van de drukknop het getal verschijnt van het gekozen station. Vanaf nu zal de tekst die in de twee tekstboxen staat verschijnen op het display van het gekozen station en de uitgangen die zijn aangevinkt worden geset. Tevens wordt de toestand van de ingangen zichtbaar. Met de software is het mogelijk vier stations tegelijk te controleren.
Met de UpDown knop "adjust bus" kan de tijd voor de kritische zone (figuur6) aangepast worden van 0 tot 20 msec. Een waarde van 3 tot 6 werkt goed op een Pentium 400 en 475. Deze optie kan misschien van nut zijn bij de huidige generatie van pc's die veel sneller zijn.



Omdat een programma dat onder Windows werkt niet real-time is, kunnen er fouten ontstaan op de bus. Dit is goed te zien op figuur 6, indien het RTS signaal van de seriële poort niet laag is voor dat een station data terug zend dan is deze data verloren. Dit gebeurt wanneer het besturingssysteem (WINDOWS) het nodig acht alle beschikbare processor tijd te moeten gebruiken voor een ander proces. Dit kan gebeuren door het opstarten van andere software, plaatsen van een nieuwe cd-rom, screensaver, antivirus ....enz.
Hierdoor gebeurt het dat het RTS signaal niet tijdig laag is en er data verloren zal gaan.
Willen we dit vermijden dan moet in de software een beveiliging voorzien worden om te vermijden dat we de toestand van de ingangen verkeerd inlezen.
Bij de DCIBUS gaat dit als volgt in zijn werk.
* 0 Aan de zijde van alle stations is het signaal send enabled LAAG.
* 1 Aan de zijde van de PC wordt het RTS signaal LAAG geset.
* 2 De PC zet 2 x ASCII code 10 op de bus.
* 3 De PC zet het adres van het station dat we willen benaderen wordt op de bus.
* 4 De PC zet de toestand voor de uitgangen op de bus.
* 5 Aan de zijde van de PC wordt het RTS signaal HOOG geset.
* 6 Het station met het juiste adres zet nu het signaal send enabled HOOG.
* 7 Het station zet zijn addres op de bus.
* 8 Het station zet de status van zijn ingangen op de bus.
* 9 Het station zet zijn addres terug op de bus.
* 10 Het station zet zijn signaal send enabled LAAG.
* 11 De PC software doet een controle of de eerste ontvangen byte gelijk is aan het verzonden adres.
* 12 De PC software bewaart de ontvangen tweede byte (waarde van ingangen).
* 13 De PC software doet een controle of de derde ontvangen byte gelijk is aan het verzonden adres.
* 14 Indien de controle 12 en 14 juist is dan wordt de waarde van de ingangen aangepast. Indien dit niet het geval is zal dit de eerstvolgende cyclus gebeuren waar geen fout gebeurt is. Op deze manier zijn we er zeker van dat de ingangen altijd juist ingelezen worden. Elke keer dat er een fout ondekt is verschijnt er een melding met de nummer van het station waarvan de data verkeerd is ontvangen. Indien we een station via de software actief maken dat niet op de bus is aangesloten zal deze foutmelding ook verschijnen.
Indien we onze eenvoudige RS-232 naar RS-485 omzetter zouden vervangen door een omzetter met een een microcontroller met databuffer dan kan dit probleem verholpen worden. Dit zal dan ook een toekomstig project worden.

De software aanschaffen.
Indien je de software en de HEX-listing voor de microcontroller wil ontvangen, dan kan dit via e-mail:
e-Mail



De DCIBUS aansturen via een extern programma.
Het programma Busmstr.exe bevat een eenvoudige COM (Component Object Model) server interface.
Hierdoor is het mogelijk het programma Busmstr.exe op te starten en de hardware aan te sturen via een programma zoals Excel en Visual Basic.
In dit voorbeeld gaan we er vanuit dat er twee stations op de bus zijn aangesloten.
Het ene station heeft als adres 10 gekregen en het andere adres 4.
Indien het programma Busmstr.exe nog nooit is gestart op uw pc start dit dan eerst en sluit het onmiddelijk terug af.
Start het programma Excel en er verschijnt een dialoogvenster met de melding of u de macro's wil inschakelen.
Druk op macro's inschakelen en start daarna de Visual Basic Editor (Alt + F11).
Klik op Objectenoverzicht (F2) in het menu Beeld.
Ga met de muis naar het venster van Objectenoverzicht en klik met de rechtermuisknop.
Klik op verwijzingen in het pop-up menu.
Kies bladeren in het dialoogvenster 'Verwijzingen' en kies als bestandstypen 'Uitvoerbare bestanden("*.exe,*.dll")'.
Ga naar de map waar Busmstr.exe in staat, kies Busmstr.exe en klik op openen.
In het venster Klassen is er nu een Object met de naam 'TBusServer';.
Klik hier op en de leden van het object TBusServer verschijnen in het venster.
Dit zijn de functie's About, InputGet, LCDTxt en OutputSet.
Ga terug naar Excel en klik op de knop 'INFO'.
Het programma Busmstr.exe wordt gestart. Kies de juiste seriële poort, open deze en start de bus op.
Klik op 'Server mode' in het menu 'Options'.

Kies een station.

Er verschijnt een dialoog venster waarin je alle stations die aan de bus hangen moet selecteren.
Selecteer nu station 10 en 4 en druk op de drukknop "OK".
Ga terug naar Excel en sluit het dialoogvenster met info over het programma Busmstr.exe.
Klik nu op de knop 'Refresh'.
Het getal in het vak 'C4' geeft de toestand van de ingangen voor station 4 weer.
De tekst in vak 'C8' verschijnt op het LCD van station 4 en het getal dat we in vak 'C6' plaatsen is de toestand voor de uitgangen van station 4. De tekst voor het display die we in het vak 'C8' plaatsen mag niet langer zijn dan 40 karakters!.
Ga nu naar 'ontwermodus'.
Klik met de rechtermuisknop op de knop 'Refresh' en kies 'Programmacode' weergeven.
Nu kan je de code bewerken. Bestudeer deze je kan ze nodig hebben voor verdere automatisering van je excel bestand.


Opmerkingen :
1 Indien het programma Busmstr.exe is opgestart via Excel zal dit iedere keer als we naar de ontwerpmodus overschakelen afgesloten worden!
2 Sluit nooit het server (Busmstr.exe) programma af als het client (Excel in dit geval) programma nog actief is!

Voor de laatste info over de DCIBUS neem een kijkje op mijn homepage:
http://home.planetinternet.be/~dc11cd/index.htm
Een bug ontdekt of een suggestie is altijd welkom.
E-mail: e-Mail
Sorry indien ik niet alle e-mail kan beantwoorden.

To top           Home