SN75176BP: send seriel data over to ledninger med RS-485

En mikrocontrollers serielle port (UART) fungerer fint hen over et skrivebord, men over flere tiere eller hundreder af meter kabel ødelægger støj og forskelle i stelpotentiale bittene. RS-485 løser det ved at sende hver bit som en spændingsforskel mellem to ledninger. TI SN75176BP er en klassisk RS-485/RS-422-transceiver i et 8-benet DIP-hus: én driver og én modtager, som deler det samme ledningspar. Guiden forklarer, hvordan differentielle signaler virker, hvad hvert ben gør, og følger én byte hen over bussen fra start til slut.

Det grundlæggende: en forskel i stedet for et niveau

Et almindeligt logiksignal er enkeltledet (single-ended): modtageren sammenligner én ledning med sit eget stel. Hvis en motor eller et langt kabel lægger 2 V støj på ledningen, eller de to ender af kablet har lidt forskelligt stelpotentiale, kan et 0 blive til et 1.

RS-485 er differentielt. Driveren lægger bitten på to ledninger, A og B, i hver sin retning: ved logisk 1 er A højere end B, ved logisk 0 er B højere end A. Modtageren ser kun på forskellen A − B. Støj, der induceres i et snoet par, rammer begge ledninger næsten lige meget; den flytter begge spændinger, men ændrer næsten ikke forskellen. SN75176BP's modtager melder 1, når A − B er mindst +0,2 V, og 0, når den er −0,2 V eller lavere, med ca. 50 mV hysterese imellem.

RS-485 er også en bus: op til 32 standard-transceivere kan sidde på det samme par. Da ét par bærer begge retninger, må kun én knude drive det ad gangen. Det kaldes halvdupleks, og det er grunden til, at SN75176BP har hver sit enable-ben til driver og modtager.

Benene på SN75176BP

SN75176BP er PDIP-8-udgaven (P-hus) af SN75176B. Logikbenene sidder i den ene side, bus- og forsyningsbenene i den anden (TI SLLS101I, figur 4-1):

  • Ben 1 – R: modtagerens udgang. Logisk 1, når A − B ≥ +0,2 V, logisk 0, når A − B ≤ −0,2 V. Går i høj impedans (Z), når /RE er høj.
  • Ben 2 – /RE: modtager-enable, aktiv lav. Lav = R drives; høj = R flyder.
  • Ben 3 – DE: driver-enable, aktiv høj. Høj = driveren driver A og B; lav = A og B slippes (Z).
  • Ben 4 – D: driverens indgang. Med DE høj giver D = 1 A høj og B lav; D = 0 giver A lav og B høj.
  • Ben 5 – GND og ben 8 – VCC: én 5 V-forsyning (4,75–5,25 V).
  • Ben 6 – A og ben 7 – B: bussen. Driverens udgange og modtagerens indgange er forbundet inde i chippen.
Benforbindelser på SN75176BP i PDIP-8 set oppefra: ben 1 R, 2 /RE, 3 DE, 4 D til venstre; ben 8 VCC, 7 B, 6 A, 5 GND til højre; hak og prik markerer ben 1.
SN75176BP set oppefra (P-hus, PDIP-8), tegnet efter TI SLLS101I figur 4-1.

Kredsløbet: to knuder på én bus

Fordi DE er aktiv høj og /RE aktiv lav, kan de to ben forbindes og styres af én mikrocontroller-udgang, RETNING. RETNING = 1 tænder driveren og slukker modtageren (send); RETNING = 0 gør det modsatte (lyt). UART'ens TX-ben går til D, og dens RX-ben kommer fra R. Figuren viser to sådanne knuder forbundet med et snoet par:

To knuder, hver en 5 V-UART forbundet til en SN75176BP: TX til D (ben 4), RX fra R (ben 1) med 10 kΩ pull-up og én RETNING-ledning til både DE (ben 3) og /RE (ben 2). A (ben 6) og B (ben 7) danner et snoet par med en 120 Ω-modstand i hver ende, 560 Ω bias-modstande ét sted på bussen fra A til +5 V og fra B til GND samt en fælles GND-leder.
Vores egen tegning af en minimal RS-485-bus med to knuder. Termineringsmodstandene sidder i kablets to fysiske ender; bias-modstandene monteres kun ét sted.

