A CAN-busz (Controller Area Network) az egyik legelterjedtebb ipari buszrendszer — eredetileg gépjárművekhez fejlesztették ki, ma gyártósori vezérlésektől a mezőgazdasági gépekig mindenhol megtalálod. Ebben a fejezetben megérted, hogyan „veszekszik el” több eszköz azon, ki küldhet éppen üzenetet a közös vezetéken, mit tartalmaz egy CAN-üzenet, és hogyan találod meg a hibát egy oszcilloszkóppal.

2.1 A CAN-busz felépítése

📗 CAN-busz (Controller Area Network)

Soros, multi-drop (több eszközös) ipari buszrendszer, amelynek adatkapcsolati rétegét nemzetközileg az ISO 11898-1, fizikai rétegét (nagy sebességű változat) az ISO 11898-2 szabvány rögzíti. A protokoll a Bosch CAN Specification 2.0 nevű gyártói specifikációjából nőtt ki — ebből indult ki az ISO 11898-1 is —, és mára szinte minden ipari ágazatban használják.

A CAN-buszra csatlakozó minden eszközt csomópontnak (node) hívjuk. Egy tipikus csomópont felépítése:

  • MCU (mikrovezérlő, microcontroller unit): ez futtatja az alkalmazási programot, és döntést hoz arról, mikor és mit küld a buszra.
  • CAN-vezérlő (CAN controller): ez alakítja át az MCU adatait CAN-protokoll szerinti keretekké (és fordítva) — sok mai mikrovezérlőben ez már be van építve, de ez típusfüggő: az adott MCU adatlapja mondja meg, van-e benne CAN-vezérlő.
  • CAN-adóvevő (CAN transceiver): ez a fizikai illesztő áramkör, amely a vezérlő logikai jelét a buszon megjelenő elektromos jellé alakítja, és fordítva.
📗 Csavart érpár (twisted pair) a CAN-buszon

A CAN-busz két vezetéken — CAN_H (High) és CAN_L (Low) — vitt, differenciális (szimmetrikus) jelet használ, ugyanazon elven, mint az RS-485 (lásd 1.4.): a vevő a két vezeték KÖZTI feszültségkülönbséget érzékeli, ami nagy zavartűrést biztosít.

a) A CAN-busz fizikai topológiája CAN_H CAN_L 120 Ω 120 Ω Csomópont 1 Csomópont 2 Csomópont n … Csavart érpár, mindkét végén 120 Ω lezáró ellenállással (párhuzamos eredőjük kb. 60 Ω) – lezárás nélkül a jel visszaverődik a vezeték végéről, és megzavarja az átvitelt. b) A klasszikus (Standard Format, CAN 2.0A) adatkeret mezői SOF Azonosító (11 bit, ID) RTR Vezérlő (DLC) Adatmező (0–8 bájt) CRC-mező ACK EOF A bővített (Extended Format, CAN 2.0B) keret ugyanezt egészíti ki egy hosszabb, 29 bites azonosítóval. Az azonosító a versengéskor (arbitráció) egyben a prioritást is meghatározza – minél kisebb az ID, annál nagyobb a prioritás.
2.1. ábra. a) A CAN-busz fizikai topológiája, mindkét végén 120 Ω lezáró ellenállással. b) A klasszikus (Standard Format) adatkeret mezői.

Lezárás és ellenőrzése méréssel

A nagy sebességű CAN-busz (ISO 11898-2) mindkét VÉGÉN egy-egy 120 Ω-os lezáró ellenállást (terminátort) igényel a CAN_H és CAN_L vezeték között. Ha ez hiányzik vagy hibás, a jel visszaverődik a vezeték végéről, és zavarja az átvitelt — jellemzően véletlenszerű, nehezen reprodukálható hibákat okoz.

🛠️ 2.1 gyakorlat — Lezárás ellenőrzése méréssel

Kapcsold ki a busz összes eszközét (feszültségmentesítve!), majd multiméterrel mérd meg a CAN_H és CAN_L vezeték közti ellenállást a busz egyik végén. A két terminátor a busz két végén a mérőműszer felől nézve PÁRHUZAMOSAN kapcsolódik, tehát az eredő ellenállás 120 Ω ‖ 120 Ω = 60 Ω — ennyit kell mérned. Ha az érték ettől jelentősen eltér, keresd meg, hiányzik-e egy terminátor, vagy sérült-e egy vezeték (a kiértékelést a 2.6. hibaelhárítási lépéssora részletezi).

⚠️ Ne mérj feszültség alatt lévő buszon ellenállást!

