1 Indledning
Industrielt udstyrskommunikation involverer typisk en bred vifte af hardware- og softwareprodukter samt protokoller, der bruges til at forbinde standardcomputerplatforme (personlige computere eller arbejdsstationer) til industrielle automationsenheder. Derfor er de fleste automatiseringsenheder designet til at udføre simple serielle kommandoer, der er kompatible med de serielle standardporte, der findes på personlige computere eller tilføjede-serieportkort. RS-232 er i øjeblikket den mest udbredte serielle grænseflade i pc- og industriel kommunikationssektorer. RS-232 er defineret som en enkelt-ended standard designet til at forlænge kommunikationsafstande i lavhastigheds seriel kommunikation. Fordi RS-232 deler en fælles signaljord mellem sender og modtager, kan den ikke bruge differentielle signaler; ellers ville common-mode støj koble sig ind i signalsystemet. RS-232-standarden specificerer en maksimal afstand på kun 15 m og en maksimal signaltransmissionshastighed på 20 kbit/s.
CAN, forkortelse for "Controller Area Network", er en af de mest udbredte feltbusser internationalt. Et enkelt netværk bestående af CAN-busser er begrænset af netværkets hardwares elektriske egenskaber. Som en multi-master seriel kommunikationsbus kræver CANs grundlæggende designspecifikationer høje bithastigheder og stærk modstand mod elektromagnetisk interferens, samt evnen til at detektere eventuelle fejl, der opstår på kommunikationsbussen. Selv når signaltransmissionsafstanden når 10 km, kan CAN stadig levere datatransmissionshastigheder på op til 50 kbit/s. Tabel 1 viser forholdet mellem den maksimale transmissionsafstand mellem to vilkårlige noder på en CAN-bus og deres bithastigheder.
Maksimal afstand mellem to knudepunkter i en trekantet konfiguration i et CAN-bussystem
Bithastighed/kbps 1000 500 250 125 100
Maksimal afstand/m 40 130 270 530 620
Bithastighed (kbps) 50 20 10 5
Maksimal afstand (m) 1300 3300 6700 10000
Som det kan ses, er CAN-bussen en overlegen seriel bus i forhold til RS-232 med hensyn til realtidsydelse, tilpasningsevne, fleksibilitet og pålidelighed. Når to serielle enheder er placeret langt fra hinanden og ikke kan forbindes direkte via RS-232, kan RS-232 konverteres til CAN for at opnå netværksforbindelse af de serielle enheder via CAN-bussen.
RS-232 og CAN adskiller sig dog væsentligt med hensyn til spændingsniveauer og rammeformater. Specifikt:
RS-232-standarden bruger negativ logik, der definerer ethvert spændingsniveau mellem +3V og +15V som en logisk "0" og ethvert spændingsniveau mellem -3V og -15V som en logisk "1". CAN-signaler transmitteres på den anden side ved hjælp af differentialspænding. De to signallinjer kaldes "CAN_H" og "CAN_L." I statisk tilstand er begge ca. 2,5V; denne tilstand er repræsenteret som et logisk "1" og omtales også som "recessiv". Når CAN_H er højere end CAN_L, repræsenterer det et logisk "0", kendt som "dominant". I den dominerende tilstand er de typiske spændingsværdier: CAN_H=3.5V, CAN_L=1.5V;
Rammeformatet for den serielle RS-232-port er: én startbit, otte databit, en programmerbar niende bit (som fungerer som adresse/databit for både transmission og modtagelse) og én stopbit. CAN-datarammeformatet består af: frame header + ID + data (som kan opdeles i to formater: standardframes og udvidede frames).
Derfor kræver designet en mikrocontroller til at udføre konverteringer såsom niveau- og rammeformatkonverteringer. Konverteringsprocessen er vist i figur 1.
2 Hardwaredesign til RS-232-til-CAN-konvertering
Ved udformningen af RS-232-til-CAN-konverteringsenheden bruges AT89C52-mikrocontrolleren som mikroprocessor; SJA1000 bruges som CAN mikrocontroller. SJA1000 integrerer CAN-protokollens fysiske lag og datalinklagsfunktioner og kan passivt håndtere indramning af kommunikationsdata; AT82C250 fungerer som grænsefladen mellem CAN-controlleren og den fysiske bus, der giver differentiel transmissionskapacitet for bussen og differentiel modtagelseskapacitet for CAN-controlleren. Tre forskellige driftstilstande (høj-hastighed, hældningskontrol og standby) kan vælges via ben 3 på AT82C250. Når ben 3 er jordet, fungerer enheden i højhastighedstilstand; højhastigheds optisk isolering er implementeret ved hjælp af 6N137, som forhindrer interferens fra eksterne signaler; MAX232 bruges til at konvertere 232-niveausignaler til TTL-niveauer for mikrocontroller-interface-chippen. For specifikke hardware-interfacekredsløbsdetaljer henvises til de relevante ressourcer for SJA1000; yderligere forklaring er ikke givet her. Dog skal følgende punkter bemærkes.
(1) En 120Ω modstand er tilsluttet i begge ender af CAN-bussen for at matche busimpedansen, og derved forbedre immuniteten over for interferens og pålideligheden af datakommunikation. I praksis er det dog tilstrækkeligt at sikre, at shuntmodstanden mellem "CAN_H" og "CAN_L" i CAN-netværket er 60Ω.
(2) Ben 20 (RX1) på SJA1000 kan jordes, når den ikke er i brug (se softwaredesignet for den specifikke årsag); kombineret med indstilling af bit CDR.6 kan dette øge buslængden betydeligt.
(3) Tilslutningsmetoden for benene TX0 og TX1 bestemmer niveauet for den serielle udgang. Se indstillingerne i Output Control Register (OCR) for specifikke detaljer.
(4) En hældningsmodstand er forbundet mellem RS-benet på AT82C250 og jord. Modstandsværdien kan justeres passende baseret på buskommunikationshastigheden, typisk fra 16 kΩ til 140 kΩ.
(5) MAX232 kræver fire elektrolytiske kondensatorer-C1, C2, C3 og C4 - som også bruges til intern strømkonvertering. Alle har en rating på 1 μF/25 V; tantal kondensatorer anbefales, og de bør placeres så tæt på chippen som muligt. En 0,1 μF afkoblingskondensator skal tilsluttes mellem VCC-strømforsyningen og jord.
3 Softwaredesign til RS-232 til CAN-konvertering
Under mikroprocessorkontrol kan brug af seriel portmodtagelse og CAN-afbrydelser under dataudveksling mellem RS-232 og CAN forbedre driftseffektiviteten. Hovedprogrammets flowchart er vist i figur 2. SJA1000 kan kun initialiseres i nulstillingstilstand; dette omfatter primært indstilling af driftstilstand, clock division og acceptfilterregistre, konfiguration af baudhastighedsparametre og indstilling af afbrydelsesaktiveringsregistret.
Hvorvidt data kan transmitteres præcist afhænger også af baudhastigheden og flowstyringen, som er aspekter, der ikke kan overses under softwaredesign. Derfor vil de følgende sektioner fokusere på konfiguration af CAN-baudrate, automatisk detektering af serielle port-baudrate og kontrol af serielports dataflow.