Terminering: et langt kabel opfører sig som en transmissionslinje med en karakteristisk impedans på ca. 120 Ω for typisk snoet par. En 120 Ω-modstand mellem A og B i hver ende opsuger signalet i stedet for at reflektere det (TI figur 7-1). Over få meter ved 9600 baud kan det gå uden, men det er den rigtige vane.

Bias (fail-safe): når ingen knude sender, er alle drivere slukket, og A og B flyder. Ifølge modtagerens sandhedstabel er udgangen så ukendt, og en UART opfatter støjen som startbits. To 560 Ω-modstande, A til +5 V og B til GND, holder den hvilende bus på 5 V × 60 Ω / (560 + 60 + 560) Ω ≈ +0,25 V, fordi de to 120 Ω-termineringer parallelt giver 60 Ω. Det ligger over tærsklen på +0,2 V, så alle modtagere læser et stabilt 1 – præcis UART'ens hvileniveau.

Pull-up på RX: mens en knude sender, er dens egen /RE høj, og R flyder. En 10 kΩ pull-up holder mikrocontrollerens RX-ben på hvileniveau (1) imens, så det ikke opfanger støj.

Én byte trin for trin

  1. Hvile. Alle RETNING-ledninger er 0: alle drivere er slukket, alle modtagere tændt. Bias-netværket holder A − B på ca. +0,25 V, så alle R-udgange og RX-ben er 1.
  2. Tag bussen. Knude 1 sætter RETNING = 1. Driveren tænder inden for 120 ns (tPZH maks.), og da TX stadig hviler på 1, driver den A høj og B lav: A − B springer til ca. +1,5…+2,5 V over belastningen på 60 Ω. Knude 1's egen modtager er nu slukket, og dens pull-up holder RX på 1.
  3. Startbit. UART'en sender byten 0x55. Startbitten sætter TX = D = 0, så driveren vender parret: Nu er B højere end A. Ved knude 2 ligger A − B langt under −0,2 V, og højst ca. 35 ns senere (modtagerens tPHL) er R = 0. Knude 2's UART ser den faldende flanke og begynder at tage tid.
  4. Databits. UART'en sender bit 0 først. 0x55 er binært 0101 0101, så bittene går ud som 1, 0, 1, 0, 1, 0, 1, 0. Hver bit vender parrets polaritet, og knude 2's R-udgang gentager D med kun nogle få titals nanosekunders forsinkelse – ubetydeligt i forhold til bittiden på 104 µs ved 9600 baud.
  5. Stopbit. TX = 1 igen i én bittid: A − B er positiv, og knude 2 har hele byten.
  6. Slip bussen. Først når stopbitten helt har forladt skifteregistret, sætter knude 1 RETNING = 0. Brug UART'ens flag for afsendelse færdig (transmit complete), ikke sendebuffer tom, ellers klipper du den sidste bit af. Driveren går i høj impedans (tPHZ maks. 250 ns), bias-netværket trækker A − B tilbage til +0,25 V, og alle modtagere bliver ved med at læse 1. Nu må knude 2 sætte sin egen RETNING = 1 og svare på præcis samme måde.
Tidsdiagram for én byte 0x55 fra knude 1 til knude 2: DE og /RE går høje én bit før startbitten, D følger startbit, bittene 1 0 1 0 1 0 1 0 og stopbit, A minus B svinger mellem ca. plus og minus 1,5 til 2,5 V mens driveren er tændt og hviler på plus 0,25 V bias ellers, og knude 2's R-udgang kopierer D.
Én overførsel: tænd driveren, send startbit, otte databits (mindst betydende først) og stopbit, og slip så bussen. Tidsaksen er ikke målfast.

Byg det på et breadboard