Az ellenállásmérés csak feszültségmentes állapotban ad helyes és biztonságos eredményt — ha a busz aktív, a multiméter és az eszközök is károsodhatnak, az eredmény pedig félrevezető lesz.

2.2 Műszaki jellemzők

Domináns és recesszív állapot

📗 Domináns állapot (logikai 0)

Az az elektromos állapot a CAN-buszon, amikor a CAN_H és a CAN_L feszültsége határozottan eltér egymástól — ha BÁRMELYIK eszköz dominánsat küld, a busz dominánssá válik, függetlenül attól, hogy más eszközök közben mit küldenek.

📗 Recesszív állapot (logikai 1)

Az „alapállapot” a buszon — csak akkor jelenik meg, ha MINDEN csatlakoztatott eszköz recesszívet küld (vagy éppen nem küld semmit).

Ez az egyszerű fizikai szabály — a domináns mindig „felülírja” a recesszívet — a teljes ütközéskezelés (2.4.) alapja.

📗 Feszültségértékek (gyártói adatlap-értékek az ISO 11898-2 fizikai réteghez, TI)

Az alábbi két érték a Texas Instruments CAN-adóvevőkről szóló alkalmazási jegyzeteiből származik, és mindkettő 50–65 Ω-os terhelésre vonatkozik (vagyis szabályosan, két 120 Ω-os terminátorral lezárt buszra):

  • Recesszív állapotban mindkét vezeték (CAN_H és CAN_L) egy közös, kb. a tápfeszültség felének megfelelő szintre (V_CC/2) van „gyengén” felhúzva — a köztük mért differenciális feszültség (V_OD) legfeljebb 50 mV.
  • Domináns állapotban a meghajtó áramkör aktívan szétnyitja a két vezetéket — a differenciális feszültségnek legalább 1,5 V-nak kell lennie.

Maga az ISO 11898-2 szabványszöveg fizetős, a jegyzet összeállításakor nem állt rendelkezésre; ezek tehát a szabványt követő gyártói adatlap-értékek, nem a szabvány szó szerinti idézetei.

Ez a nagy különbség (50 mV az 1,5 V-hoz képest) az, ami a vevőnek egyértelműen és megbízhatóan felismerhetővé teszi a két állapot közti különbséget, még zajos környezetben is.

Csatlakozók

📗 CAN-csatlakozó (CiA 303-1 ajánlás)

Bár a CAN-szabvány önmagában nem ír elő kötelező csatlakozótípust, a CiA (CAN in Automation) 303-1 ajánlása egy 9 pólusú D-Sub (DE-9) csatlakozót javasol az interoperabilitás érdekében — ezt sok gyártó követi, hogy az eszközök kompatibilisek legyenek egymással.

A CiA-303-1 szerinti jellemző kiosztás:

Tű Jel Leírás
2 CAN_L CAN-buszjel (domináns alacsony)
3 CAN_GND CAN-föld
5 CAN_SHLD opcionális árnyékolás
7 CAN_H CAN-buszjel (domináns magas)
9 CAN_V+ opcionális külső pozitív tápfeszültség
⚠️ A 9. tű (CAN_V+) feszültségét SOHA ne tippeld meg

A CAN_V+ egy OPCIONÁLIS tápláb: az ajánlás azt mondja meg, hogy a 9. tűre külső pozitív tápfeszültség KERÜLHET, azt viszont NEM, hogy mekkora. A tényleges érték eszköz- és gyártófüggő, és a CAN-adóvevők tápfeszültsége sem egységes (a mai eszközök között 3,3 V-os és 5 V-os adóvevő is van). Mielőtt bármit rákötsz erre a lábra, keresd ki a KONKRÉT eszköz adatlapján a megengedett tápfeszültséget. A megengedettnél nagyobb feszültség visszafordíthatatlanul tönkreteszi az adóvevőt — és ezt a hibát a kábelben kell majd keresned, nem a szoftverben, tehát órákat viszi el.

⚠️ A fenti kiosztás ELLENŐRZÉSRE SZORUL a konkrét eszköznél

A táblázat a CiA 303-1 ajánlás jellemző kiosztását mutatja, tájékoztató jelleggel. Élesben soha ne eszerint köss be egy eszközt: mindig az adott gyártó dokumentációjából ellenőrizd a tűkiosztást, mert a D-Sub csak ajánlás, nem kötelező szabvány.

💡 Nem minden gyártó ugyanazt a csatlakozót használja

A 9 pólusú D-Sub csak EGY AJÁNLÁS, nem kötelező szabvány — ipari környezetben ettől eltérő csatlakozótípusokkal (körcsatlakozók, csavaros sorkapcsok) is találkozol. Mindig a konkrét eszköz dokumentációjából kell megállapítani a tényleges kiosztást.