3.1 Indstilling af CAN-filterhastigheden
Et af nøgleelementerne i CAN-protokollen er baudraten. Brugere kan indstille positionen for bitsamplingpunkterne inden for bitperioden og antallet af samples, hvilket giver dem mulighed for frit at optimere netværkets ydeevne til deres applikationer. Under denne optimeringsproces skal der imidlertid lægges vægt på forholdet mellem tolerancen af referenceoscillatoren, der anvendes til bittimingsparametre, og udbredelsesforsinkelserne af forskellige signaler i systemet.
Systemets bithastighed, fBil, repræsenterer antallet af databits transmitteret pr. tidsenhed, dvs. baudhastigheden fBit=1/tBit. Den nominelle bittiming består af tre ikke-overlappende segmenter: SYNC_SEG, TSEG1 og TSEG2. Disse tre tidssegmenter er betegnet som henholdsvis tSYNC_SEG, tTSEG1 og tTSEG2. Derfor er den nominelle bitperiode tBit summen af disse tre tidssegmenter.
tBit=tSYNC_SEG + tTSEG1 + tTSEG2
Inden for bitperioden er disse segmenter udtrykt som heltals multipla af en grundlæggende tidsenhed. Denne tidsenhed kaldes tidskvoten (TQ), og varigheden af en tidskvote er én cyklus af CAN-systemets ur (tSCL), som er afledt af oscillatorens clock-periode (tCLK). CAN-systemets ur kan justeres ved at programmere præskaleringsfaktoren (forudindstillet baudrateværdi, BRP). Specifikt:
tSCL=BRP × 2tCLK=2BPR/fCLK
Et andet meget vigtigt tidsinterval for CAN bit timing beregninger er synkroniseringsspringbredden (SJW), som har en varighed på tSJW. SJW-segmentet er ikke en del af bit-cyklussen; snarere definerer den det maksimale antal TQ'er, hvormed bitcyklussen forlænges eller forkortes under en resynkroniseringsbegivenhed. Derudover giver CAN-protokollen brugere mulighed for at specificere bitsampling-tilstanden (SAM), som enten kan være enkelt-sample-tilstand eller tre-sample-tilstand (ved at vælge ét resultat fra tre samples). I enkelt-sampletilstand er samplingspunktet i slutningen af TSEG1-segmentet. I tre-prøvetilstand tages der yderligere to prøveudtagningspunkter sammenlignet med enkelt-prøvetilstand; disse er placeret før slutningen af TSEG1-segmentet, adskilt af en TQ.