To SN75176BP er nok til en fungerende forbindelse på et breadboard, f.eks. mellem to Arduino Uno, to 8051-systemer eller en mikrocontroller og en USB-seriel-adapter med 5 V TTL-UART. Du skal bruge:

  • 2 × SN75176BP (én pr. knude), hver med en 100 nF keramisk kondensator direkte mellem ben 8 og ben 5; TI's layouteksempel tilføjer en 1,5 µF kondensator ved forsyningen.
  • 2 × 120 Ω termineringsmodstande, én i hver ende af parret.
  • 2 × 560 Ω bias-modstande ved én knude (A til +5 V, B til GND).
  • 2 × 10 kΩ pull-ups fra hver R-udgang (ben 1) til +5 V.
  • Et snoet par til A og B – et par i et CAT5-kabel fungerer fint – plus en tredje leder til stel mellem knuderne.
  • Software, der sætter RETNING = 1 før afsendelse og RETNING = 0 efter flaget for afsendelse færdig. Forbind A til A og B til B ved alle knuder; byttes de om, bliver alle data inverteret.

Begrænsninger og faldgruber

  • Kun 5 V: VCC skal være 4,75–5,25 V. Indgangene D, DE og /RE bruger TTL-niveauer (høj ≥ 2 V), så en 3,3 V-udgang kan styre dem, men R-udgangen er et 5 V-signal: forbind den ikke direkte til en indgang, der kun tåler 3,3 V. Til et 3,3 V-system bør du bruge en 3,3 V RS-485-transceiver eller en egentlig niveauskifter.
  • Common-mode-område: A og B må hver ligge fra −7 V til +12 V i forhold til chippens stel. Derfor trækker man stadig en stelleder: RS-485 tåler forskelle i stelpotentiale, men ikke ubegrænset. Brug isolerede transceivere mellem bygninger.
  • Ingen indbygget fail-safe: en åben, kortsluttet eller hvilende bus giver en udefineret modtagerudgang. Tilføj altid bias-modstande ét sted.
  • Én taler ad gangen: er to drivere tændt samtidig, kæmper de mod hinanden. Driverens strømbegrænsning og termiske nedlukning beskytter chippen, men data går tabt. Din protokol (f.eks. en master, der spørger adresserede slaver én ad gangen, som Modbus RTU gør) skal sikre, at knuderne skiftes.
  • Strøm og temperatur: chippen trækker typisk 42 mA med driveren tændt og 26 mA med den slukket – ikke en lavstrømskreds. SN75176B er specificeret til 0–70 °C (SN65176B til −40…+105 °C).
  • Hastighed og længde: TI specificerer kredsen til busser op til 10 Mbit/s. Længere kabler kræver lavere bithastighed; ved 9600 baud når RS-485 typisk omkring 1200 m, mens topfart kun holder til korte strækninger. Hold afgreningerne fra hovedledningen til hver chip korte.
  • De lagerførte chips er ny gammel lagervare, ubrugte og ikke testede; afprøv en forbindelse på bordet, før du bygger den ind i et projekt.

Relaterede guides

Idéen med at sætte en udgang i høj impedans, så flere enheder kan dele én ledning, er forklaret trin for trin i SN74LS126AN: fire 3-state-buffere på samme bus, og open drain-alternativet i SN74LVC07A: forstå en open-drain-buffer. Skal der en UART i den anden ende af kablet, har 80C31 i Byg en komplet 80C31-computer på to breadboards en indbygget, og 8051-assembler: kom i gang med DOS/51 viser, hvordan du programmerer den.

Kilde og lagerført komponent

Alle bennumre, sandhedstabeller, spændingsniveauer og skiftetider stammer fra TI's datablad SLLS101I (SN65176B, SN75176B, revideret august 2025), som angiver SN75176BP som PDIP-8-huset (P), 0 til 70 °C. Diagrammerne er vores egne tegninger; tjek databladet, før du konstruerer et produkt omkring chippen.

TI SN75176BP i iMania-butikken · TI-datablad SLLS101I (PDF)