Kis és nagy sebességű változat

A CAN-nak két fő fizikai réteg-változata van:

  • High-Speed CAN (ISO 11898-2): a „hagyományos”, nagy sebességű (jellemzően 125 kbit/s–1 Mbit/s) változat, kettős végén lezárt (120 Ω) csavart érpárral.
  • Low-Speed Fault-Tolerant CAN (ISO 11898-3): alacsonyabb sebességű, de HIBATŰRŐBB — egyetlen vezeték szakadása esetén is képes (csökkentett teljesítménnyel) tovább működni. Jellemzően kevésbé időkritikus alkalmazásokban (például gépjárművek karosszéria-elektronikájában) terjedt el.

Sebesség és távolság kapcsolata

Akárcsak az RS-485-nél (1.4.), a CAN-busznál is fordítottan arányos a sebesség és a megbízhatóan elérhető távolság. A CiA (a CAN-t gondozó szakmai szervezet) CANopen ajánlása szerint jellemző, iparban elfogadott értékek:

Sebesség Buszhossz Max. leágazás (stub) hossz
1 Mbit/s 25 m 1,5 m
500 kbit/s 100 m 5,5 m
250 kbit/s 250 m 11 m
125 kbit/s 500 m 22 m
50 kbit/s 1000 m 55 m
20 kbit/s 2500 m 137,5 m
💡 Ez egy JELLEMZŐ táblázat, nem az egyetlen lehetséges

A fenti értékek egy elterjedt szakmai ajánlásból (CiA/CANopen) származnak — a konkrét rendszertervezésnél mindig az adott gyártó adatlapját és a tényleges kábelparamétereket (keresztmetszet, kapacitás) kell figyelembe venni.

2.3 Adatkeret felépítése és mezői

A CAN-üzenet (keret) a legfontosabb és legtöbbet vizsgált eleme a protokollnak. A klasszikus, 11 bites azonosítós („Standard Format”, CAN 2.0A) adatkeret fő mezői sorrendben:

📗 Adatkeret (Data Frame) fő mezői
  1. SOF (Start of Frame) — egyetlen domináns bit, jelzi a keret kezdetét.
  2. Azonosító mező (Identifier) — 11 bit; ez határozza meg egyszerre az üzenet TARTALMÁT (mire vonatkozik) és a PRIORITÁSÁT (lásd 2.4.).
  3. RTR bit — megkülönbözteti az adatkeretet (adatot tartalmaz) a távkerettől (Remote Frame, amely adatot KÉR egy másik eszköztől).
  4. Vezérlőmező, benne a DLC (Data Length Code) — megadja, hány bájt adat következik (0-8 bájt).
  5. Adatmező — a tényleges átvitt adat, 0-8 bájt.
  6. CRC-mező — a küldő egy ellenőrzőösszeget (cyclic redundancy check) számol a küldött bitekből, és ezt küldi el; a vevő újraszámolja, és ha nem egyezik, hibát jelez.
  7. ACK-mező (nyugtázás) — bármelyik eszköz, amelyik hibátlanul fogadta az üzenetet, dominánsra írja felül ezt a bitet — így a KÜLDŐ tudja, hogy legalább egy vevő rendben megkapta.
  8. EOF (End of Frame) — jelzi a keret végét.

A bővített („Extended Format”, CAN 2.0B) keret ugyanezt a szerkezetet követi, de egy hosszabb, 29 bites azonosítóval — ez több egyedi üzenettípus megkülönböztetését teszi lehetővé nagyobb rendszerekben.

💡 Miért pont 0-8 bájt az adatmező?

A klasszikus CAN kis, gyakori, rövid üzenetekre lett tervezve (pl. egy szenzorérték, egy állapotjelzés) — nem nagy adatmennyiség (fájl, kép) átvitelére. Ha egy alkalmazásnak nagyobb adatmezőre van szüksége, arra egy újabb változat, a CAN FD (Flexible Data-Rate) való, de ez már túlmutat ennek a fejezetnek a keretein.

Jelalakok, jelszintek

Az átvitel NRZ (Non-Return-to-Zero) kódolású: a jelszint a bit teljes idejére állandó marad (nem tér vissza egy köztes szintre minden bit után), és bitstuffinggel egészül ki: ha 5 egymást követő azonos bit (5 domináns vagy 5 recesszív egymás után) fordulna elő, a küldő automatikusan beszúr egy ellentétes polaritású „stuff bitet”. Ennek két célja van:

  • biztosítja, hogy elég gyakran legyen jelváltás a szinkronban tartáshoz;
  • a stuff-szabály megsértése (ha egy vevő 6 egymás utáni azonos bitet lát) MAGA IS hibajelzés (stuff error, lásd 2.5.).