BPR, SJW, SAM, TESG1 og TESG2 nævnt ovenfor kan alle defineres af brugeren via de interne registre BTR0 og BTR1 i CAN-controlleren. Detaljer er vist i figur 3. Efter at BTR0 og BTR1 er indstillet, er det faktiske baudrateområde:
Maksimum=1/(tBit - tSJW), Minimum=1/(tBit + tSJW)
3.2 Seriel Port Baud Rate Detektion
Når en seriel enhed fungerer som vært, hvis du har brug for at detektere den serielle port-baudrate for konverteringsenheden på det tidspunkt, kan du først indstille værtens modtagelses-baudhastighed (f.eks. 9600 baud) og sende et bestemt tegn (f.eks. en vognretur) fra terminalen. På denne måde kan værten bestemme kommunikationsbaudraten for konverteringsindretningen baseret på den modtagne tegninformation. ASCII-værdien af vognreturtegnet er 0DH; værdierne modtaget ved forskellige baud-hastigheder er anført i tabel 2.
Bytes modtaget til forskellige Baud-rater
Baud-hastighed (bit/s) Modtagne bytes (hexadecimal) Baud-hastighed (bit/s) Modtagne bytes (hexadecimal)
1200 80 4800 E6
1800 F0 9600 0D
2400 78 19200 F*
3.3 Seriel port flowkontrol
Udtrykket "flow" brugt her refererer til dataflow. Datatab forekommer ofte under transmission mellem to serielle porte. Da mikrocontrollerens buffer har begrænset kapacitet, vil alle data, der fortsætter med at blive sendt på det tidspunkt, gå tabt, hvis bufferen er fuld, når data modtages. Flowkontrol løser effektivt dette problem: Når den modtagende ende ikke kan behandle dataene i tide, sender flowkontrolsystemet et "modtag ikke"-signal, hvilket får afsenderenden til at stoppe med at sende, indtil den modtager et "genoptag transmission"-signal. Derfor styrer flowkontrol datatransmissionsprocessen og forhindrer datatab. De to almindeligt anvendte typer flowkontrol er hardwareflowkontrol (inklusive RTS/CTS, DTR/CTS osv.) og softwareflowkontrol (XON/XOFF-fortsæt/stop). Den følgende forklaring fokuserer udelukkende på hardwareflowstyringsmetoden ved hjælp af RTS/CTS.
Ved brug af hardware til flowstyring forbindes RTS- og CTS-pindene på den serielle terminal til mikrocontrollerens I/O-porte, og start/stop-signaler modtages og transmitteres ved at indstille I/O-portene til 1 eller 0. Dataterminaludstyret (såsom en computer) bruger RTS til at starte den datastrøm, der sendes af mikrocontrolleren, mens CTS-mikrocontrolleren bruger til at starte og pausere computeren. For at implementere denne hardware-handshaking-metode indstilles et flag på højt-niveau og et flag på lavt-niveau under programmering baseret på størrelsen af den modtagende buffer. Når mængden af data i bufferen når den høje-tærskelværdi, er CTS-linjen i den modtagende ende sat lavt (logisk 0). Når programmet i sendeenden registrerer, at CTS er lav, stopper det med at transmittere data, indtil mængden af data i den modtagende buffer falder under tærsklen for lavt-niveau, og CTS er sat højt. RTS bruges til at angive, om den modtagende enhed er klar til at modtage data.
3.4 KAN modtage subrutine
PeliCAN-formatet understøtter både standard- og udvidede rammer. CAN-tilstanden kan konfigureres ved hjælp af CDR.7 i clock divider-registeret (0 for BasicCAN, 1 for PeliCAN). Når der modtages CAN-data, bruges FF-bitten i rammeinformationen til at bestemme, om det er en standardramme eller en udvidet ramme, og RTR-bitten bruges til at skelne mellem en fjernramme og en dataramme. Følgende er CAN-modtage-underrutinen:
;//////////////////////////////////////////////////////////////////
;//CAN-datamodtagelse/forenet til et rammeformat med et 2-byte-id//
;///////////////////////////////////////////////////////////////////////
GENTAG:
MOV R0, #C_RE ; Startadresse på mikrocontrollerens interne buffer
MOV DPTR, #RXBUF ; Læs og gem indholdet af modtagebufferen
MOVX A, @DPTR ; Læs den anden byte af CAN-bufferen
MOV @R0, A ; Spare
JB ACC.7, EFF_RE ; FF bit: 0=SFF, 1=EFF
MOV R2, #0
SJMP SFF_RE ; Afhængigt af ID-nummeret varierer positionen, hvor "databyten" er fanget
EFF_RE: MOV R2, #2
SFF_RE: MOV R2, #2
SFF_RE:
JB ACC.6, EXIT_RECAN ; Tjek RTR-bitten; hvis 1 (fjernramme), spring ud
ANL A, #0FH
MOV R3, A; På dette tidspunkt repræsenterer de midterste 4 bits datalængden
MOV C_NUM, A ; Gem længden af den modtagne ramme i R3 og R5
RDATA0:
INC DPTR ; 2-byte ID
INC R0
MOVX A, @DPTR
MOV @R0, A
INC DPTR
MOVX A, @R0, A
INC DPTR
MOVX A, @DPTR
MOV @R0, A
MOV A, R2; Hvis EFF, spring to-byte-id'et over
JZ DRATA1
INC DPTR
INC DPTR
DATA1: ; Data bytes
INC DPTR
INC R0
MOVX A, @DPTR
MOV @R0, A
DJNZ R3, RDATA1
EXIT_RECAN:
RET
4 Konklusion
Miniaturiseringen af computere har givet de nødvendige betingelser for intelligent udvikling af måle- og kontrolinstrumenter, hvilket gør det muligt for mikroprocessor-baserede terminalenheder at besidde overlegne digitale kommunikationsevner. Med fremkomsten af et stigende antal smarte terminaler stilles der højere krav til netværksarkitektur, protokoller, realtidsydelse samt anvendelighed, fleksibilitet, pålidelighed og endda omkostninger. Feltbusteknologien lover derfor meget for den fremtidige udvikling. CAN-bussens rammestruktur inkluderer en identifikator (ID), som gør det muligt at have flere netværksværter inden for et enhedsnetværk; det vil sige, at gennem disse netværksværter kan driftsstatus for hele enhedsnetværket overvåges, og tilsvarende kontrolbeslutninger kan træffes. Denne enhed er nu fuldt udviklet og har opnået fremragende resultater i praktiske applikationer.