🛠️ 2.2 gyakorlat — Adatkeret vizsgálata oszcilloszkóppal

Csatlakoztass egy digitális oszcilloszkópot (vagy CAN-elemzőt) a busz CAN_H és CAN_L vezetékére, differenciális mérési móddal (vagy két csatornán, majd a két jel különbségeként kiértékelve). Küldj el egy ismert tartalmú üzenetet, és azonosítsd a képernyőn a keret egyes mezőit (SOF, azonosító, DLC, adat, CRC, ACK, EOF) a fenti felépítés alapján.

2.4 Ütközéskezelés: bitkódolás, arbitráció, prioritás

Mivel a CAN-busz megosztott — több eszköz is csatlakozik ugyanarra a vezetékpárra —, elkerülhetetlen, hogy néha egyszerre TÖBB eszköz akar küldeni. A CAN erre egy elegáns, nem destruktív (adatvesztés nélküli) megoldást ad: az arbitrációt.

📗 Arbitráció (bitenkénti ütközésfeloldás)

Amikor több csomópont egyszerre kezd el küldeni, mindegyik figyeli a buszt, MIKÖZBEN küld. Ha egy csomópont recesszív bitet küldött, de a buszon dominánsat lát (mert egy másik csomópont alacsonyabb azonosítóval küldött), akkor AZONNAL visszalép, és csak figyelővé válik — a „győztes” csomópont észre sem veszi, hogy ütközés történt, zavartalanul folytatja az üzenetét.

A „győztes” mindig az az eszköz, amelyiknek a legkisebb NUMERIKUS ÉRTÉKŰ azonosítója (CAN ID) van — ez a rendszer egyben azt is jelenti, hogy az azonosító egyben a PRIORITÁS is: minél kisebb az azonosító, annál magasabb a prioritás (annál „fontosabb”, sürgősebb üzenetről van szó).

⚠️ Az azonosító nem csak „cím” — prioritás is!

Sok más buszrendszernél (pl. Modbus, lásd 4. fejezet) az eszköz CÍME csak azt mondja meg, KI a címzett. A CAN-nál az azonosító EGYSZERRE mondja meg, miről szól az üzenet, ÉS hogy milyen sürgős — ezért a CAN-rendszer tervezésekor gondosan kell kiosztani az azonosítókat: a valóban időkritikus üzenetek (pl. vészleállítás) kapják a legkisebb (legmagasabb prioritású) azonosítót.

a) Arbitráció – 0x100 és 0x200 azonosító egyszerre indul A 11 bites azonosító, a legnagyobb helyértéktől (b10) kezdve – domináns = 0, recesszív = 1 0x100: 0 0 1 0 … (8 további bit, mind 0) 0x200: 0 1 – – visszalépett, csak figyel b9-nél 0x200 recesszívet (1) küldött, de dominánst (0) lát a buszon → veszít, visszalép A kisebb numerikus azonosító (0x100) nyer – a győztes zavartalanul folytatja (nem destruktív arbitráció), a vesztes (0x200) később, a busz felszabadulása után újraküldi az üzenetét. b) A három CAN-hibaállapot Error Active teljes értékű tag, aktívan jelez hibát TEC/REC ≥ 128 Error Passive még kommunikál, visszafogottabb hibajelzés TEC ≥ 256 Bus-Off teljesen leválik, amíg újra nem indítják sikeres átvitelnél a számláló csökken Minden csomópontnak van egy küldési (TEC) és egy fogadási (REC) hibaszámlálója – a három állapot a hálózat többi részét védi egy folyamatosan hibázó csomóponttól, fokozatosan, arányosan.
2.2. ábra. a) Arbitráció: a 0x100 és a 0x200 azonosító versenyez, a kisebb érték nyer. b) A három CAN-hibaállapot: Error Active, Error Passive, Bus-Off.

Kidolgozott példa: az arbitráció bitről bitre

Nézzük meg számokkal, mi történik a buszon. Két csomópont pontosan egyszerre kezd küldeni, standard (11 bites azonosítós) formátumban:

  • az A csomópont azonosítója 0x100 (decimálisan 256),
  • a B csomópont azonosítója 0x200 (decimálisan 512).

Első lépés: írd fel a két azonosítót 11 biten, a legnagyobb helyi értékű (MSB) bittel kezdve. A 256 kettes számrendszerben egyetlen 1-est tartalmaz, a 8-as helyi értéken; az 512 szintén egyetlen 1-est, eggyel feljebb, a 9-es helyi értéken:

ADATSOR
A (0x100):  0 0 1 0 0 0 0 0 0 0 0
B (0x200):  0 1 0 0 0 0 0 0 0 0 0
            ^ ^
            | +-- itt dől el minden (2. bit)
            +---- azonos bit, még nincs döntés (1. bit, MSB)

Második lépés: fordítsd le a biteket buszállapotra. A logikai 0 = domináns, a logikai 1 = recesszív (2.2.), és a domináns mindig felülírja a recesszívet. Mindkét csomópont figyeli a buszt, miközben küld:

Bit sorszáma A küld B küld A buszon megjelenő állapot Mi történik
1. (MSB) 0 → domináns 0 → domináns domináns Mindkettő azt látja a buszon, amit küldött. Nincs döntés, mennek tovább.
2. 0 → domináns 1 → recesszív domináns (A húzza le) B recesszívet küldött, de dominánsat lát → B azonnal visszalép, és csak figyel.
3–11. 0 → domináns (már csak figyel) A bitjei A zavartalanul küldi végig a keretet.

Eredmény: A nyer, mert a 2. bitnél nála állt domináns bit — vagyis a kisebb numerikus értékű azonosító nyert. B üzenete NEM veszett el és nem sérült: B egyszerűen megvárja, míg a busz felszabadul, és újrapróbálkozik.

💡 A „kisebb azonosító nyer” szabály innen jön

Nem kell szabályt magolnod: a bitenkénti összehasonlítás automatikusan a kisebb számot hozza ki győztesnek. Ha ugyanis két bináris szám először egy adott helyi értéken tér el, ott a kisebbiknek áll 0 (domináns), a nagyobbiknak 1 (recesszív) — és a domináns nyer.

🛠️ 2.3 gyakorlat — Ütközéskezelés vizsgálata teszteléssel

Állíts be két csomópontot úgy, hogy (majdnem) egyszerre próbáljanak küldeni, eltérő azonosítóval. Oszcilloszkópon vagy CAN-elemzőn figyeld meg, hogyan „adja fel” az alacsonyabb prioritású (nagyobb numerikus értékű azonosítójú) csomópont az üzenetküldést, és próbálja újra, amint a busz szabaddá válik.

Az azonosító mező szerepe az adatfogadásban — szűrés (filtering)

Az arbitráción túl az azonosítónak van egy MÁSIK, egészen más jellegű szerepe is: eldönti, hogy egy adott csomópont EGYÁLTALÁN FELDOLGOZZA-e a beérkező üzenetet.

📗 Elfogadási szűrő (acceptance filter)

Minden CAN-csomópont (pontosabban annak vevő áramköre) rendelkezik egy vagy több elfogadási szűrővel, amely összeveti a beérkező üzenet azonosítóját egy előre beállított mintával. Ha az azonosító illeszkedik a szűrőre, a csomópont FELDOLGOZZA (átadja a mikrovezérlőnek) az üzenetet; ha nem illeszkedik, egyszerűen FIGYELMEN KÍVÜL HAGYJA.

Ez azért fontos, mert a CAN-busz broadcast jellegű: MINDEN üzenetet MINDEN csatlakoztatott eszköz „hall” (nincs pontcím, mint a forrás/cél modellnél, lásd 1.3.) — a szűrés nélkül minden eszköznek fel kellene dolgoznia MINDEN üzenetet, ami feleslegesen terhelné a mikrovezérlőt.

💡 Gyakorlati példa

Egy gyártósori vezérlőrendszerben egy hőmérséklet-érzékelő csomópont beállíthatja a szűrőjét úgy, hogy csak a saját azonosítójára címzett konfigurációs üzeneteket és az általánosan közzétett vészleállító azonosítót fogadja el — minden más forgalmat (pl. más érzékelők adatait) a hardveres szűrő szintjén, a mikrovezérlő terhelése nélkül eldob.

2.5 Hibakezelés

A CAN-busz egyik legfontosabb tulajdonsága a beépített, automatikus hibafelismerés és -kezelés.

Hibakeret

📗 Hibakeret (Error Frame)

Ha egy csomópont hibát észlel az átvitel közben (bit-, stuff-, CRC-, forma- vagy nyugtázási hiba), azonnal egy hibakeretet küld a buszra. Ez törli az adott (hibás) üzenetet minden csomópont számára — a hiba azonnal, az egész hálózat számára láthatóvá válik, nem csak a küldő és egy vevő között marad rejtve.

🛠️ 2.4 gyakorlat — Hibakeret vizsgálata oszcilloszkóppal

Idézz elő szándékosan egy hibát, és figyeld meg oszcilloszkópon a megjelenő hibakeretet. A legmegbízhatóbb módszer erre nem a kábel bántása, hanem a konfiguráció elrontása: állítsd az egyik csomópontot a többitől ELTÉRŐ bitsebességre. Ez a csomópont ettől kezdve nem tudja helyesen értelmezni a többiek kereteit, folyamatosan hibát észlel, és sorozatban küldi a hibakereteket — vagyis a jelenség biztosan és azonnal előáll. (Terminátort kihúzni vagy csatlakozót meglazítani rövid, lassú laborbuszon nem feltétlenül vezet hibakerethez: a reflexió ilyenkor még nem biztos, hogy elrontja a bitet, és hiába vársz.) Utána azonnal állítsd vissza az eredeti bitsebességet.

Hibakezelési módszer: három állapot

Minden CAN-csomópont vezet egy küldési és egy fogadási hibaszámlálót. Ez alapján három állapotot különböztetünk meg:

📗 Error Active (hiba-aktív)

A normál működési állapot: a csomópont teljes értékű hálózati tag, aktívan tud hibát jelezni.

📗 Error Passive (hiba-passzív)

Ha a hibaszámláló túllép egy küszöböt, a csomópont továbbra is részt vesz a kommunikációban, de „visszafogottabban” — kevésbé zavarhatja a többi eszköz forgalmát a saját hibajelzéseivel.

📗 Bus-Off (busz-leválás)

Ha a küldési hibaszámláló túllép egy magasabb küszöböt, a csomópont TELJESEN leválik a buszról — nem küld és nem fogad többé, amíg újra nem indítják. Ez egy védelmi mechanizmus: megakadályozza, hogy egy folyamatosan hibázó eszköz tönkretegye a teljes hálózat kommunikációját.

💡 Bus-Off nem „elromlott a busz” — védelem, nem hiba

Ha egy diagnosztikai eszköz azt jelzi, hogy egy csomópont „Bus-Off” állapotban van, az azt jelenti, hogy AZ ADOTT csomópont saját magát véd(t)te le, mert túl sok hibát okozott. A hibakeresést ezen az EGY csomóponton (kábelezés, terminátor, tápellátás) kell kezdeni, nem a teljes hálózaton.

2.6 Gyakorlat: rendszerkiépítés, konfigurálás, forgalomtesztelés, hibaelhárítás

🛠️ 2.5 gyakorlat — CAN-buszos rendszer kiépítése és tesztelése
  1. Építs ki egy legalább két csomópontos CAN-hálózatot (két fejlesztőpanel vagy egy panel + egy szimulátor), megfelelő (120 Ω, mindkét végponton) lezárással.
  2. Mérd meg és jegyezd fel a lezárási ellenállást (2.1. gyakorlat mintájára).
  3. Konfiguráld be mindkét eszközt azonos átviteli sebességre.
  4. Küldj üzeneteket különböző azonosítókkal, és oszcilloszkóppal vagy CAN-elemzővel ellenőrizd az adatkeret felépítését (2.2. gyakorlat).
  5. Idézz elő szándékos ütközést (2.3. gyakorlat) és egy hibát (2.4. gyakorlat), dokumentáld a megfigyelt viselkedést.
  6. Készíts rövid jegyzőkönyvet: mért lezárási érték, beállított sebesség, a megfigyelt arbitráció és hibakeret leírása.

Rendszerezett hibaelhárítás: mit ellenőrizz és milyen sorrendben

Ha egy CAN-busz „nem megy”, a leggyakoribb hiba az, hogy a szerelő találomra kapkod: kicserél egy kábelt, újratölti a programot, cserél egy eszközt — és közben nem tudja, mit zárt már ki. A hibakeresés akkor gyors, ha rögzített sorrendben haladsz, a legegyszerűbb és legolcsóbban ellenőrizhető okoktól a bonyolultabbak felé. A CAN-nál ez a sorrend: előbb a fizika (vezeték, lezárás, táp), utána a konfiguráció, végül a jelszint és a hibás csomópont beazonosítása.

LÉPÉSSOR
CAN-BUSZ HIBAELHÁRÍTÁSI LÉPÉSSOR

1. LEZÁRÁS MÉRÉSE  (feszültségmentes állapotban!)
   Kapcsold le a busz tápellátását, majd mérj ellenállást
   CAN_H és CAN_L között. Két ép, 120 Ω-os terminátor
   párhuzamosan 60 Ω-ot ad (2.1. gyakorlat).
     kb.  60 Ω       a lezárás rendben, tovább a 2. pontra
     kb. 120 Ω       csak EGY terminátor van a buszon:
                     a másik hiányzik, vagy a hozzá vezető
                     szakasz megszakadt
     sokkal több     egyik terminátor sincs bekötve, vagy a
     vagy szakadás   vezeték elszakadt a mérési pont és a
                     terminátorok között
     kb.   0 Ω       CAN_H és CAN_L rövidre zárva
                     (sérült kábel, rossz kötés)

2. VEZETÉKEZÉS ÉS POLARITÁS
   Ellenőrizd csomópontonként, hogy a CAN_H a CAN_H-ra és a
   CAN_L a CAN_L-re megy. Felcserélve a differenciális jel
   polaritása fordított, ezért a vevő nem ismeri fel helyesen
   a domináns és a recesszív állapotot: a csomópont süket.
   Nézd át a csatlakozók meghúzását és a leágazások (stub)
   hosszát is - a megengedett leágazás-hosszat a 2.2. alfejezet
   táblázata adja meg a sebesség függvényében.

3. TÁPELLÁTÁS
   Csomópontonként ellenőrizd, hogy az eszköz és külön az
   adóvevő megkapja-e a saját, adatlap szerinti
   tápfeszültségét. A 9 pólusú D-Sub 9. tűjére (CAN_V+) SOHA
   ne kapcsolj olyan feszültséget, amit az adott eszköz
   adatlapja nem ír elő.

4. AZONOS BITSEBESSÉG MINDEN CSOMÓPONTON
   Minden csomópontnak UGYANAZZAL a bitsebességgel kell
   dolgoznia. Ha csak egy is eltérő értékre van állítva, az
   nem tudja helyesen értelmezni a többiek kereteit,
   folyamatosan hibát észlel, és hibakeretekkel (2.5.)
   árasztja el a buszt. Ilyenkor látszólag "az egész hálózat"
   rossz, pedig egyetlen beállítás a hibás.

5. JELSZINTEK OSZCILLOSZKÓPPAL
   Mérd meg a CAN_H és CAN_L közötti differenciális
   feszültséget forgalom közben:
     recesszív állapot   legfeljebb   50 mV
     domináns állapot    legalább    1,5 V
   Mindkét érték a szabályosan, két 120 Ω-os terminátorral
   lezárt buszra vonatkozik (2.2.). Ha a domináns szint
   jelentősen kisebb a vártnál, a meghajtó a megengedettnél
   kisebb terhelést lát: tipikusan a kelleténél több
   terminátor van a buszon.

6. A HIBÁS CSOMÓPONT BEAZONOSÍTÁSA
   Kérdezd le a csomópontok hibaállapotát a diagnosztikai
   eszközzel. Amelyik Bus-Off állapotban van, az önmagát
   választotta le - a hibakeresést AZON AZ EGY csomóponton
   folytasd (kábelezés, terminátor, tápellátás), ne a teljes
   hálózaton (2.5.). Ha a hiba csak EGY csomópont
   lecsatlakoztatása után szűnik meg, megvan a hibás eszköz.

7. DOKUMENTÁLÁS
   Jegyezd fel, mit mértél és mit zártál ki vele. A következő
   hibánál ez a jegyzőkönyv a leggyorsabb kiindulópont.
⚠️ A sorrendet ne ugord át

A leggyakoribb hiba az, hogy valaki a 4. ponttal (szoftver, bitsebesség) kezdi, mert azt lehet a legkényelmesebben, a laptop mellől ellenőrizni. Ha viszont közben egy terminátor hiányzik, a beállításokat órákig nézegetheted: a hiba a vezetéken van, nem a programban. Az 1., 2. és 3. pont együtt néhány perc, és a hibák jelentős részét már itt megtalálod.

🛠️ 2.6 gyakorlat — Hibaelhárítás a lépéssor szerint

Párokban dolgozzatok. Az egyikőtök a másik háta mögött elront EGYET a működő CAN-hálózaton (például kivesz egy terminátort, felcserél egy CAN_H/CAN_L eret egy csatlakozóban, vagy átállítja az egyik csomópont bitsebességét), és nem árulja el, mit tett. A másiknak a fenti lépéssor szerint, SORRENDBEN haladva kell megtalálnia a hibát.

Vezess mérési jegyzőkönyvet: melyik lépésnél mit mértél, mi volt a mért érték, és mit zártál ki vele. A végén hasonlítsátok össze: hányadik lépésnél derült ki a hiba, és megtaláltad volna-e gyorsabban, ha kihagysz lépéseket. Cseréljetek szerepet.

Összefoglalás

  • A CAN-busz csomópontjai MCU-ból, CAN-vezérlőből és CAN-adóvevőből épülnek fel, csavart érpáron (CAN_H, CAN_L), mindkét végén 120 Ω-os lezárással.
  • A busz két állapotot ismer: domináns (0) mindig felülírja a recesszívet (1).
  • A High-Speed CAN (ISO 11898-2) nagyobb sebességű, a Low-Speed Fault-Tolerant CAN (ISO 11898-3) hibatűrőbb, de lassabb változat.
  • A sebesség és a megbízhatóan elérhető távolság fordítottan arányos.
  • Az adatkeret fő mezői: SOF, azonosító (egyben prioritás is), RTR, vezérlőmező/DLC, adatmező, CRC, ACK, EOF.
  • Az arbitráció bitenkénti, nem destruktív ütközésfeloldás: a legkisebb numerikus azonosítójú (legmagasabb prioritású) eszköz nyer, a többi visszalép és újrapróbálkozik.
  • Hiba esetén a csomópont hibakeretet küld, amely törli a hibás üzenetet az egész hálózaton.
  • Három hibaállapot van: Error Active (normál), Error Passive (korlátozott) és Bus-Off (teljes leválás) — ez utóbbi védelmi mechanizmus, nem „elromlott busz”.
  • Domináns állapotban a differenciális feszültség legalább 1,5 V, recesszívben legfeljebb 50 mV (mindkettő 50–65 Ω-os terhelésre, gyártói adatlap-érték) — ez a nagy különbség teszi megbízhatóvá az állapotfelismerést.
  • A CiA 303-1 egy 9 pólusú D-Sub csatlakozót ajánl, de ez nem kötelező szabvány, és a CAN_V+ tápláb feszültségét nem rögzíti: azt mindig az eszköz adatlapja adja meg.
  • Az elfogadási szűrő (acceptance filter) dönti el, hogy egy csomópont feldolgozza-e a beérkező, broadcast jellegű üzenetet, vagy figyelmen kívül hagyja.
  • A hibaelhárítás rögzített sorrendben gyors: lezárás mérése → vezetékezés és polaritás → tápellátás → azonos bitsebesség → jelszintek oszcilloszkóppal → a Bus-Off csomópont beazonosítása → dokumentálás.

Ellenőrző kérdések

  1. Milyen három fő részből épül fel egy CAN-csomópont?
  2. Mire való a 120 Ω-os lezáró ellenállás, és mi történik, ha hiányzik?
  3. Mekkora a differenciális feszültség dominánsban, illetve recesszívben, és miért fontos ez a nagy különbség?
  4. Mi a különbség a domináns és a recesszív állapot között, és melyik „győz”, ha egyszerre mindkettőt küldi valaki a buszra?
  5. Mi a különbség a High-Speed és a Low-Speed Fault-Tolerant CAN között?
  6. Sorold fel az adatkeret fő mezőit sorrendben, és mondd el, mire való a CRC-mező.
  7. Hogyan dönti el a CAN-busz, melyik eszköz „nyer”, ha egyszerre kezd küldeni kettő? Miért nevezzük ezt nem destruktív ütközésfeloldásnak?
  8. Mi a hibakeret szerepe?
  9. Mit jelent a Bus-Off állapot, és miért nem tekintjük egyszerűen „hibának”?
  10. Mire való az elfogadási szűrő (acceptance filter), és miért van rá szükség egy broadcast jellegű buszon?
  11. Egy CAN-busz nem kommunikál. Milyen sorrendben ellenőrzöd az okokat, és miért nem a szoftverbeállításokkal kezded?

Tudáspróba

1. Melyik fizikai réteg-szabvány rögzíti a High-Speed CAN-t? a) ANSI/TIA/EIA-485-A b) ISO 11898-1 c) ISO 11898-2 d) ISO 11898-3

2. Mekkora a nagy sebességű CAN-busz jellemző lezáró ellenállása? a) 220 Ω b) 50 Ω c) 100 Ω d) 120 Ω

3. Két csomópont egyszerre kezd küldeni, azonosítójuk 0x100 és 0x200. Melyik nyer az arbitráción, és miért?

4. Igaz vagy hamis: a CAN-arbitráció során a GYŐZTES csomópont üzenete is megsérül az ütközéstől, ezért azt meg kell ismételni. Indokold a válaszod, és mondd meg, mi történik közben a vesztes csomópont üzenetével.

5. Mi a CAN-adatkeret adatmezőjének maximális mérete a klasszikus (nem CAN FD) protokollban? a) 8 bájt b) 16 bájt c) 64 bájt d) 4 bájt

6. Nevezd meg a három CAN-hibaállapotot, és röviden jellemezd mindegyiket.

7. Egy csomópont Bus-Off állapotba került. Mi a helyes első lépés a hibakeresésben?

8. Miért van szükség a bitstuffing eljárásra a CAN-átvitelben?

Mennyire volt hasznos ez a fejezet?

Még nincs értékelés.